Как правильно выйти из бесконечного цикла
Столкнулся с проблемой в цикле.
Его нужно прервать по команде "done:", но при этом, чтобы вызывалась ошибка "Invalid input" в блоке try / except.
В моем же случае исключение ошибки ввода не позволяет прервать такой цикл строчкой.
largest = 0
smallest = 0
while True:
try:
num = int(input("Enter a number: "))
except:
print("Invalid input")
continue
if num == "done":
break
elif largest < num:
largest = num
elif smallest < num:
smallest = num
print("Maximum is ", largest)
print("Minimum is ", smallest)```
Ответы (3 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так
largest = 0
smallest = 0
fl = False
while True:
try:
_input = input("Enter a number: ")
num = int(_input)
except Exception as e:
print(f"Invalid input: {e}")
num = _input
fl = True
#print(f'num = {num}') #
# continue
if num == "done":
break
elif fl:
fl = False
elif largest < num:
largest = num
elif smallest < num:
smallest = num
print("Maximum is ", largest)
print("Minimum is ", smallest)
Автор решения: Be3y4uu_K0T
→ Ссылка
Предлагаю Вам так:
largest = 0
smallest = 0
while True:
try:
answer = input("Enter a number: ")
number = int(answer)
except (TypeError, ValueError):
if answer == "done":
break
else:
print("Invalid input")
else:
if largest < number:
largest = number
elif number < smallest:
smallest = number
print("Maximum is ", largest)
print("Minimum is ", smallest)
Автор решения: Namerek
→ Ссылка
values = {0}
while True:
if (reply := input("Enter a number: ")) == 'done':
break
sign = ''
if reply.startswith(('+', '-')):
sign, *val = reply
reply = ''.join(val)
if not reply.isnumeric():
print('Wrong value. Try once more.')
continue
values.add(
int(sign + reply)
)
print("Maximum is ", max(values))
print("Minimum is ", min(values))
Если чем-то не устраивает использование max и min
можно так:
smallest = 0
largest = 0
while True:
if (reply := input("Enter a number: ")) == 'done':
break
sign = ''
if reply.startswith(('+', '-')):
sign, *val = reply
reply = ''.join(val)
if not reply.isnumeric():
print('Wrong value. Try once more.')
continue
smallest, _, largest = sorted([smallest, int(sign + reply), largest])
print("Maximum is ", smallest)
print("Minimum is ", largest)
