Запутано с дизайном функции химической формулы: если оператор не выведет «Привет», когда он должен - PullRequest
0 голосов
/ 06 марта 2019
def compound_properties(csv_name, compound_formula):
compDict = molform(compound_formula)

compK = compDict.keys()
sList = []
ele = ''
with open("atoms.csv", "r") as atomsF:
elemData = list([row for row in csv.reader(atomsF)])
for i in compK:
  ele = str(i)
  for j in elemData: 
    sList = j
    if ele in sList:
      print('hi')

Как проверить, находится ли этот элемент в этом списке, который я создал с помощью цикла for? Утверждение If, которое я имею, не печатает «привет», как это должно быть. Как это исправить??

Эта функция принимает два параметра: имя файла csv и формулу соединения.

Он должен вызвать функцию molform (), чтобы получить состав молекулы и получить требуемое свойство из файла CSV. Файл CSV будет иметь все свойства требуются.

Эта функция требуется для возврата кортежа из трех свойств: 1. НАИМЕНОВАНИЕ атома с самой низкой температурой кипения. Например, если это кислород, верните «Кислород», а не «О»

1 Ответ

0 голосов
/ 06 марта 2019

Прежде всего, вы можете немного сократить свой код, удалив ненужные объявления.

Редактировать: Полагаю, вы хотите открыть csv_name, а не "atoms.csv"?

С удалением всего устаревшего, это выглядит так (посмотрите здесь для получения дополнительной информации по csv.reader):

def compound_properties(csv_name, compound_formula):
    compDict = molform(compound_formula)

    with open(csv_name, "r") as atomsF:
        elemData = csv.reader(atomsF) # csv.reader already returns a list of rows

    for i in compDict:  # for loop automaticaly iterates over dict keys
        for j in elemData:
            if str(i) in j:  # no need to assign i or j to additional variables
                print('hi')

Без каких-либо реальных примеров данных я не могу сейчас сказать больше об этом, потому что проблема не в этом цикле for. С тестовыми данными он отлично работает:

elem_data = [['this', 'is', 'the', 'first', 'row'], ['this', 'is', 'the', 'bar', 'row'], ['this', 'is', 'all', 'a', 'big', 'foo']]

compDict = {'foo': 1, 'bar': 2, 'baz': 3}

for i in compDict:
    for j in elemData:
        if str(i) in j:
            print('{} was found in line {}'.format(i, elemData.index(j) + 1))

Выход:

foo was found in line 3
bar was found in line 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...