在我的列表理解中,“for”循环的语法有什么错误吗?

2024-09-30 14:38:34 发布

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

如果这是正确的

v = [22, 13, 45, 50, 98, 69, 43, 44, 1]
[ (x+1 if x >=45 else x+5)  for x in v ]

那么这个代码怎么了

def isPrime(num):
is_prime = False
if num > 1:
    for i in range(2, num):
        if (num % i) == 0:
            is_prime = False
            break
    else:
        is_prime = True
else:
    is_prime = False
return is_prime


listTablesOnlyPrimes = [[ (i*num if isPrime(i*num)==True else pass) for i in range(1, 11)] for num in range(1, 11)]
for listTable in listTablesOnlyPrimes:
    print(listTable)

我想知道解释器在消息中的SyntaxError是什么:

listTablesOnlyPrimes = [[ (i*num if isPrime(i*num)==True else pass) for i in range(1, 11)] for num in range(1, 11)]
                                                                  ^
SyntaxError: invalid syntax

Tags: infalsetrueforifisrangepass
2条回答

问题在于嵌套列表中的if条件

listTablesOnlyPrimes = [[ (i*num) for i in range(1, 11) if isPrime(i*num)==True] for num in range(1, 11)]

注意:

Your code always return empty lists I don't understand why are you doing this i * num never become prime if i > 1

这使用了一个https://docs.python.org/3/reference/expressions.html#conditional-expressions形式的条件表达式

(x+1 if x >=45 else x+5)

但这不符合该语法,因为没有其他语法:

(i*num if isPrime(i*num)==True)

我相信这是一个if条件,作为列表理解语法的一部分,但这是最后一个条件,如这里所述https://docs.python.org/3/reference/expressions.html#displays-for-lists-sets-and-dictionaries

增编:

这不是问题的一部分,但既然您提出了这个问题,这里有一种方法可以快速地向您的代码中添加一些单元测试。把这个放在iPrime函数后面

if not isPrime(11):
    raise ValueError("isPrime isn't right")

你确实还需要几张支票,但现在已经足够了。我不想进入整个单元测试库

相关问题 更多 >