【问题标题】:Different outputs depending on responses to multiple questions (Python)不同的输出取决于对多个问题的回答(Python)
【发布时间】:2022-01-03 19:14:08
【问题描述】:

我试图让代码要求用户选择 k 或 lambda,然后代码需要询问 lambda 的比例参数(如果选择了 k)或 k 的形状参数(如果选择了 lambda )。从这里开始,我需要代码来要求用户输入以获取最小值。值,最大值k(或 lambda)的值和增量取决于他们最初选择的内容。

例如,输出会是:

您想绘制在以下方面变化的曲线:形状参数 (k) 或比例参数 (lambda)?

请选择:(用户输入-k)

请输入 lambda 的比例参数:(用户输入 - 2)

请输入最大值。值,最小值k的值和增量:

最大k值(>0):(用户输入-1)

最小k值(>min.k值):(用户输入-3)

k 的增量(在最小值和最大值之间):(用户输入 - 2)


这是我到目前为止所得到的

#ask user if they want a fixed value of k or lambda
print("Do you wish to plot curves which vary in:")
print("Shape parameter (k) or scale parameter (lambda)?")
  
    
    
def get_klambda():
    global klambda
    while True:
        try:
            klambda = str(input("Please select "))
            if (klambda =="k"):
                k = input("Please enter a scale parameter for lambda: ")
                if k <=0:
                    break
                raise ValueError()
                except ValueError:
                print("The scale parameter for lambda must be greater than 0!")
            break
                
                
            if (klambda=="lambda"):
                lamda = input("Please enter a shape parameter for k: ")
                if lamda <=0:
                    break
                raise ValueError()
            except ValueError:
                print("The shape parameter for k must be greater than 0!")
            break
raise ValueError()
        except ValueError:
            print("Please enter either (k) or (lambda)")          
get_klambda() 

#get min, max and inc of k 
if (klambda == "k"):
    print("Please enter the min. value, max. value and increment for the shape parameter (K) ")
def get_kmin():
    global kmin
    while True:
        try:
            kmin = float(input("Please enter minimum k value: "))
            if kmin >=0.1:
                break
            raise ValueError()
        except ValueError:
            print("The minimum k value must be greater than 0!")
get_kmin()

在 k 之后,我不断收到语法错误(ValueError 除外:)

我正在使用 Python 3 请帮忙。

【问题讨论】:

  • 您的缩进不正确。 except 未与 try 对齐。
  • 记住input总是返回一个字符串。你永远不需要做str(input(...)),但如果你真的想要一个整数(比如klamda),那么你必须做int(input(...))
  • 不要使用这样的异常。异常用于与外部函数通信。在这种情况下,只需使用if 语句。我将在下面展示一个示例。
  • 啊,除了尝试修复它之外移动...我现在遇到另一个问题,它在 print("请输入 (k) 或 (lambda)" 上方显示“除了 ValueError:”。 . 错误是“意外缩进”,但无论我将它移到哪里,错误仍然存​​在
  • 非常感谢蒂姆!

标签: python python-3.x python-3.7


【解决方案1】:

我从您的描述中假设您想要 k 或 lambda,因此用户不需要同时指定两者。会这样做。请注意,我已删除您提出的异常。当您进行自己的验证时,不要使用异常。只需使用if 语句即可。

在这种情况下,删除异常也意味着您不会捕获无效输入,例如如果用户为 k 提供值“cat”。您是否需要抓住这一点取决于您的用户的复杂程度。如果他们试图破坏您的代码,那么也许他们应该看到异常。

#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)?")

    lamda = -1
    k = -1
    while True:
        klambda = input("Please select ")
        if klambda == "k":
            k = int(input("Please enter a scale parameter for lambda: "))
            if k > 0:
                break
            print("The scale parameter for lambda must be greater than 0!")                
        elif klambda == "lambda":
            lamda = int(input("Please enter a shape parameter for k: "))
            if lamda > 0:
                break
            print("The shape parameter for k must be greater than 0!")
        else:
            print("Please enter either (k) or (lambda)")          
    return klambda, k, lamda

klamda, k, lamda = get_klambda() 

【讨论】:

    猜你喜欢
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    相关资源
    最近更新 更多