Python中的一个变量出现问题(这毫无意义)



所以,我正在编写一个基本上像科学计算器一样工作的程序,代码是这样的:

print('>>>initializing program...')
# -- VARIABLE TELLS THE PROGRAM WHAT MENU IT IS IN -- #
current_menu = 'mm'
# -- PRINT MAIN MENU ITEMS -- #
def print_main_menu():
current_menu = 'mm'
return('n-MAIN MENU- n1. Calculation n2. Graph n3. Solver')
# -- PRINT CALCULATION MENU ITEMS -- #
def print_calculation_menu():
print('n- Calculation Mode')
current_menu = 'calc'
print(current_menu) #------DEBUG PRINT 1------#
return('Type your calculation below:')
# -- PRINT GRAPH MENU ITEMS -- #
def print_graph_menu():
print('n- Graph Mode')
current_menu = 'graph'
print(current_menu) #------DEBUG PRINT 2------#
return('Write graph equation below:')
def print_solver_menu():
print('n- Solver Mode')
current_menu = 'solver'
print(current_menu) #------DEBUG PRINT 3------#
return('Write your equation below:')
# -- ANALYZE USER INPUT -- #
def take_input(userinput):
if userinput == 'home':
print_main_menu()
elif userinput == 'quit':
print('n >>>Terminating program...')
quit()
else:
if current_menu == 'mm':
if userinput == '1':
print(print_calculation_menu())
user_in = input()
take_input(user_in)
elif userinput == '2':
print(print_graph_menu())
user_in = input()
take_input(user_in)
elif userinput == '3':
print(print_solver_menu())
user_in = input()
take_input(user_in)
else:
print(current_menu) #------DEBUG PRINT 4------#
print('nUndefined mode selected. Returning to Main Menu')
print_main_menu()
user_in = input()
take_input(user_in)
elif current_menu == 'calc':
user_in = input()
print('n' + calcmenu_calculate(user_in))
#--MARKER--#
user_in = input()
take_input(user_in)
elif current_menu == 'graph':
user_in = input()
print('n' + graphmenu_graph(user_in))
#--MARKER--#
user_in = input()
take_input(user_in)
elif current_menu == 'solver':
user_in = input()
print('n' + solvermenu_solve(user_in))
#--MARKER--#
user_in = input()
take_input(user_in)
else:
print('An unknown error has occured, and Maryam had to terminate. Sorry for the inconvenience')
print('n >>>Terminating program...')
quit()


print('nWelcome')
# -- LOOP TERMINATES WHEN USER ENTERS QUIT COMMAND -- #
while True:
current_menu = 'mm'
print(print_main_menu())
user_in = input()
take_input(user_in)

CCD_ 1函数分析输入。它可以通过current_menu的值(默认设置为"mm",代表主菜单(了解用户当前在哪个菜单中,然后根据适合的内容分析输入。不过,当我运行这个程序时,事情会变得很奇怪。主菜单加载良好,我可以选择不同的模式,它执行这些模式的功能,并向用户打印出相应的指令;但当我试图实际做一些事情时,程序似乎在处理输入时卡住了,就好像它在主菜单中一样。当函数运行时,标记为DEBUG PRINT 1-3的部分显示current_mode变量实际上已经更改为相应的值,但当我试图输入一些东西时,程序会吐出"0";选择了未定义的模式。返回主菜单";如果有人在主菜单中并且输入了除1、2或3之外的输入。CCD_ 5还表明CCD_;mm";即使它被认为通过函数print_calculation_menu()print_graph_menu()print_solver_menu()而改变。

我希望代码在用户进入菜单时更改take_input0变量,并且我希望take_input()函数能够根据所述变量的值识别用户所在的菜单,并相应地处理他们的输入。

我试图通过将更改current_menu值的代码行移动到标记为#--MARKER--#的位置来解决这个问题,但这不知何故使情况变得更糟,使程序输出了这个错误:UnboundLocalError: local variable 'current_menu' referenced before assignment

我真的不知道在这里该怎么办。

您需要检查文档:如果没有全局变量,就不可能分配给全局变量,尽管自由变量可能指的是全局变量而没有声明为全局

换句话说,您可以访问全局变量,但如果不将其声明为global,则不能分配给它。如果没有该声明,您的每个current_menu = ...语句都会隐藏全局变量,并创建一个同名的本地变量,一旦函数返回,该变量就会消失。

我认为这种行为是一个很好的设计决策:虽然使用全局变量通常不是一个好主意,但在99%的情况下,修改函数中的全局变量绝对是一种糟糕的做法。因此,只要您只使用值Python就不会请求任何内容;但是如果你想设置一个新的值,那么你必须明确地告诉你想这么做

最新更新