Помогите разобраться!
У меня такая проблема возникла, что когда я запускаю код вроде бы всё работает, но когда время доходит до переменной sign. Не всё корректно работает, если вводить в переменую sign (fct или factorial), то всё работает замечательно, а если +, -, *, **, //, /, sqrt
# Welcome, my Calculator 1.0 Edition & nikEgoEDITION
# Made by nikEgo
# https://github.com/nikEgo/Calculator-in-Python-Edition
from math import sqrt as sq, factorial as fct
def add(a, b): return a + b
def minn(a, b): return a - b
def mult(a, b): return a * b
def div(a, b):
warning = "Так делать нельзя!!"
if b != 0:
if b > a:
return round(a / b, 3)
else:
return round(a / b, 5)
else:
return warning
def powMy(a, b): return a ** b
def main():
loop = True
first_number, second_number, sign = 0, 0, ''
while loop:
while True:
current_state = True
try: first_number = float(int(input("Input first number: ")))
except ValueError: current_state = False
finally:
if current_state:
break
while True:
current_state = True
try: second_number = float(int(input("Input second number: ")))
except ValueError: current_state = False
finally:
if current_state:
break
while True:
current_state = True
try: sign = input("Input sign: ")
finally:
operations = ['+', '-', '*', '/', '**', '//', 'sqrt', 'factorial', 'fct']
for operation in operations:
if operation == sign: current_state = True
else: current_state = False
if current_state == True: break
loop = False
if sign == '+': print(add(first_number, second_number))
elif sign == '-': print(minn(first_number, second_number))
elif sign == '*': print(mult(first_number, second_number))
elif sign == '/': print(div(first_number, second_number))
elif sign == '**': print(powMy(first_number, second_number))
elif sign == 'sqrt': print(*[sq(first_number), sq(second_number)])
elif sign == 'factorial' or sign == 'fct': print(*[fct(int(first_number)), fct(int(second_number))])
if __name__ == '__main__':
main()
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Посмотрите сюда:
operations = ['+', '-', '*', '/', '**', '//', 'sqrt', 'factorial', 'fct']
for operation in operations:
if operation == sign: current_state = True
else: current_state = False
Если sign, например, "-", найден в списке, поставили True, но потом его сравнили ещё раз со следующим значением в списке и затерли False!
Уставите в начале current_state = False, а при совпадении останавливайте цикл (или хотя бы не делайте current_state = False)
if operation == sign:
current_state = True
break