我正在编写Python函数来收集用户输入,然后将其作为dict返回。 输入应该符合某些标准,所以我检查一下,如果没有检查,我要求用户再次提供他的输入。 这是我的代码:
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作为参数调用函数。 然而,我的问题是,如果我多次得到了舞台错误,那么就把它弄好并继续进行比赛,它会像我进入舞台一样多次询问这个滑座。我无法弄清楚原因。注释的print函数以相反的顺序打印所有提供的stageid,最后,返回值包含最初提供的(错误的)stageid和raceid。
有人知道为什么Python会以某种方式遍历所有值吗?
瓦西利斯
答案 0 :(得分:0)
只需在调用递归函数时添加一个return语句,这样终止就会从该实例中退出。
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.")
return getIDs()
raceid = input("Please supply the raceID: ")
if (len(raceid) < 1 or len(raceid) > 3) or not raceid.isdigit():
print("Wrong raceID, try again.")
return getIDs(stageid)
else:
# print(stageid)
return {"stageid": stageid, "raceid": raceid}