如何在我的第一个python计算器中修复while循环



首先,我是python的新手。我正在尝试我的第一个程序,目前我被卡住了。我被困在第二个while循环中,程序要求用户输入正确的运算符。我希望程序一直要求一个正确的运算符,直到用户输入一个,然后我希望num2变量被执行。问题是,vatables op和num2将被执行,然后我会看到错误消息,之后,它将循环回op。我如何写它,这样我就不必写第三个while循环来处理num2的错误,因为我会得到一个错误,说明num2被调用,但没有在op的循环中定义?请帮忙。代码如下:

print("                      Welcome to Calculator!")
print("n********************************************************************n")
...
user_instructions =('''
Instructions:
Type in a number, then press Enter.
Type in an available Operator, followed by Enter.
Type in another number, then press Enter.''')
def instructions():
print(user_instructions)
instructions()
operator_list =('''
Below is the list of available operators:
+ for Addition
- for Subtraction
/ for Division
* for Multiplication
^ for exponents
r for root
% for modulus''')

def calculate():
print(operator_list)
print("n********************************************************************n")

while True:
try:
num1 = float(input("Enter a number: "))
break
except ValueError:
print("Invalid input. Please try again...")
print("n********************************************************************n")


while True:
try:
op = input("Enter an operator: ")
num2 = float(input("Enter another number: "))
break
except ValueError:
print("Invalid input. Please try again...")

if op == "+":
print('{} + {} = '.format(num1, num2))
print("n")
print(num1 + num2)
elif op == "-":
print('{} - {} = '.format(num1, num2))
print("n")
print(num1 - num2)
elif op == "/":
if num2 == 0:
print('Math error! Cannot divide by zero!')
else:
print('{} / {} = '.format(num1, num2))
print("n")
print(num1 / num2)
elif op == "*":
print('{} * {} = '.format(num1, num2))
print("n")
print(num1 * num2)
elif op == "^":
print('{} ^ {} = '.format(num1, num2))
print("n")
print(num1 ** num2)
elif op == "r":
print('{} root {} = '.format(num1, num2))
print("n")
print(num2 ** (1/num1))
elif op == "%":
print('{} % {} = '.format(num1, num2))
print("n")
print(num1 % num2)
else:
print("Invalid Input. Please try again")
print("n********************************************************************n")     
calculate() 
print("n********************************************************************n")
def again():
calc_again = input('''
Would you like to calculate again?
Please type Y for YES or N for No.
''')
print("n********************************************************************n")

if calc_again.upper() == 'Y':
calculate()
print("n********************************************************************n")
again()
elif calc_again.upper()  == 'N':
print("Thank you for using Calculator, Goodbye...") 
import sys
sys.exit()

else:
print("Invalid Input. Please try again...")
print("n********************************************************************n")
again()
print("n********************************************************************n")
calculate()

again()

