编写一个Python程序,在不使用“for循环”的情况下查找120到200之间可被7整除和5的倍数的数字。
我试着用这种方式解决...
x = range(120, 200)
if x % 7 == 0 and x % 5 == 0:
print(x)
但我确实得到了这个错误。我会错过什么呢?
Traceback (most recent call last):
File "C:\Users\User\Desktop\skillshare-code\if else statements\4.py", line
11, in <module>
if x % 7 == 0 and x % 5 == 0:
TypeError: unsupported operand type(s) for %: 'range' and 'int'
6条答案
按热度按时间64jmpszr1#
由于不允许使用
for
构造,因此可以使用filter
方法来完成此操作:请注意,问题不是要求您打印数字,而是要求您“查找”它们,这意味着创建某种形式的有效值列表或集合
PS:我做
x % 35 == 0
是因为“可被整除”和“的倍数”的意思是一样的,所以35来自7*5
。PPS:
filter
返回一个过滤器对象,它是一个生成器。如果你想通过list(valid_nums)
查看列表,你需要将它转换成列表。如果你只需要迭代这些值并将它们用于其他用途,你不需要进行转换,因为生成器可以很好地工作b4lqfgs42#
你的老师喜欢它扭曲。可被7整除和5的倍数只是意味着可被7和5都整除,所以35 ...
你的原始代码 * 需要 * 一个循环,但是python有一些内置函数可以生成循环而不需要
for
或while
语句(它们比for
或while
快得多,因为它们通常使用本地编译的C代码)sshashank124给出了一个很好的答案,但它可以被简化得更多:
range
起始点range
中使用35的步长像这样:
它可能快得多,因为它只使用一个除法和乘法,然后只有加法。
ygya80vv3#
我认为使用列表解析比
filter
更符合Python的习惯(当然,如果允许的话)。或在创建时:
oyxsuwqo4#
你所要做的是将x定义为一个数字范围,但这将使x成为一个数字列表,你仍然需要遍历每个数字来检查它。由于不允许使用“for循环”,你可以使用while循环或从下限开始递归调用一个函数,直到可通过的参数达到上限。
hs1rzwqc5#
我读到的一个挑战是找出一个范围内所有能被7除尽但不能被5除尽的数字。
这与简单地将问题简化为
x % 35
是非常不同的,但创建列表解析仍然是解决问题的办法。以下是对我起作用的方法:
完成后,只需
print(num)
,您就有了答案。xqk2d5yq6#
如果你想一次处理数组元素,你需要使用一个numpy的列表Array,而不是普通的列表Array。
import numpy as np
A1 = list(range(120 , 200))
A2 = np.array(range(120 , 200))
不良→打印(A1[((A2% 7)== 0)+0)!= 0])
确定→打印(A2[((A2% 7)== 0)+0)!= 0])
输出
[126 133 140 147 154 161 168 175 182 189 196条]