尝试在接受 int 和 str 值的同时中断计算器程序的 while 循环
Trying to break in a while loop for a calculator program while accepting int and str values
我在学习python的同时正在制作一个计算器程序,我在高中学习了Java,还不知道任何高级的python函数,所以不要尝试使用任何太高级的东西,但让我们解决我的问题。抱歉,如果这个问题组织不当,我从来没有在这里发帖。整个程序将在底部。
我卡住的地方是我让用户输入他们想要使用的运算符,然后它要求输入数字 1 和数字 2。如果用户键入 'exit' 或 'stop'然后程序随时退出,对于操作员部分,它可以正常退出并显示退出消息。但是当为 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
我尝试过将 float、str 或 int 用于 nums,弄乱 if 语句的位置,我希望能够接受 'exit' 或 'stop' 作为 num 的值然后退出 while 循环,该循环结束程序,但我试了一个小时左右,但无法弄清楚。所以我的问题又是我需要 num1 和 num2 值能够接受 str 和 int 并在它们等于 'stop' 或 'exit'
时结束程序
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.')
基本上只是将 num1
和 num2
视为字符串,直到您知道它们不是 stop
或 exit
,然后从中解析出数字:
def isExitCommand(userInput):
return userInput.lower() == 'exit' or userInput.lower() == 'stop'
while True:
operator = str(input("Would you like to add(+), subtract(-), multiply(*), divide(/) or use exponents(**)? "))
if isExitCommand(operator):
break #this part works fine and as intended
num1 = input("Enter number 1: ")
if isExitCommand(num1):
break
else:
num1 = float(num1)
num2 = input("Enter number 2: ")
if isExitCommand(num2):
break
else:
num2 = float(num2)
print("You entered {} {} {}".format(num1, operator, num2))
此外,无需检查输入是否为字符串,但如果确实需要,则 num1 == str()
不正确。 str()
只是给出一个空字符串。你想 isinstance(s, str)
而不是 Python 3.x
您的问题可能有很多答案,但我要做的是去掉 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
和 num2
在 if 语句之后都是字符串格式,请确保将它们转换为整数(或浮点数)
num1 = int(num1)
num2 = int(num2)
您的功能问题出现在这些验证检查的开始:
if num1 == str() and ...
你刚刚没有通过检查,就在那里。我 认为 您正在尝试检查 eval
之后的输入类型(顺便说一句,这是一个 baaaaaad 函数)。
str()
是将空参数转换为字符串的调用。这 returns 一个空字符串。因为这不等于任何 non-empty 输入,所以你失败了。
而是使用为此目的提供的函数:
if isinstance(num1, str)
更好的是,在尝试转换之前检查值:
user_input = input("What would you like to do?")
if user_input in ("stop", "exit"):
break
我在学习python的同时正在制作一个计算器程序,我在高中学习了Java,还不知道任何高级的python函数,所以不要尝试使用任何太高级的东西,但让我们解决我的问题。抱歉,如果这个问题组织不当,我从来没有在这里发帖。整个程序将在底部。
我卡住的地方是我让用户输入他们想要使用的运算符,然后它要求输入数字 1 和数字 2。如果用户键入 'exit' 或 'stop'然后程序随时退出,对于操作员部分,它可以正常退出并显示退出消息。但是当为 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
我尝试过将 float、str 或 int 用于 nums,弄乱 if 语句的位置,我希望能够接受 'exit' 或 'stop' 作为 num 的值然后退出 while 循环,该循环结束程序,但我试了一个小时左右,但无法弄清楚。所以我的问题又是我需要 num1 和 num2 值能够接受 str 和 int 并在它们等于 'stop' 或 'exit'
时结束程序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.')
基本上只是将 num1
和 num2
视为字符串,直到您知道它们不是 stop
或 exit
,然后从中解析出数字:
def isExitCommand(userInput):
return userInput.lower() == 'exit' or userInput.lower() == 'stop'
while True:
operator = str(input("Would you like to add(+), subtract(-), multiply(*), divide(/) or use exponents(**)? "))
if isExitCommand(operator):
break #this part works fine and as intended
num1 = input("Enter number 1: ")
if isExitCommand(num1):
break
else:
num1 = float(num1)
num2 = input("Enter number 2: ")
if isExitCommand(num2):
break
else:
num2 = float(num2)
print("You entered {} {} {}".format(num1, operator, num2))
此外,无需检查输入是否为字符串,但如果确实需要,则 num1 == str()
不正确。 str()
只是给出一个空字符串。你想 isinstance(s, str)
而不是 Python 3.x
您的问题可能有很多答案,但我要做的是去掉 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
和 num2
在 if 语句之后都是字符串格式,请确保将它们转换为整数(或浮点数)
num1 = int(num1)
num2 = int(num2)
您的功能问题出现在这些验证检查的开始:
if num1 == str() and ...
你刚刚没有通过检查,就在那里。我 认为 您正在尝试检查 eval
之后的输入类型(顺便说一句,这是一个 baaaaaad 函数)。
str()
是将空参数转换为字符串的调用。这 returns 一个空字符串。因为这不等于任何 non-empty 输入,所以你失败了。
而是使用为此目的提供的函数:
if isinstance(num1, str)
更好的是,在尝试转换之前检查值:
user_input = input("What would you like to do?")
if user_input in ("stop", "exit"):
break