重置按钮计算器等问题 - Python
Problem with reset button calculator and more - Python
这是一个 python 计算器。我在这里开发了一部分。
但,
在这个计算器中,当用户输入两个错误的数字或一个错误的运算符时,重置功能由 $ + enter 给出。
如何给代码添加复位功能?
如何正确使用Conditions中的select_op函数?
如何在所有活动结束时再次打印菜单?
while True:
print("Select operation.")
print("1.Add : + ")
print("2.Subtract : - ")
print("3.Multiply : * ")
print("4.Divide : / ")
print("5.Power : ^ ")
print("6.Remainder: % ")
print("7.Terminate: # ")
print("8.Reset : $ ")
# take input from the user
choice = input("Enter choice(+,-,*,/,^,%,#,$): ")
print(choice)
if choice in ('1', '2', '3', '4', '5', '6', '7', '8'):
num1 = float(input("Enter first number: "))
num2 = float(input("Enter second number: "))
#calculate user input numbers
if(select_op(choice) == 1):
print(num1 , " + " , num2 , " = " , add(num1,num2))
elif(select_op(choice) == 2):
print(num1 , " - " , num2 , " = " , subtract(num1,num2))
elif(select_op(choice) == 3):
print(num1 , " * " , num2 , " = " , multiply(num1,num2))
elif(select_op(choice) == 4):
print(num1 , " / " , num2 , " = " , divide(num1,num2))
elif(select_op(choice) == 5):
print(num1 , " ^ " , num2 , " = " , power(num1,num2))
elif(select_op(choice) == 6):
print(num1 , " % " , num2 , " = " , remainder(num1,num2))
elif(select_op(choice) == 7):
print(num1 , " # " , num2 , " = " , terminate(num1,num2))
else:
print("Not a valid number,please enter again")
else:
print("Unrecognized operation")
#program ends here
print("Done. Terminating")
exit()
您的内容缩进不正确。
您的代码应如下所示...
from os import system
while True:
system('cls') #change cls to clear if this doesn't work
print("Select operation.")
print("1.Add : + ")
print("2.Subtract : - ")
print("3.Multiply : * ")
print("4.Divide : / ")
print("5.Power : ^ ")
print("6.Remainder: % ")
print("7.Terminate: # ")
print("8.Reset : $ ")
# take input from the user
choice = input("Enter choice(+,-,*,/,^,%,#,$): ")
print(choice)
num1 = ''
num2 = ''
while True:
if num1 != '1' and num1 != '2' and num1 != '3' and num1 != '4' and num1 != '5' and num1 != '6' and num1 != '7' and num1 != '8' and num1 != '9' and num1 != '0' or num2 != '1' and num2 != '2' and num2 != '3' and num2 != '4' and num2 != '5' and num2 != '6' and num2 != '7' and num2 != '8' and num2 != '9' and num2 != '0':
num1 = input("Enter first number: ")
num2 = input("Enter second number: ")
else:
float(num1)
float(num2)
break
#calculate user input numbers
if(select_op(choice) == 1):
print(num1 , " + " , num2 , " = " , add(num1,num2))
elif(select_op(choice) == 2):
print(num1 , " - " , num2 , " = " , subtract(num1,num2))
elif(select_op(choice) == 3):
print(num1 , " * " , num2 , " = " , multiply(num1,num2))
elif(select_op(choice) == 4):
print(num1 , " / " , num2 , " = " , divide(num1,num2))
elif(select_op(choice) == 5):
print(num1 , " ^ " , num2 , " = " , power(num1,num2))
elif(select_op(choice) == 6):
print(num1 , " % " , num2 , " = " , remainder(num1,num2))
elif(select_op(choice) == 7):
print(num1 , " # " , num2 , " = " , terminate(num1,num2))
else:
print("Not a valid number,please enter again")
else:
print("Unrecognized operation")
#program ends here
print("Done. Terminating")
exit()
我从 os 导入了系统。通过使用 system('cls') (将 cls 更改为 clear 如果它不起作用)它会在每个循环后清除控制台所以它在新屏幕上重新启动。所以这应该可以解决您从菜单重新启动的问题。
更新答案 #1
好的,所以我更改了让用户输入数字的位置。现在它会在用户输入字母时继续询问用户输入,并在两个输入均为数字时停止。 (我已经测试过它有效)
更新的答案 #2
我不知道 select_op 是您自己制作的功能还是某种模块。但是你可以说...
if choice == '+':
print(num1 , " + " , num2 , " = " , add(num1,num2))
对其他人也这样做。
更新的答案 #3
你必须一个接一个地使用 else 语句。这会导致错误
我很难完全理解你需要做什么;不过,我会尽量按照自己的理解来回答。
所以,如果输入乱码,你想重置密码吗?您可以将整个代码(当然最后两行除外)放在 while True:
中并使用关键字 break
和 continue
.
例如,如果计算正确并完成,请修改代码以在每次计算后包含 break
,如下所示:
elif(select_op(choice) == 7):
print(num1 , " # " , num2 , " = " , terminate(num1,num2))
break
else:
print("Not a valid number,please enter again")
这告诉 Python 退出它所在的循环,在本例中,它是 while True:
循环。
如果出现问题,您可以像这样使用 continue
:
else:
print("Unrecognized operation")
continue
这告诉 Python 忽略其余代码并返回到最近循环的顶部。
要清除终端 windows 就像脚本刚刚启动一样,您可以使用 @RumbleFish 推荐的使用系统('cls').
How to print the menu again at the end of all activities?
你可以将菜单代码放在一个函数中,然后在开始和结束时调用它。这是函数的一种用法;不重复相同的代码。
How to use the select_op function in Conditions correctly?
这让我很困惑,因为你没有提供 select_op 的定义。为什么你甚至需要那个?你里面有一些异常处理吗?如果没有异常处理,您可以像这样使用 int()
将 choice 更改为 int:choice = int(input("Enter choice(+,-,*,/,^,%,#,$): ")
不要考虑所有这些情况,而是考虑使用字典,其中每个键都映射到操作和函数的字符串;例如:
choice_dict = {1:("+",add), 2:("-",subtract)}
并将打印更改为
print(num1 , choice_dict[select_op(choice)][0] , num2 , " = " , choice_dict[select_op(choice)][1](num1,num2))
break
这是可行的,因为 Python 允许您将函数名称(加、减...)作为变量。例如:
def add(x,y):
return x + y
alias = add
print(alias(1,2))
其中returns3,好像我们已经调用了add.
注意:我认为 if(select_op(choice) == 1):
的缩进不正确。
我尽量以我最理解的方式回答你的问题,如果这不是你想要的,或者我是否遗漏了什么,请告诉我。
据我了解,'Reset' 必须是当用户输入“$”作为输入选项时重新启动程序的操作。同样,'#' 结束程序。
但是,我不是一个 Python 开发人员,但据我所知,这个脚本是不完整的。
因此,需要定义一个名为select_op(operator)
的函数,它接受一个字符串参数作为用户输入的运算符。
根据通用签名,此功能可能看起来像...
int select_op(string operator);
该函数应枚举映射到这些运算符的一系列整数,例如字典或 name-value 集合。
据我了解,该函数可能类似于...
def select_op(key):
operatorEnum = {
'+': 1,
'-': 2,
'*': 3,
'/': 4,
'^': 5,
'%': 6,
'$': 7
}
return operatorEnum.get(key)
我的建议
我宁愿将整个脚本打散,分离出独立的函数来清楚地控制执行流程。
然后根据逻辑定义一个驱动程序函数 wire-up 每个函数。在这种情况下,很容易重新启动(又名“重置”)或退出(又名“终止”)应用程序。例如,
def showMenu():
print("Select operation.")
print("1.Add : + ")
print("2.Subtract : - ")
print("3.Multiply : * ")
print("4.Divide : / ")
print("5.Power : ^ ")
print("6.Remainder: % ")
print("7.Terminate: # ")
print("8.Reset : $ ")
def main():
showMenu()
# ...
if choice == '$':
main()
# ... or ...
if select_op(choice) == 7:
main()
# ...
if choice == '#':
print('Done. Terminating')
exit()
# ...
这是一个 python 计算器。我在这里开发了一部分。 但, 在这个计算器中,当用户输入两个错误的数字或一个错误的运算符时,重置功能由 $ + enter 给出。 如何给代码添加复位功能?
如何正确使用Conditions中的select_op函数?
如何在所有活动结束时再次打印菜单?
while True:
print("Select operation.")
print("1.Add : + ")
print("2.Subtract : - ")
print("3.Multiply : * ")
print("4.Divide : / ")
print("5.Power : ^ ")
print("6.Remainder: % ")
print("7.Terminate: # ")
print("8.Reset : $ ")
# take input from the user
choice = input("Enter choice(+,-,*,/,^,%,#,$): ")
print(choice)
if choice in ('1', '2', '3', '4', '5', '6', '7', '8'):
num1 = float(input("Enter first number: "))
num2 = float(input("Enter second number: "))
#calculate user input numbers
if(select_op(choice) == 1):
print(num1 , " + " , num2 , " = " , add(num1,num2))
elif(select_op(choice) == 2):
print(num1 , " - " , num2 , " = " , subtract(num1,num2))
elif(select_op(choice) == 3):
print(num1 , " * " , num2 , " = " , multiply(num1,num2))
elif(select_op(choice) == 4):
print(num1 , " / " , num2 , " = " , divide(num1,num2))
elif(select_op(choice) == 5):
print(num1 , " ^ " , num2 , " = " , power(num1,num2))
elif(select_op(choice) == 6):
print(num1 , " % " , num2 , " = " , remainder(num1,num2))
elif(select_op(choice) == 7):
print(num1 , " # " , num2 , " = " , terminate(num1,num2))
else:
print("Not a valid number,please enter again")
else:
print("Unrecognized operation")
#program ends here
print("Done. Terminating")
exit()
您的内容缩进不正确。 您的代码应如下所示...
from os import system
while True:
system('cls') #change cls to clear if this doesn't work
print("Select operation.")
print("1.Add : + ")
print("2.Subtract : - ")
print("3.Multiply : * ")
print("4.Divide : / ")
print("5.Power : ^ ")
print("6.Remainder: % ")
print("7.Terminate: # ")
print("8.Reset : $ ")
# take input from the user
choice = input("Enter choice(+,-,*,/,^,%,#,$): ")
print(choice)
num1 = ''
num2 = ''
while True:
if num1 != '1' and num1 != '2' and num1 != '3' and num1 != '4' and num1 != '5' and num1 != '6' and num1 != '7' and num1 != '8' and num1 != '9' and num1 != '0' or num2 != '1' and num2 != '2' and num2 != '3' and num2 != '4' and num2 != '5' and num2 != '6' and num2 != '7' and num2 != '8' and num2 != '9' and num2 != '0':
num1 = input("Enter first number: ")
num2 = input("Enter second number: ")
else:
float(num1)
float(num2)
break
#calculate user input numbers
if(select_op(choice) == 1):
print(num1 , " + " , num2 , " = " , add(num1,num2))
elif(select_op(choice) == 2):
print(num1 , " - " , num2 , " = " , subtract(num1,num2))
elif(select_op(choice) == 3):
print(num1 , " * " , num2 , " = " , multiply(num1,num2))
elif(select_op(choice) == 4):
print(num1 , " / " , num2 , " = " , divide(num1,num2))
elif(select_op(choice) == 5):
print(num1 , " ^ " , num2 , " = " , power(num1,num2))
elif(select_op(choice) == 6):
print(num1 , " % " , num2 , " = " , remainder(num1,num2))
elif(select_op(choice) == 7):
print(num1 , " # " , num2 , " = " , terminate(num1,num2))
else:
print("Not a valid number,please enter again")
else:
print("Unrecognized operation")
#program ends here
print("Done. Terminating")
exit()
我从 os 导入了系统。通过使用 system('cls') (将 cls 更改为 clear 如果它不起作用)它会在每个循环后清除控制台所以它在新屏幕上重新启动。所以这应该可以解决您从菜单重新启动的问题。
更新答案 #1
好的,所以我更改了让用户输入数字的位置。现在它会在用户输入字母时继续询问用户输入,并在两个输入均为数字时停止。 (我已经测试过它有效)
更新的答案 #2
我不知道 select_op 是您自己制作的功能还是某种模块。但是你可以说...
if choice == '+':
print(num1 , " + " , num2 , " = " , add(num1,num2))
对其他人也这样做。
更新的答案 #3
你必须一个接一个地使用 else 语句。这会导致错误
我很难完全理解你需要做什么;不过,我会尽量按照自己的理解来回答。
所以,如果输入乱码,你想重置密码吗?您可以将整个代码(当然最后两行除外)放在 while True:
中并使用关键字 break
和 continue
.
例如,如果计算正确并完成,请修改代码以在每次计算后包含 break
,如下所示:
elif(select_op(choice) == 7):
print(num1 , " # " , num2 , " = " , terminate(num1,num2))
break
else:
print("Not a valid number,please enter again")
这告诉 Python 退出它所在的循环,在本例中,它是 while True:
循环。
如果出现问题,您可以像这样使用 continue
:
else:
print("Unrecognized operation")
continue
这告诉 Python 忽略其余代码并返回到最近循环的顶部。
要清除终端 windows 就像脚本刚刚启动一样,您可以使用 @RumbleFish 推荐的使用系统('cls').
How to print the menu again at the end of all activities?
你可以将菜单代码放在一个函数中,然后在开始和结束时调用它。这是函数的一种用法;不重复相同的代码。
How to use the select_op function in Conditions correctly?
这让我很困惑,因为你没有提供 select_op 的定义。为什么你甚至需要那个?你里面有一些异常处理吗?如果没有异常处理,您可以像这样使用 int()
将 choice 更改为 int:choice = int(input("Enter choice(+,-,*,/,^,%,#,$): ")
不要考虑所有这些情况,而是考虑使用字典,其中每个键都映射到操作和函数的字符串;例如:
choice_dict = {1:("+",add), 2:("-",subtract)}
并将打印更改为
print(num1 , choice_dict[select_op(choice)][0] , num2 , " = " , choice_dict[select_op(choice)][1](num1,num2))
break
这是可行的,因为 Python 允许您将函数名称(加、减...)作为变量。例如:
def add(x,y):
return x + y
alias = add
print(alias(1,2))
其中returns3,好像我们已经调用了add.
注意:我认为 if(select_op(choice) == 1):
的缩进不正确。
我尽量以我最理解的方式回答你的问题,如果这不是你想要的,或者我是否遗漏了什么,请告诉我。
据我了解,'Reset' 必须是当用户输入“$”作为输入选项时重新启动程序的操作。同样,'#' 结束程序。
但是,我不是一个 Python 开发人员,但据我所知,这个脚本是不完整的。
因此,需要定义一个名为select_op(operator)
的函数,它接受一个字符串参数作为用户输入的运算符。
根据通用签名,此功能可能看起来像...
int select_op(string operator);
该函数应枚举映射到这些运算符的一系列整数,例如字典或 name-value 集合。
据我了解,该函数可能类似于...
def select_op(key):
operatorEnum = {
'+': 1,
'-': 2,
'*': 3,
'/': 4,
'^': 5,
'%': 6,
'$': 7
}
return operatorEnum.get(key)
我的建议
我宁愿将整个脚本打散,分离出独立的函数来清楚地控制执行流程。 然后根据逻辑定义一个驱动程序函数 wire-up 每个函数。在这种情况下,很容易重新启动(又名“重置”)或退出(又名“终止”)应用程序。例如,
def showMenu():
print("Select operation.")
print("1.Add : + ")
print("2.Subtract : - ")
print("3.Multiply : * ")
print("4.Divide : / ")
print("5.Power : ^ ")
print("6.Remainder: % ")
print("7.Terminate: # ")
print("8.Reset : $ ")
def main():
showMenu()
# ...
if choice == '$':
main()
# ... or ...
if select_op(choice) == 7:
main()
# ...
if choice == '#':
print('Done. Terminating')
exit()
# ...