python - 尝试在接受 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.')
解决方案
您的问题可能有很多答案,但我要做的就是摆脱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
但是因为num1
andnum2
在 if 语句之后都是字符串格式,请确保将它们转换为整数(或浮点数)
num1 = int(num1)
num2 = int(num2)
推荐阅读
- html - BootStrap Jumbotron 宽度
- gdi+ - GDI+ 将图像透明部分的颜色重置为黑色
- vue.js - Materialise CSS Modal 不适用于 Vue
- javascript - 使用 FileReader 时如何在 typescript 中使用回调函数?角 5
- flutter - 如何在flutter中进行wordpress api认证
- javascript - JS:尽管函数为空,但在断开连接时超出了最大调用堆栈大小
- authentication - nginx_ldap_auth 和自定义认证页面
- r - 为在 R 中存储为字符串的嵌套列表的索引赋值
- selenium - 如何在众多元素中点击少数已启用的元素
- git - 使用一个远程管理两个本地 GIT 存储库