Python TypeError:不支持%的操作数类型:';范围';和';int';
编写一个Python程序来查找120到200之间的数字,这些数字可以被7整除,也可以是5的倍数,而不需要使用“for循环” 我试着这样解决Python TypeError:不支持%的操作数类型:';范围';和';int';,python,python-3.x,if-statement,range,Python,Python 3.x,If Statement,Range,编写一个Python程序来查找120到200之间的数字,这些数字可以被7整除,也可以是5的倍数,而不需要使用“for循环” 我试着这样解决 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\
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'
回溯(最近一次呼叫最后一次):
文件“C:\Users\User\Desktop\skillshare code\if else statements\4.py”,第行
11,在
如果x%7==0和x%5==0:
TypeError:不支持%:“range”和“int”的操作数类型
由于不允许将用于
构造,因此可以通过以下方法完成此操作:
请注意,问题不是要求您打印数字,而是“查找”它们,这意味着创建某种形式的有效值列表或集合
PS:我做了x%35==0
,因为“可除的”和“的倍数”的意思是相同的,所以35来自7*5
PPS:
filter
返回作为生成器的筛选器对象。如果您想通过执行list(valid\u nums)
查看列表,则需要将其转换为列表。如果您只需要遍历这些值并将它们用于其他用途,则无需进行转换,因为生成器可以很好地处理这些值,因为不允许您将用于
构造,您可以通过以下方法完成此操作:
请注意,问题不是要求您打印数字,而是“查找”它们,这意味着创建某种形式的有效值列表或集合
PS:我做了x%35==0
,因为“可除的”和“的倍数”的意思是相同的,所以35来自7*5
PPS:
filter
返回作为生成器的筛选器对象。如果您想通过执行list(valid\u nums)
查看列表,则需要将其转换为列表。如果您只需要遍历这些值并将它们用于其他用途,则无需进行转换,因为生成器可以很好地处理这些值,您尝试将x定义为一个数字范围,但这将使x成为一个数字列表,并且您仍然需要检查每个数字。因为“for循环”是不允许的,所以可以使用while循环或从下限开始递归调用函数,直到可通过的参数达到上限
def func(x):
if (condition satisfied):
print(x)
if x<upper_limit:
func(x+1)
return
def func(x):
如果(条件满足):
打印(x)
如果x你要做的是将x定义为一个数字范围,但这将使x成为一个数字列表,你仍然需要检查每个数字。因为“for循环”是不允许的,所以可以使用while循环或从下限开始递归调用函数,直到可通过的参数达到上限
def func(x):
if (condition satisfied):
print(x)
if x<upper_limit:
func(x+1)
return
def func(x):
如果(条件满足):
打印(x)
如果你的老师喜欢它。被7整除和5的倍数只是意味着同时被7和5整除,所以35
您的原始代码需要一个循环。但是python有一些内置函数,它们在生成循环时不使用for
或while
语句(它们比for
或while
要快得多,因为它们通常使用本机编译的C代码)
sshashank124给出了一个很好的答案,但可以通过以下方式进一步简化:
- 通过在35的下一个倍数上“对齐”120,选择适当的
范围
起点
- 在
范围内使用35步
像这样:
>>> list(range(((120//35)+1)*35,200,35))
[140, 175]
它可能快得多,因为它只使用一次除法和乘法,然后只使用加法。你的老师喜欢它。被7整除和5的倍数只是意味着同时被7和5整除,所以35
您的原始代码需要一个循环。但是python有一些内置函数,它们在生成循环时不使用for
或while
语句(它们比for
或while
要快得多,因为它们通常使用本机编译的C代码)
sshashank124给出了一个很好的答案,但可以通过以下方式进一步简化:
- 通过在35的下一个倍数上“对齐”120,选择适当的
范围
起点
- 在
范围内使用35步
像这样:
>>> list(range(((120//35)+1)*35,200,35))
[140, 175]
它可能要快得多,因为它只使用一次除法和乘法,然后只使用加法。我认为对于Python来说,使用列表理解比使用过滤器更为惯用(当然,如果允许的话)
或在创建时:
valid_nums = [num for num in range(120, 200) if num % 35 == 0]
我认为对于Python来说,使用列表理解比使用filter
(当然,如果允许的话)更为惯用
或在创建时:
valid_nums = [num for num in range(120, 200) if num % 35 == 0]
我阅读的一个挑战是找到一个范围内所有可以被7整除但不能被5整除的数字
这与将问题简化为x%35
非常不同。尽管如此,创建一个理解列表仍然是答案
以下是对我有效的方法:
x = range(2000, 3201)
num = [n for n in x if n % 7 == 0 and n % 5 != 0]
完成后,只需打印(num)
,您就有了答案。我的阅读挑战之一是找到一个范围内所有可被7整除但不能被5整除的数字
这与将问题简化为x%35
非常不同。尽管如此,创建一个理解列表仍然是答案
以下是对我有效的方法:
x = range(2000, 3201)
num = [n for n in x if n % 7 == 0 and n % 5 != 0]
完成后,只需print(num)
,您就有了答案。您需要循环检查x
中的所有值,但不允许使用来构造“我可能遗漏了什么?”%
仅对单个数字有效,你试图在一系列数字上使用它。如果你给它们一个可数的对象,大多数运算不会自动循环。“它可以被7整除并乘以5”:你的老师有幽默感(还有头脑风暴:)@Jean Françoisfare我盯着它想了这么久,他是指3吗