您可以让函数calculate((调用自己,方法如下:

print("                      Welcome to Calculator!")
print("n********************************************************************n")
...
user_instructions =('''
Instructions:
Type in a number, then press Enter.
Type in an available Operator, followed by Enter.
Type in another number, then press Enter.''')
def instructions():
print(user_instructions)
instructions()
operator_list =('''
Below is the list of available operators:
+ for Addition
- for Subtraction
/ for Division
* for Multiplication
^ for exponents
r for root
% for modulus''')

def calculate():
print(operator_list)
print("n********************************************************************n")

while True:
try:
num1 = float(input("Enter a number: "))
break
except ValueError:
print("Invalid input. Please try again...")
print("n********************************************************************n")


while True:
try:
op = input("Enter an operator: ")
num2 = float(input("Enter another number: "))
break
except ValueError:
print("Invalid input. Please try again...")

if op == "+":
print('{} + {} = '.format(num1, num2))
print("n")
print(num1 + num2)
elif op == "-":
print('{} - {} = '.format(num1, num2))
print("n")
print(num1 - num2)
elif op == "/":
if num2 == 0:
print('Math error! Cannot divide by zero!')
else:
print('{} / {} = '.format(num1, num2))
print("n")
print(num1 / num2)
elif op == "*":
print('{} * {} = '.format(num1, num2))
print("n")
print(num1 * num2)
elif op == "^":
print('{} ^ {} = '.format(num1, num2))
print("n")
print(num1 ** num2)
elif op == "r":
print('{} root {} = '.format(num1, num2))
print("n")
print(num2 ** (1/num1))
elif op == "%":
print('{} % {} = '.format(num1, num2))
print("n")
print(num1 % num2)
else:
print("Invalid Input. Please try again")
print("n********************************************************************n")

while True:
calc_again = input('''
Would you like to calculate again?
Please type Y for YES or N for No.
''')
print("n********************************************************************n")

if calc_again.upper() == 'Y':
calculate()
break
elif calc_again.upper()  == 'N':
print("Thank you for using Calculator, Goodbye...") 
import sys
sys.exit()

else:
print("Invalid Input. Please try again...")
print("n********************************************************************n")

calculate()

顺便说一句,非常彻底的代码,很棒的工作!

您很可能希望在要求用户使用if语句输入运算符的while循环中检查用户的输入。

while True:
try:
op = input("Enter an operator: ")
num2 = float(input("Enter another number: "))
break
except ValueError:
print("Invalid input. Please try again...")

您不希望在收到输入后立即中断,而是希望在运算符输入后添加一个条件语句,以验证他们输入的值是否有效。

if(op != "+" or op != "-"): #Etc...
continue

continue跳过循环的剩余部分,继续进行下一次迭代,这将再次提示用户输入运算符。

打印("欢迎使用计算器!"(

打印("\n************************************\n&"(

user_instructions=(''说明:

键入一个数字,然后按Enter键。键入可用的运算符,然后输入。键入另一个数字,然后按Enter键。"(

def指令((:打印(用户指令(

说明书((

operator_list=(''以下是可用运营商列表:

  • 用于加法
  • 用于减法/部门
  • 用于乘法^对于指数根的r%对于模量"(

op_list=['+','-','/','*','^','r','%']

def calculate((:打印(operator_list(打印("\n************************************\n&"(

while True:
try:
num1 = float(input("Please enter a number: "))
break
except ValueError:
print("Invalid input. Please try again...")
print("n********************************************************************n")

while True:
try:
op = input("Please enter an operator: ")
if op not in op_list:
print("Invalid input. Please try again...")
print("n********************************************************************n")
continue
break 
except ValueError:
print("Invalid input. Please try again...")

while True:
try:
num2 = float(input("Please enter another number: "))
break
except ValueError:
print("Invalid input. Please try again...")
print("n********************************************************************n")

if op == "+":
print('{} + {} = '.format(num1, num2))
print("n" + "Answer: ")
print(num1 + num2)
elif op == "-":
print('{} - {} = '.format(num1, num2))
print("n" + "Answer: ")
print(num1 - num2)
elif op == "/":
if num2 == 0:
print('Math error! A number cannot be divided by zero!')
else:
print('{} / {} = '.format(num1, num2))
print("n" + "Answer: ")
print(num1 / num2)
elif op == "*":
print('{} * {} = '.format(num1, num2))
print("n" + "Answer: ")
print(num1 * num2)
elif op == "^":
print('{} ^ {} = '.format(num1, num2))
print("n" + "Answer: ")
print(num1 ** num2)
elif op == "r":
print('{} root {} = '.format(num1, num2))
print("n" + "Answer: ")
print(num2 ** (1/num1))
elif op == "%":
print('{} % {} = '.format(num1, num2))
print("n" + "Answer: ")
print(num1 % num2)
else:
print("Invalid Input. Please try again")
print("n********************************************************************n")


计算((

打印("\n************************************\n&"(

def again((:calc_again=输入(''你想再计算一次吗?请键入Y表示"是"或键入N表示"否"。''(

print("n********************************************************************n")
if calc_again.upper() == 'Y':
calculate()
print("n********************************************************************n")
again()
elif calc_again.upper()  == 'N':
print("Thank you for using Calculator, Goodbye...") 
import sys
sys.exit()

else:
print("Invalid Input. Please try again...")
print("n")
print("n********************************************************************n")
print("n")
again()
print("n********************************************************************n")
calculate()

再次((

最新更新