所以,我试图将主程序中的变量设置为模块中函数的整数输入。我无法解决如何做到这一点。
这是我的主要计划。菜单是我的模块的名称,因为我用它来显示菜单。 '菜单列表'是你说你想要菜单显示的地方。那部分工作正常。
import time, sys
from menu import *
menulist = ['Say hi', 'Say bye', 'Say yes', 'Say no', 'Exit']
choice = int(0)
menu(menulist)
choosing(menulist, choice)
print(choice) ##This is so I can see what it is
if choice == 1:
print('Say hi')
elif choice == 2:
print('Say bye')
elif choice == 3:
print('Say yes')
elif choice == 4:
print('Say no')
elif choice == 5:
sys.exit()
else: ##This will print if choice doesn't equal what I want
print('Error')
这是我的模块。
import time
def menu(menulist):
print('Menu:')
time.sleep(1)
x = 0
while x < len(menulist):
y = x + 1
printout = ' ' + str(y) + '. ' + menulist[x]
print(printout)
x = x + 1
time.sleep(0.3)
time.sleep(0.7)
print('')
def choosing(menulist, choice):
flag = True
while flag:
try:
choice = int(input('Enter the number of your choice: '))
time.sleep(0.8)
if choice < 1 or choice > len(menulist):
print('That wasn\'t an option sorry')
time.sleep(1)
else:
flag = False
except ValueError:
print('That wasn\'t an option sorry')
time.sleep(1)
菜单功能运行正常,选择功能几乎可以实现我想要的功能,但它不会设置选项&#39;当我从我的模块中调用它时,在我的主程序中输入。对不起,如果它显而易见,我对编程很陌生。感谢
答案 0 :(得分:0)
您的模块不会将choice
识别为全局变量。在def choosing(...)
内,choice
只是一个局部变量,可以为其分配输入值(转换为int
)。
您确实将choice
传递给choosing
,但由于您之前已将choice
设置为0
,因此它是一个不可变的变量,而Python(幕后) )创建了本地副本。因此,对于所有问题,choice
是choosing
内的局部变量。
一旦你的程序离开函数choosing
,变量及其值就会消失(出于所有实际目的)。
要解决这个问题,你不应该试图让choice
全球化:一般来说,这是糟糕的设计(有很多例外,但仍然不是)。
相反,您只需从函数返回choice
,然后在主程序中指定它。模块的相关部分:
def choosing(menulist):
while True:
try:
choice = int(input('Enter the number of your choice: '))
time.sleep(0.8)
if choice < 1 or choice > len(menulist):
print('That wasn\'t an option sorry')
time.sleep(1)
else:
break
except ValueError:
print('That wasn\'t an option sorry')
time.sleep(1)
return choice
(我在这里做了一些改动:你可以简单地使用break
语句来打破连续的while循环,而不是额外的flag
变量。)
注意:不需要为选择分配初始值:该函数的结构使其始终必须通过行choice = int(...
。那个,或者它存在于ValueError
以外的例外。
主程序的相关部分:
import time, sys
from menu import *
menulist = ['Say hi', 'Say bye', 'Say yes', 'Say no', 'Exit']
menu(menulist)
choice = choosing(menulist)
与我的上述说明一起:不需要初始值choice
。
最后:在choice
的调用和定义中查看choosing
如何从函数中的参数中消失。
最后一点告诉我你可能来自不同的编程语言。在Python中,很少将参数传递给函数以使其更改。你只需返回它,因为这很简单,更清晰。在您有多个要更改的变量时,您可以返回一个元组:return a, b, c
。或者是一个词典,或者你想要的任何东西(但是元组是多个返回值的起点)。