首页 > 解决方案 > 尝试在接受 int 和 str 值的同时中断计算器程序的 while 循环

问题描述

我在学习python时正在制作一个计算器程序,我在高中学习Java并且还不知道任何高级python函数,所以尽量不要使用任何太高级的东西,但让我们来解决我的问题。抱歉,如果这个问题没有正确组织,我从未在这里发布过。整个程序将在底部。

我遇到困难的地方是我让用户输入他们想要使用的运算符,然后它要求输入数字 1 和数字 2。如果用户随时键入“退出”或“停止”,则程序退出,因为操作员部分退出正常并显示退出消息。但是当为 num1 或 num2 输入 exit 时,我没有得到我想要的响应,我在使用它时遇到很多错误,但主要是像 num 是 int 不能有字符串值,num 是 str 不能有 int,或者它接受'exit'/ 'stop' 但随后进入 num2 并在任何内容输入 num2 后抛出错误

operator = (input("Would you like to add(+), subtract(-), multiply(*), divide(/) or use exponents(**)? "))

if operator.lower() == 'exit' or operator.lower() == 'stop':
    break                       #this part works fine and as intended

num1 = eval(input("Enter number 1: "))
if num1 == str() and (num1.lower() == 'exit' or num1.lower() == 'stop'):
    break                       #this part however doesnt work because i have int and str in the same variable

num2 = eval(input("Enter number 2: "))
if num2 == str() and (num2.lower() == 'exit' or num2.lower() == 'stop'):
    break

我尝试过对 nums 使用 float、str 或 int,弄乱 if 语句的位置,我希望能够接受 'exit' 或 'stop' 作为 num 的值,然后退出 while 循环,结束该程序,但我尝试了一个小时左右,无法弄清楚。所以我的问题是我需要 num1 和 num2 值才能接受 str 和 int 并在它们等于“停止”或“退出”时结束程序

operator = ''
num1 = ''
num2 = ''
while True:
    operator = (input("Would you like to add(+), subtract(-), multiply(*), divide(/) or use exponents(**)? "))

    if operator.lower() == 'exit' or operator.lower() == 'stop':
        break

    num1 = eval(input("Enter number 1: "))
    if num1 == str() and (num1.lower() == 'exit' or num1.lower() == 'stop'):
        break

    num2 = eval(input("Enter number 2: "))
    if num2 == str() and (num2.lower() == 'exit' or num2.lower() == 'stop'):
        break

    oldNum2 = num2

    if operator == 'add' or operator == '+':
        answer = num1 + num2
        print(num1, '+', num2, '=', answer)

    elif operator == 'subtract' or operator == '-':
        answer = num1 - num2
        print(num1, '-', num2, '=', answer)

    elif operator == 'multiply' or operator == '*':
        answer = num1 * num2
        print(num1, '*', num2, '=', answer)

    elif operator == 'divide' or operator == '/':
        answer = num1 / num2
        print(num1, '/', num2, '=', answer)

    elif operator == 'exponents' or operator == '**':
        answer = num1 ** num2
        print(num1, '**', num2, '=', answer)

    else:
        print('Please type a valid operator...')
print('Program has exited due to user input.')

标签: pythonif-statementwhile-loopcalculatorbreak

解决方案


您的问题可能有很多答案,但我要做的就是摆脱eval()并处理它,input()因为它总是采用字符串格式。

num1 = input("Enter number 1: ")
if num1.lower() == 'exit' or num1.lower() == 'stop':
    break
    
num2 = input("Enter number 2: ")
if num2.lower() == 'exit' or num2.lower() == 'stop':
    break

但是因为num1andnum2在 if 语句之后都是字符串格式,请确保将它们转换为整数(或浮点数)

num1 = int(num1)
num2 = int(num2)

推荐阅读