#python #for-loop #while-loop #try-catch #valueerror
#python #для цикла #цикл while #попробуйте-поймать #ошибка значения
Вопрос:
У меня есть этот цикл
for i in range(branches):
count = 1
while True:
try:
computer = int(input('{} {} :'.format("Enter number of books for computer of branch", count)))
bookCount.append(computer)
physics = int(input('{} {} :'.format("Enter number of books for phsyics of branch", count)))
bookCount.append(physics)
chemistry = int(input('{} {} :'.format("Enter number of books for chemistry of branch", count)))
bookCount.append(chemistry)
biology = int(input('{} {} :'.format("Enter number of books for biology of branch", count)))
bookCount.append(biology)
arts = int(input('{} {} :'.format("Enter number of books for arts of branch", count)))
bookCount.append(arts)
except ValueError:
print("Input must be a number")
continue
if computer < 1:
print("Number must be at least 1")
else:
break
Если я введу say «Hello» вместо int , try except обнаружит проблему и выведет ошибку, но перезапустится с начала цикла try.
Есть ли способ продолжить с того места, где произошла ошибка, или все они должны быть разделены?
Редактировать::::
Я попробовал несколько способов форматирования этого сейчас, например, ниже, но он всегда возвращается к верхнему вводу
for i in range(branches):
count = 1
while True:
try:
computer = int(input('{} {} :'.format("Enter number of books for computer of branch", count)))
bookCount.append(computer)
try:
physics = int(input('{} {} :'.format("Enter number of books for physics of branch", count)))
bookCount.append(physics)
except ValueError:
print("Input must be a number:")
continue
except ValueError:
print("Input must be a number")
continue
if computer < 1:
print("Number must be at least 1")
else:
break
Любая помощь была бы отличной
Комментарии:
1. Да, вам нужно поместить цикл вокруг каждого ввода, чтобы делать то, что вы хотите сделать
2. Хорошо, я попробовал несколько способов форматирования этого сейчас, но он все равно возвращается к первому вводу каждый раз.
Ответ №1:
Вам нужно иметь ровно один вход внутри вашего блока try, чтобы делать то, что вы хотите. Лучший способ добиться этого — с помощью функции:
def get_input(request_string, count):
while True:
try:
value = int(input('{} {} :'.format(request_string, count)))
except ValueError:
print("Input must be a number")
continue
if value < 1:
print("Number must be at least 1")
else:
return value
for count in range(branches):
bookcount.append(get_input("Enter number of books for computer of branch", count))
bookcount.append(get_input("Enter number of books for phsyics of branch", count))
...
Комментарии:
1. Я думаю, вам следует сделать bookcount dict, а не list, чтобы вы могли выполнять
bookcount["computer"] = 1
, и у вас могли быть строки запроса в аналогичном dict, чтобы вы могли просто повторить это, напримерfor each booktype bookcount[booktype] = get_input(booktype)
Вероятно, вам следует также дать людям выход из цикла while() , например, если входные данные равны нулю, почему бы не принять их и сохранить, а не жаловаться?2. Потому что breif требует, чтобы это было указано как ошибка, к сожалению. Старые добрые задания uni.
3. Я знаю, что университеты могут быть отрезаны от реального мира, но я бы подумал, что концепция нуля уже дошла до них! Хороший разработчик бросает вызов глупым запросам! («Что, если книг нет?»)