3 回答

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

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

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
这将为您提供一个以跑步者为键的字典,并以它们的位置列表为值。
添加回答
举报