【问题标题】:functions within functions python函数python中的函数
【发布时间】:2022-01-03 21:31:17
【问题描述】:

我需要程序询问用户是否要选择 lambda 或 k 作为参数,然后根据他们的选择询问 k 或 lambda 的最小值和最大值。

这是我目前的代码;

#ask user if they want a fixed value of k or lambda
def get_klambda():
    print("Do you wish to plot curves which vary in:")
    print("Shape parameter (k) or scale parameter (lambda)?")
    global klambda
    lamda = -1
    k = -1
    while True:
        klambda = input("Please select ")
        if klambda == "k":
            k = float(input("Please enter a scale parameter for lambda: "))
            if k >= 0:
                break
            print("The scale parameter for lambda must be greater than 0!")
            def get_kmin():                   #ask for min k value
                global kmin
            kmin = input("Enter minimum k value: ")
            if kmin >= 0:
                break
            print("The minimum k value must be greater than 0!") 
            get_kmin()
            def get_kmax():                 #ask for max k value
                global kmax
            kmax = input("Enter maximum k value: ")
            if kmax <= kmin:
                break
            print("The maximum k value must be greater than the minimum k value!")
            get_kmax()
        elif klambda == "lambda":
            lamda = float(input("Please enter a shape parameter for k: "))
            if lamda >= 0:
                break
            print("The scale parameter for lambda must be greater than 0!")
            def get_lmin():            #asl for min lambda value
                global lmin
            lmin = input("Enter minimum lambda value: ")
            if lmin >= 0:
                break
            print("The minimum lambda value must be greater than 0!") 
            get_lmin()
            def get_lmax():
                global lmax
            lmax = input("Enter maximum lambda value: ")
            if lmax <=lmin:
                break
            print("The maximum lambda value must be greater than the minimum lambda value!")
            get_lmax()
        else:
            print("Please enter either (k) or (lambda)")
    return klambda, k ,lamda, kmin, lmin

klamda, k, lamda, kmin, lmin = get_klambda()

我假设为了使其工作,您将需要一个函数内的函数,因为在询问他们是否要选择 k 或 lambda 后提示的问题取决于他们的选择。

即。你想选择 lambda 还是 k? - k

输入 lambda - 2 的形状参数

输入最小 k 值 - 2

ie.2 你想选择 lambda 还是 k? - 拉姆达

输入 k - 1 的形状参数

输入最小 lambda 值 - 2


这是我运行代码时遇到的错误:

UnboundLocalError                         Traceback (most recent call last)
<ipython-input-27-8579ccfa8ebb> in <module>
     94     return klambda, k ,lamda, kmin, lmin
     95 
---> 96 klamda, k, lamda, kmin, lmin = get_klambda()

<ipython-input-27-8579ccfa8ebb> in get_klambda()
     92         else:
     93             print("Please enter either (k) or (lambda)")
---> 94     return klambda, k ,lamda, kmin, lmin
     95 
     96 klamda, k, lamda, kmin, lmin = get_klambda()

UnboundLocalError: local variable 'kmin' referenced before assignment

【问题讨论】:

  • kmin 仅在 klambda == "k" 时定义。
  • 只有在您选择 k 时才会设置您的 k 值,但无论如何您都在尝试返回它们。你的lambda 值也一样。如果是我,我会定义两个函数,一个获取所有 k 值,一个获取所有 lambda 值(定义它们 outside 的 @ 987654328@ 函数),然后只从函数中调用我想要的那个
  • 所以我需要将 klambda == "k" 添加到 kmin 上方的行或 def get_kmin 上方的行?

标签: python python-3.x


【解决方案1】:

这将收集所需的数据:

def get_klambda():
    print("Do you wish to plot curves which vary in:")
    print("Shape parameter (k) or scale parameter (lambda)?")
    global klambda
    Lamda = -1
    k = -1
    while True:
        klambda = input("Please select ")
        if klambda == "k":
            while True:
                k = float(input("Please enter a scale parameter for lambda: "))
                if k >= 0:
                    break
                print("The scale parameter for lambda must be greater than 0!")

            while True:
                kmin = float(input("Please enter the value of kmin: "))
                if k >= 0:
                    break
                print("The minimum k value must be greater than 0!")

            lmin = -1
            Lambda = -1

        elif klambda == "lambda":
            while True:
                Lambda = float(input("Please enter a shape parameter for k: "))
                if Lambda >= 0:
                    break
                print("The shape parameter for k must be greater than 0!")

            while True:
                lmin = float(input("Please enter the value of lmin: "))
                if k >= 0:
                    break
                print("The minimum k value must be greater than 0!")

            kmin = -1
            k = -1
        else:
            print("Please enter either (k) or (lambda)")
        break

    return klambda, k ,Lambda, kmin, lmin

klamda, k, Lambda, kmin, lmin = get_klambda()

print(klambda, k, Lambda, kmin, lmin)

您不需要嵌套函数,只需为每个选择使用一个 while 循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    相关资源
    最近更新 更多