如果二维列表的元素不在范围内,如何处理错误

我正在尝试错误处理 doughnuts_gone 的输入。用户应输入列表的元素位置。例如,如果他们想以 18 美元的价格删除 6 个奶油甜甜圈的订单,那么您应该输入列表的位置;先列出so位置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? ")

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


素胚勾勒不出你
浏览 87回答 1
1回答

幕布斯7119047

您将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.py0     6 Cream Doughnuts = $18.001     5 Cookies Doughnuts = $20.002     6 Jam Doughnuts = $16.00Enter the number associated with the doughnut order you would like to remove? 3InvalidEnter 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? 0Valid value! Selected one: ['Cream', 6, 18]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python