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

标签 python list function error-handling

我试图错误处理 donuts_gone 的输入。用户应输入列表的元素位置。例如,如果他们想删除 18 美元的 6 个奶油 donut 的订单,那么您应该输入列表的位置;首先列出位置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? ")
谢谢!我希望这是有道理的! :)

最佳答案

你检查了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]

关于python - 如果二维列表的元素不在范围内,如何处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62713396/

相关文章:

python - 来自远程机器的 Pymongo 连接超时

python - 仅用于表情符号的词云

c# - 逗号分隔的文本文件到通用列表

c - 如何在 C 中返回一个字符串数组?

c - 我该如何解决这个简单的 C 函数?

python - 如何重复一段代码

python - 根据百分比将列表分成四个部分,即使列表不能被 10 整除。Python

java - 在 map java流列表中查找 map

r - 获取列表行中的第一个条目?

function - 在 PowerShell 控制台中恢复到原始提示