为了账号安全,请及时绑定邮箱和手机立即绑定

Try and except 覆盖循环用户输入

Try and except 覆盖循环用户输入

精慕HU 2021-06-02 22:41:45
我一直在尝试将 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
查看完整描述

3 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

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


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 数组索引是从零开始的)。


查看完整回答
反对 回复 2021-06-15
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

我会将您的代码更改为更好的设计。此外,在其他循环中丢失它们之前,将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


查看完整回答
反对 回复 2021-06-15
?
森林海

TA贡献2011条经验 获得超2个赞

问题接缝是,您在循环中的每一轮都会覆盖先前的输入。只有一个变量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

这将为您提供一个以跑步者为键的字典,并以它们的位置列表为值。


查看完整回答
反对 回复 2021-06-15
  • 3 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号