首页 > 解决方案 > 尝试并排除循环用户输入的覆盖

问题描述

我一直在尝试尝试并在 for 循环中除外。它按应有的方式工作,但 for 循环仅保存最后的赛车手比赛,而不是所有赛车手的比赛。我相信这是由于尝试和例外。

for name in [runner1, runner2, runner3]:
    while True:
        try:
            race1 = int(input(name + ": Enter runner placing for race 1:"))
            race2 = int(input(name + ": Enter runner placing for race 2:"))
            race3 = int(input(name + ": Enter runner placing for race 3:"))
            race4 = int(input(name + ": Enter runner placing for race 4:"))
        except ValueError:
            print("Enter a integer")
            continue
        break

标签: python

解决方案


也许在这里进行简短的重新设计会有所帮助。

for name in [runner1, runner2, runner3]:
    race = dict()
    for r in range(4):
        while True:
            try:
                race[r] = int(input("{0}: Enter runner placing for race {1}:".format(name, r+1)))
            except ValueError:
                print("Enter a integer")
                continue
            break
    # do something for this particular value of race[]
    # before continuing on to the next runner

如果您无法处理循环内的输入,请将它们保存在字典中。

runners = {x: None for x in [runner1, runner2, runner3]}
for name in runners.keys():
    race = dict()
    for r in range(4):
        while True:
            try:
                race[r] = int(input("{0}: Enter runner placing for race {1}:".format(name, r+1)))
            except ValueError:
                print("Enter a integer")
                continue
            break
    runners[name] = race

此时,runners[runner1][2]具有runner1比赛 3 的值(请记住 Python 数组索引是从零开始的)。


推荐阅读