从包含if elif else statement的函数返回变量

2024-04-16 18:00:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用以下代码检查raw_input是否是三个选项中的一个选项:

def selectDiff():
    upperbound = 0
    difficulty = ['easy', 'medium', 'hard']
    diff = raw_input(' or '.join(difficulty)).lower()
    if diff in difficulty:
        if diff == 'easy':
            upperbound = 20

        elif diff == 'medium':
            upperbound = 25

        elif diff == 'hard':
            upperbound = 30

    else:
        print "Please select easy, medium or hard\n"
        selectDiff()

    return upperbound

如果用户从难度列表['easy','medium','hard']中输入一个值,那么函数的工作方式与我希望的一样,但是如果用户先输入列表中没有包含的值,当他们最后输入列表中找到的值时,变量upperbound将返回为0。我尝试过移动return语句,但结果要么是相同的,要么是由于在被拒绝之前引用了一个变量而出错。在

是否可以改变我的方法来产生期望的行为,或者我应该使用另一种方法?在


Tags: or列表inputrawreturnif选项easy
3条回答

我同意在这里使用循环可能更有意义,但是如果您想继续使用递归,只需将upperbound分配给内部selectDiff的结果。在

def selectDiff():
    difficulty = ['easy', 'medium', 'hard']
    diff = raw_input(' or '.join(difficulty)).lower()

    if diff in difficulty:
        if diff == 'easy':
            upperbound = 20
        elif diff == 'medium':
            upperbound = 25
        elif diff == 'hard':
            upperbound = 30
    else:
        print "Please select easy, medium or hard\n"
        upperbound = selectDiff()  # Use the returned value

    return upperbound

另外,您还可以使用dict来替换elif链,使其更易于扩展。在

^{pr2}$

使用一个while循环,该循环将一直接受输入,直到用户输入正确的输入。在

 def selectDiff():
    difficulty = ['easy', 'medium', 'hard']
    while True:
        diff = raw_input('easy, medium or hard').lower()
        if diff in difficulty:
            if diff == 'easy':
                return 20   
            elif diff == 'medium':
                return 25   
            elif diff == 'hard':
                return  30    
        else:
            print "Please select easy, medium or hard\n"

您在其内部调用selectDiff(),然后忽略返回值。最好使用循环而不是无限递归。在

比如这样:

def selectDiff():
    while True:
        diff = raw_input('easy, medium or hard').lower()
        if diff=='easy':
            return 20
        if diff=='medium':
            return 25
        if diff=='hard':
            return 30
        print "Please select easy, medium or hard\n"

相关问题 更多 >