#python #csv
#python #csv
Вопрос:
У меня есть код, который просит пользователя ввести свое имя. Если имя будет в файле csv, оно выведет значение true, а затем прервется. Если данные не имеют входных данных, цикл будет продолжаться. Однако, даже когда мой вывод правильный, он просто продолжает цикл, как показано ниже:
Enter Name:Bob
true
Enter Name:
Это мои данные csv:
{'age': '20', 'name': 'Alice'}
{'age': '21', 'name': 'Freddie'}
{'age': '17', 'name': 'Bob'}
Ниже приведен мой код:
import csv
filePath = "data.csv"
with open(filePath) as csvfile:
reader = csv.DictReader(csvfile)
was_found = False
while True:
nam1 = input("Enter Name:")
for row in reader:
if nam1 == row['name']:
print("true")
break
if nam1 == "":
print('Empty input, please enter again')
Комментарии:
1. почему вы используете строку [‘id’], если ключ называется ‘name’?
2. отредактировано по имени.
Ответ №1:
break
ограничивается непосредственным внешним циклом. Таким образом, это нарушает for
не while
Ответ №2:
Один совет по исправлению: используйте переменную и проверяйте переменную в конце цикла. Вероятно, это значение вашей переменной was_found
import csv
filePath = "data.csv"
with open(filePath) as csvfile:
reader = csv.DictReader(csvfile)
was_found = False
have_to_break = False
while True:
nam1 = input("Enter Name:")
for row in reader:
if nam1 == row['id']:
print("true")
have_to_break = True
if nam1 == "":
print('Empty input, please enter again')
if have_to_break:
break
Я почти уверен, что смогу избежать значения while True, выполните строку for в reader, затем получите then input («name»)
Ответ №3:
Другой способ сделать это — вернуть значение из функции:
import csv
def get_name(reader):
while True:
nam1 = input("Enter Name:")
if nam1 == "":
print('Empty input, please enter again')
continue
for row in reader:
if nam1 == row['name']:
print("true")
return nam1
filePath = "data.csv"
with open(filePath) as csvfile:
reader = csv.DictReader(csvfile)
was_found = False
nam1 = get_name(reader)