Try and except 覆盖循环用户输入

我一直在尝试将 try 和 except 放入 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


精慕HU
浏览 168回答 3
3回答

慕的地6264312

也许在这里进行简短的重新设计会有所帮助。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]具有 3 的值runner1(记住 Python 数组索引是从零开始的)。

鸿蒙传说

我会将您的代码更改为更好的设计。此外,在其他循环中丢失它们之前,将race1-4 值存储在某种集合中for name in [runner1, runner2, runner3]:    race1 = inputForRace(1)    race2 = inputForRace(2)    race3 = inputForRace(3)    race4 = inputForRace(4)def inputForRace(raceOrder):   shouldContinue = True   race = 0   while shouldContinue:      try:         race = int(input(name + ": Enter runner placing for race {0}:".format(raceOrder)))         shouldContinue = False      catch ValueError:        print("Enter integer")        shouldContinue = True   return race

森林海

问题接缝是,您在循环中的每一轮都会覆盖先前的输入。只有一个变量race1会在下一次迭代中被分配一个新值。更好的设计是拥有一个从跑步者到比赛位置的字典,如下所示:runners = {runner1:[], runner2:[], runner3:[]}for runner in runners:    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:"))            runners[runner] = [race1, race2, race3, race4]        except ValueError:            print("Enter a integer")            continue        break这将为您提供一个以跑步者为键的字典,并以它们的位置列表为值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python