Python 如何存储函数返回的值而不再次执行该函数?

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

因此getBoundedNumber()允许用户输入一些数字并返回输入。我的其他函数基于返回值并进行计算。我试图将其分配给函数外部的全局变量(如var=getBoundedNumber(…),但它没有存储函数中的值,而是再次执行函数并要求用户再次输入。我该怎么解决这个问题?谢谢

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方法,因为我希望这些返回是一个数字,而不是一个listNote
exit
不是一个语句,而是一个函数。如果你想让它做任何事情,你必须调用它:
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