重置按钮计算器等问题 - 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: 中并使用关键字 breakcontinue.

例如,如果计算正确并完成,请修改代码以在每次计算后包含 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()

  # ...