【问题标题】:for loop in return statementreturn 语句中的 for 循环
【发布时间】:2014-08-28 22:34:30
【问题描述】:

我对这段代码有疑问:

List=[' ', 'X', 'X', 'X']+[' ']*6
le='X'
def Return():
    return((for i in range(1, 10, 3):
        (List[i]==le and List[i+1]==le and List[i+2]==le)))

我想用 for 循环来编写它,而不必像这样指定:

 def Return():
    return ((List[1]==le and List[2]==le and List[3]==le) or #True
        (List[4]==le and List[5]==le)...etc.)

当我使用 foo 循环时,我只收到一条消息说“无效语法”,但我不明白为什么。

【问题讨论】:

    标签: python for-loop return


    【解决方案1】:

    那是因为 Python 中的for 不是表达式,它没有你可以return 的值。

    【讨论】:

    • 哦,好的!谢谢你解释。那么还有其他方法可以简化后一个代码吗?如果列表更长,将每个数字都打印下来感觉有点乏味
    【解决方案2】:

    你可以试试any

    lis=[' ', 'X', 'X', 'X']+[' ']*6
    le='X'
    def func():
        return any(all(lis[j]==le for j in range(i,i+3)) for i in range(0,len(lis),3)
    

    注意:永远不要使用 python 关键字作为方法名和变量

    【讨论】:

    • 好的,我一定会记住这一点!我看不到您的代码如何一次使用三个数字,如果只有任何数字==le,它就会返回true。但也许是我愚蠢:P
    【解决方案3】:

    你可以使用所谓的"List comprehensions"

    def Return():
        return any([List[i]==le and List[i+1]==le and List[i+2]==le for i in range(1, 10, 3)])
    

    【讨论】:

    • 谢谢,看起来不错!我仍然有一个问题,当我想检查 Return() 函数是否返回“True”(它应该正确吗?)时,我尝试输入:if Return==True: Print('true')。但程序不打印任何内容。
    • 它应该是任何 .因为OP正在尝试或条件
    • @user3815466:你需要尝试if Return() == True: print('true')。注意print 的大小写和实际调用return 的括号。否则,您正在将函数与真值进行比较...
    • @Antoine:如果我没记错的话,这本身不是生成器表达式。这只是一个列表理解。您需要删除方括号 [] 以使其成为生成器表达式。另外,正如@sundar 所说,它应该是any
    • @Praveen:是的,你是对的。我会更正我的答案。
    猜你喜欢
    • 2011-08-17
    • 2019-10-07
    • 2016-09-08
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多