我们班最近开始定义函数,但我遇到了一个特定代码块的问题。运行时,我的代码产生'opChoose'未定义。跟踪错误这行代码:
calc(opChoose,num1, num2)
下面的代码是我的全部代码,只有几行代码。
def greeting():
print("Welcome to the calculator app!")
def menu():
opChoose=int(input("1 for Addition, 2 for Subtraction, 3 for Multiplication, 4 for Division"))
return opChoose
def numbers():
num1=float(input("Enter your first value"))
num2=float(input("Enter your second value"))
return num1, num2
def calc(opChoose,num1, num2):
if opChoose == "1":
ans = num1 + num2
elif opChoose == "2":
ans2 = num1 - num2
elif opChoose == "3":
ans3 = num1 * num2
elif opChoose == "4":
ans4 = num1 / num2
return ans, ans2, ans3, ans4,
def display(ans, ans2, ans3, ans4):
if opChoose == "1":
print(ans)
elif opChoose == "2":
print(ans2)
elif opChoose == "3":
print(ans3)
elif opChoose == "4":
print(ans4)
greeting()
menu()
numbers()
calc(opChoose,num1, num2)
display(ans,ans2,ans3,ans4)
我会尝试将这些代码简化为一个较小的块,供你们排除故障,但我根本不知道其他代码是否也是错误的,你们给我的任何帮助都会非常感激,谢谢!
从函数menu()
返回值时,你做的是正确的,但是你需要将返回的值赋给变量,以便能够将它传递给calc()
函数。或者,您可以将函数调用直接传递给calc()
函数本身。
要么:
opChoose = menu()
calc(opChoose ,num1, num2)
或这个:
calc(menu(),num1, num2)
知道它会在num1
和num2
上出于同样的原因抛出错误,但我认为从上面你可以解决这个问题。祝你好运,编码愉快!
对于未采用的路径,计算返回了很多None
变量,看起来像是一个奇怪的设计。也许看看这个。
def greeting():
print("Welcome to the calculator app!")
def menu():
opChoose=int(input("1 for Addition, 2 for Subtraction, 3 for Multiplication, 4 for Division"))
return opChoose
def numbers():
num1=float(input("Enter your first value"))
num2=float(input("Enter your second value"))
return num1, num2
def calc(opChoose, num1, num2):
# opChoose is an int; don't compare it to a string
if opChoose == 1:
ans = num1 + num2
elif opChoose == 2:
# The answer goes to the same variable in each case
ans = num1 - num2
elif opChoose == 3:
ans = num1 * num2
elif opChoose == 4:
ans = num1 / num2
return ans
# Very tempted to comment out this gratuitous verbosity
greeting()
# Capture the value from the function call
op = menu()
# Capture the values from the function call
n1, n2 = numbers()
# Capture the value from the function call
value = calc(op, n1, n2)
# No need for a separate function for this really
print(value)
我在主流中使用了不同的变量名来强调函数调用中的变量完全不同,并且您无法从外部访问函数内部的变量,反之亦然,而无需进行额外的显式排列。
制作只做一件事的功能一般来说都是个好主意,但也许这仍然有点太过分了。在隔离中没有做任何事情的函数只是模糊了代码的流程。
这是对代码的重构。
def greeting():
print("Welcome to the calculator app!")
def menu():
opChoose=int(input("1 for Addition, 2 for Subtraction, 3 for Multiplication, 4 for Division"))
return opChoose
def numbers():
num1=float(input("Enter your first value"))
num2=float(input("Enter your second value"))
return num1, num2
def calc(opChoose,num1, num2):
ans=0
ans2=0
ans3=0
ans4=0
if opChoose == 1:
ans = num1 + num2
elif opChoose == 2:
ans2 = num1 - num2
elif opChoose ==3 :
ans3 = num1 * num2
elif opChoose == 4:
ans4 = num1 / num2
return ans, ans2, ans3, ans4
def display(opChoose,ans, ans2, ans3, ans4):
if opChoose == 1:
print(ans)
elif opChoose == 2:
print(ans2)
elif opChoose ==3:
print(ans3)
elif opChoose == 4:
print(ans4)
greeting()
opChoose=menu()
num1, num2=numbers()
ans,ans2,ans3,ans4=calc(opChoose,num1, num2)
display(opChoose,ans,ans2,ans3,ans4)
menu()
和其他函数,但不保存它们返回的数据。您需要分配给变量以进行进一步处理或以其他方式保存该值。opChoose
作为int
,但你将它与字符串("1"
)变量进行比较 - int
1和"1"
永远不会相同。
a=1
if(a=="1"):
print("this will never be printed")