【问题标题】:How to error handle if the element of the 2d list is not within range如果二维列表的元素不在范围内,如何处理错误
【发布时间】:2020-07-03 10:23:39
【问题描述】:

我试图错误处理 donuts_gone 的输入。用户应输入列表的元素位置。例如,如果他们想删除 18 美元的 6 个奶油甜甜圈的订单,那么您应该输入列表的位置;首先列出位置0,然后删除2d列表中的列表元素位置。我的程序的问题是,如果输入的数字不在列表中可用元素的范围内,我不知道如何编写 elif 语句:

elif i != total_order[i]:

简化程序:

def check_valid(prompt):
        while True:
            try:
                i = int(input(prompt))
                if i == '':
                    print("You must enter a value for the doughnut item you would like to change.")
                    print()
                elif i != total_order[i]:
                    print("Invalid")
                else:
                    break
            except:
                break
        return i

total_order = [['Cream',6,18], ['Cookies',5,20], ['Jam',6,16]]

for i in range(len(total_order)):
    print("{}     {} {} Doughnuts = ${:.2f}".format(i, total_order[i][1],total_order[i][0],total_order[i][2]))
doughnuts_gone = check_valid("Enter the number associated with the doughnut order you would like to remove? ")

谢谢!我希望这是有道理的! :)

【问题讨论】:

    标签: python list function error-handling


    【解决方案1】:

    您将 i 变量作为字符串 (if i == '':) 进行了检查,但在前一行 (i = int(input(prompt))) 中将其转换为整数。您应该检查列表的长度而不是这一行:elif i != total_order[i]:。由于此问题,您的脚本无法正常工作。我已经编写了一个工作代码并对其进行了测试。请看下面我的代码/测试。

    此外,您的面包车改进了您的代码(例如:检查输入是否可以转换为整数。)。

    代码:

    def check_valid(prompt):
        while True:
            try:
                i = input(prompt)
                if not i:
                    print("You must enter a value for the doughnut item you would like to change.")
                    print()
                elif int(i) > len(total_order)-1:
                    print("Invalid")
                else:
                    break
            except:
                break
        return int(i)
    
    
    total_order = [['Cream', 6, 18], ['Cookies', 5, 20], ['Jam', 6, 16]]
    
    for i in range(len(total_order)):
        print("{}     {} {} Doughnuts = ${:.2f}".format(i, total_order[i][1], total_order[i][0],
                                                        total_order[i][2]))
    doughnuts_gone = check_valid(
        "Enter the number associated with the doughnut order you would like to remove? ")
    print("Valid value! Selected one: {}".format(total_order[doughnuts_gone]))
    

    输出:

    >>> python3 test.py
    0     6 Cream Doughnuts = $18.00
    1     5 Cookies Doughnuts = $20.00
    2     6 Jam Doughnuts = $16.00
    Enter the number associated with the doughnut order you would like to remove? 3
    Invalid
    Enter the number associated with the doughnut order you would like to remove? 
    You must enter a value for the doughnut item you would like to change.
    
    Enter the number associated with the doughnut order you would like to remove? 0
    Valid value! Selected one: ['Cream', 6, 18]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多