Python 如何存储函数返回的值而不再次执行该函数?
因此getBoundedNumber()允许用户输入一些数字并返回输入。我的其他函数基于返回值并进行计算。我试图将其分配给函数外部的全局变量(如var=getBoundedNumber(…),但它没有存储函数中的值,而是再次执行函数并要求用户再次输入。我该怎么解决这个问题?谢谢Python 如何存储函数返回的值而不再次执行该函数?,python,python-3.x,ipython,Python,Python 3.x,Ipython,因此getBoundedNumber()允许用户输入一些数字并返回输入。我的其他函数基于返回值并进行计算。我试图将其分配给函数外部的全局变量(如var=getBoundedNumber(…),但它没有存储函数中的值,而是再次执行函数并要求用户再次输入。我该怎么解决这个问题?谢谢 def getBoundedNumber(qq,ww,ee): while True: try: AA = float(input('Enter chain parame
def getBoundedNumber(qq,ww,ee):
while True:
try:
AA = float(input('Enter chain parameter between %r and %r '%(qq,ww)))
ee='%r is not between %r and %r'%(AA,qq,ww)
assert type(AA)==float or int,'not a valid input'
if qq<= AA <= ww:
break
else:
print(ee)
except ValueError:
print(' not a valid input')
exit
return AA
这是我的菜单功能
def menu():
print('Main menu choices')
print(' A - enter chain parameter a' )
print(' N - enter number of points in chain' )
print(' P - calculate and print chain results')
print(' Q - quit program')
while True:
try:
SELECTION = input('Enter your selection: ')
if SELECTION.upper()== 'A':
break
elif SELECTION.upper() == 'N':
break
elif SELECTION.upper()=='P':
break
elif SELECTION.upper()=='Q':
break
else:
print('%r is not a valid option'%SELECTION)
except ValueError:
print('%r is not a valid option'%SELECTION)
exit
return SELECTION.upper()
声明一个全局变量,然后在返回之前追加结果。但是,您不会追加结果,因为您递归调用MAINMENU函数,因此每次执行都会有返回值,但会丢失(除非您管理MAINMENU的调用和返回)
也许您可以对while循环执行相同的操作,并使用全局变量保留值。实现相同操作的另一种方法:
def getBoundedNumber(qq,ww,ee,aList):
while True:
try:
x = float(input('Enter chain parameter between %r and %r '%(qq,ww)))
ee='%r is not between %r and %r'%(AA,qq,ww)
assert type(x)==float or int,'not a valid input'
if qq<= x <= ww:
aList.append(x)
break
else:
print(ee)
except ValueError:
print(' not a valid input')
exit
return aList
def MAINMENU():
print('A - enter chain parameter a' )
print('N - enter number of points in chain' )
print('P - calculate and print chain results')
print('Q - quit program')
AA = []
try:
SELECTION = input('Enter your selection: ')
if SELECTION.upper() == 'A':
AA = getBoundedNumber(0.5,4.5,1,AA)
MAINMENU()
elif SELECTION.upper() == 'N':
AA=getBoundedNumber(10,100000,1,AA)
MAINMENU()
elif SELECTION.upper() == 'P':
#calculations that base on user input from A and N
elif SELECTION.upper() == 'Q':
exit
else:
print('%r is not a valid option'%SELECTION)
MAINMENU()
except ValueError:
print('%r is not a valid option'%SELECTION)
def getBoundedNumber(qq、ww、ee、aList):
尽管如此:
尝试:
x=float(输入('输入%r和%r之间的链参数“%”(qq,ww)))
ee='%r不在%r和%r%%之间(AA、qq、ww)
断言类型(x)=浮点或整数,“不是有效输入”
如果qq这里有一些修改过的代码。我们现在使用的是while
循环,而不是主菜单中的递归。现在,我们可以通过使用局部变量chain_param
和num_points
在方法main menu
的词法范围内维护状态,这些变量存储用户输入的值
重要的是要认识到每个函数都有自己的范围。在一个函数中定义的变量不会在另一个函数中定义。如果我们想将chain_param
和num_points
传递给一个新函数,比如说do_magic
,我们必须将它们作为参数发送给方法:即do_magic(chain_param,num_points)
同样,我们希望do\u magic
将计算出的值传递回main menu
,因此我们返回该值,并将其收集到由main menu
的词法范围定义的新变量中,称为magic\u answer
def getBoundedNumber(qq,ww,ee):
while True:
try:
AA = float(input('Enter chain parameter between %r and %r '%(qq,ww)))
ee='%r is not between %r and %r'%(AA,qq,ww)
assert type(AA)==float or int,'not a valid input'
if qq<= AA <= ww:
break
else:
print(ee)
except ValueError:
print(' not a valid input')
return AA
def do_magic(x,y):
if x and y:
return x / y
def MAINMENU():
print('A - enter chain parameter a' )
print('N - enter number of points in chain' )
print('P - calculate and print chain results')
print('Q - quit program')
chain_param = None
num_points = None
magic_answer = None
try:
while True:
SELECTION = input('Enter your selection: ')
if SELECTION.upper() == 'A':
chain_param = getBoundedNumber(0.5,4.5,1)
elif SELECTION.upper() == 'N':
num_points = getBoundedNumber(10,100000,1)
elif SELECTION.upper() == 'P':
#do something with chain_param and num_points to get magic_answer
if chain_param and num_points:
magic_answer = do_magic(chain_param,num_points)
print('Magic Answer = ', magic_answer)
elif SELECTION.upper() == 'Q':
return 1
else:
print('%r is not a valid option'%SELECTION)
except ValueError:
print('%r is not a valid option'%SELECTION)
return -1
MAINMENU()
但是,如何用同一个函数附加到不同的变量?请注意,使用全局变量并不总是首选的方法(请参阅下面的注释。我放弃append方法,因为我希望这些返回是一个数字,而不是一个listNoteexit
不是一个语句,而是一个函数。如果你想让它做任何事情,你必须调用它:exit()
当我尝试你的方法时,上面写着“分配前引用的局部变量”aa“当我们发送aa时,实际上我们发送的是指针引用而不是值。因此,请使用aa[:]谢谢你的帮助。但问题是,我在大学一年级,刚学了两个月这种语言。代码选项[]不是教授教的,我必须在我的知识范围内做这件事。是他们的另一种方法吗?它不起作用,它说必须是实数,而不是非非类型。我已经更改了上面的代码,请你再通读一遍好吗?很抱歉:(如果您不断更改问题,我无法继续提供帮助,因为这看起来就像您只是要求我为您完成所有工作。我提供的代码很有效。我建议您花时间了解它是如何工作的,如果您有任何问题,请提出来。并且要具体。对于您执行“神奇答案”的部分,我使用定义的代码像angle(numpoints,chain_param)这样的函数用于计算填充物(该函数在MAIN之外定义)。我遇到的问题是,即使我将填充物放入选择A和N中,对于选择P,console也会给我未定义的chain_para和num_点。我如何理解这一行:如果chain_param和num_点:
def getBoundedNumber(qq,ww,ee):
while True:
try:
AA = float(input('Enter chain parameter between %r and %r '%(qq,ww)))
ee='%r is not between %r and %r'%(AA,qq,ww)
assert type(AA)==float or int,'not a valid input'
if qq<= AA <= ww:
break
else:
print(ee)
except ValueError:
print(' not a valid input')
return AA
def do_magic(x,y):
if x and y:
return x / y
def MAINMENU():
print('A - enter chain parameter a' )
print('N - enter number of points in chain' )
print('P - calculate and print chain results')
print('Q - quit program')
chain_param = None
num_points = None
magic_answer = None
try:
while True:
SELECTION = input('Enter your selection: ')
if SELECTION.upper() == 'A':
chain_param = getBoundedNumber(0.5,4.5,1)
elif SELECTION.upper() == 'N':
num_points = getBoundedNumber(10,100000,1)
elif SELECTION.upper() == 'P':
#do something with chain_param and num_points to get magic_answer
if chain_param and num_points:
magic_answer = do_magic(chain_param,num_points)
print('Magic Answer = ', magic_answer)
elif SELECTION.upper() == 'Q':
return 1
else:
print('%r is not a valid option'%SELECTION)
except ValueError:
print('%r is not a valid option'%SELECTION)
return -1
MAINMENU()
A - enter chain parameter a
N - enter number of points in chain
P - calculate and print chain results
Q - quit program
Enter your selection: A
Enter chain parameter between 0.5 and 4.5 2
Enter your selection: N
Enter chain parameter between 10 and 100000 100
Enter your selection: P
Magic Answer = 0.02
Enter your selection: Q