【发布时间】:2016-12-04 21:57:32
【问题描述】:
我正在编写一个 Python 函数来收集用户输入,然后将其作为字典返回。 输入应该符合某些标准,所以我会检查它,如果它没有检查出来,我会要求用户再次提供他的输入。 这是我的代码:
def getIDs(stageid=0):
if stageid == 0:
stageid = input("Please supply stageID: ")
if (len(stageid) < 4 or len(stageid) > 5) or not stageid.isdigit():
print("Wrong stageID, try again.")
getIDs()
raceid = input("Please supply the raceID: ")
if (len(raceid) < 1 or len(raceid) > 3) or not raceid.isdigit():
print("Wrong raceID, try again.")
getIDs(stageid)
else:
# print(stageid)
return {"stageid": stageid, "raceid": raceid}
我所做的是让函数在 stageid 不正确时调用自身,但我不希望用户在 raceid 不正确时必须再次重新输入 stageid,所以如果 raceid 不正确,我以stageid为参数调用函数。 但是,我的问题是,如果我多次弄错 stageid,然后将其正确并继续进行 raceid,它会要求我输入 stageid 的次数。我不知道为什么。注释打印函数以相反的顺序打印所有提供的 stageid,最后,返回值包含最初提供的(错误的)stageid 和 raceid。
有人知道为什么 Python 会循环遍历所有值吗?
瓦西里
【问题讨论】:
-
你的缩进被破坏了,请修复它。
-
答案是该函数不会“重新启动”,它只是将自身称为递归函数。完成后,它将继续从
getIDs()调用执行。这可以修复,但这种方法对于 python 来说是非常不合适的。 -
在这种情况下使用递归几乎会让您头疼,但您应该知道,如果您不使用
return getIDs(),您最外层的getID 调用将返回None -
@ettanany 我建议不要在问题中编辑 python 空格。我知道在这种情况下这可能是正确的,因为 OP 没有抱怨缩进错误,但仍然值得谨慎。
-
@AndrasDeak 我同意你的观点,当 OP 抱怨缩进时,我们不应该编辑代码,但在这种情况下,我认为很清楚。
标签: python function python-3.x loops