如何解决我的列表理解中“ for”循环的语法有什么问题吗?
如果这是正确的
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)]
^
SyntaxError: invalid Syntax
解决方法
这使用条件表达式,格式为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
所述附录:
这不是问题的一部分,但是自您提出问题以来,这是一种快速向代码中添加一些单元测试的方法。只需将这个放在您的isPrime函数之后
if not isPrime(11):
raise ValueError("isPrime isn't right")
您确实还需要检查,但这已经足够了。我不想进入整个单元测试库。
,问题在嵌套列表中是否存在
listTablesOnlyPrimes = [[ (i*num) for i in range(1,11) if isPrime(i*num)==True] for num in range(1,11)]
注意:
您的代码总是返回空列表,我不明白您为什么要这么做
i * num
,如果i > 1
永远不会成为素数
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。