我的Python函数'循环'没原因

时间:2016-12-04 21:57:32

标签: python function python-3.x loops

我正在编写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会以某种方式遍历所有值吗?

瓦西利斯

1 个答案:

答案 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}