Как прервать цикл if в Python и завершить программу?
Доброе день, помогите решить проблему есть программа калькулятор который считает ПДВ, вроде все работает, только не правильно работает оператор if если при проверке я вожу число больше 3 х или любую другую букву. Я хотел что бы программа прерывалась выводя сообщение о неправильном вводе. Вместо этого у меня сначала выводится еще один input потом заканчивается если ввожу число больше трех, если букву программа ломается.
from termcolor import colored
fun_dict = {1: 'C ПДВ', 2: 'Без ПДВ', 3: 'ПДВ'}
print(colored(on_color='on_red', text='\"""Налоговый калькулятор Украины 2021\"""'))
print(colored(color='red', text='Выберите пункт нажмите ENTER'))
def selection_calculation():
"""Функция выводит на экран выбор действия"""
for key, value in fun_dict.items():
print(key, '->', value)
def z_pdv():
"""Функция считает сумму заданную ПДВ и Без ПДВ"""
x = return_selection // 6
y = return_selection - return_selection // 6
print('Сумма с ПДВ ->', return_selection)
print('Сумма ПДВ ->', x, 'грн')
print('Сумма без ПДВ ->', y, 'грн')
def bez_pdv():
"""Функция считает сумму без С ПДВ и ПДВ"""
x1 = return_selection * 20 // 100 + return_selection
y1 = return_selection * 20 // 100
print('Сумма без ПДВ ->', return_selection)
print('Сумма с ПДВ ->', x1, 'грн')
print('Сумма ПДВ ->', y1, 'грн')
def pdv():
"""Функция считает сумму с ПДВ и без ПДВ"""
x2 = return_selection * 6
y2 = return_selection * 6 - return_selection
print('Сумма ПДВ ->', return_selection)
print('Сумма с ПДВ ->', x2, 'грн')
print('Сумма без ПДВ ->', y2, 'грн')
selection_calculation()
choice = int(input(colored(color='blue', attrs=['underline'], text='Выберите операцию :')))
return_selection = int(input(colored(color='blue', attrs=['underline'], text='Ведите сумму :')))
if choice == 1:
z_pdv()
elif choice == 2:
bez_pdv()
elif choice == 3:
pdv()
elif choice > 3:
print('Веденно неверное значение. Выберите значение от 1 до 3 включительно.')```
Ответы (3 шт):
Вместо этого у меня сначала выводится еще один input
Ничего удивительного. Оба инпута идут один за другим и только потом уже идет обработка первого.
Программа ломается при вводе буквы, потому что пытается привести введенные данные к целому числу. Нужно просто читать сообщения об ошибках.
Т.к. числа все равно не нужны, то приводить к числу не нужно
choice = input(colored(color='blue', attrs=['underline'], text='Выберите операцию :'))
и просто сравнивать со строкой:
if choice == "1":
z_pdv()
elif choice == "2":
bez_pdv()
elif choice == "3":
pdv()
else:
print('Веденно неверное значение. Выберите значение от 1 до 3 включительно.')
Подозреваю, что следующим будет вопрос, как все это выполнять в цикле, но на эту тему здесь уже много ответов.
Можно так:
choice = ''
while choice != ' ':
choice = input('Выберите операцию ("пробел" для окончания)')
if choice == '1':
z_pdv()
elif choice == '2':
bez_pdv()
elif choice == '3':
pdv()
else:
print('Неверное значение. Выберите значение от 1 до 3 включительно.')
Тут while choice != ' ': - цикл до момента, пока пользователь не введет пробел (замените по вкусу на что-то свое) для прекращения
Наворотил я кучу кода бессмысленного вроде все работает, только вот не могу побороть второй input что бы когда водится буква писало неверное значение все ломается((. Если убираю int функция не работает.
choice = (input(colored(color='blue', text='Выберите операцию :')))
while True:
if choice == '1':
return_selection = int(input(colored(color='blue', text='Ведите сумму :')))
z_pdv()
choice = (input(colored(color='blue', text='Выберите операцию :')))
elif choice == '2':
return_selection = int(input(colored(color='blue', text='Ведите сумму :')))
bez_pdv()
choice = (input(colored(color='blue', text='Выберите операцию :')))
elif choice == '3':
return_selection = int(input(colored(color='blue', text='Ведите сумму :')))
pdv()
choice = (input(colored(color='blue', text='Выберите операцию :')))
elif choice == '4':
print(colored(color='red', text='Выход из программы'))
break
else:
print(colored(color='red', text='Веденно неверное значение. Выберите значение от 1 до 3 включительно.'))
print(colored(color='red', text='Выход из программы'))
break