这是我在程序中使用的例程(见下文),但我一直得到同样的错误。我该怎么做才能解决它?
def multiplos(n):
from numpy import unique
list=[]
list1=[]
list2=[]
for i in xrange(1,n+1):
s=17*i
if s%10==0 and s%2==0 and s%3==0 and s%8==0 and s%19==0 and s%11==0 and s%13==0 and s%17==0:
list=list+[s]
for i in xrange(1,n+1):
m=13*i
if m%10==0 and m%2==0 and m%3==0 and m%8==0 and m%19==0 and m%11==0 and m%13==0 and m%17==0:
list1=list1+[m]
for i in xrange(1,n+1):
t=7*i
if t%10==0 and t%2==0 and t%3==0 and t%8==0 and t%19==0 and t%11==0 and t%17==0 and t%13==0:
list2=list2+[t]
#Concatenando las tres listas
lista_final=list+list1+list2
#Lista sin repeticiones
final=unique(lista_final)
return final
程序:
n=20000
from multiplos_7_13_17 import multiplos
mult=multiplos(n)
for i in xrange(mult):
if mult[i]%4==0 and mult[i]%6==0 and mult[i]%9==0 mult[i]%12==0 mult[i]%14==0 and mult[i]%15==0 and mult[i]%16==0 and mult[i]%17==0 and$
print "¡Lo has encontrado!",mult[i]
else:
print "Este no es...D:"
错误TypeError: only length-1 arrays can be converted to Python scalars
打印在for i in xrange(mult):
答案 0 :(得分:2)
而不是试图这样做:
for i in xrange(mult):
if mult[i]%4==0 and mult[i]%6==0 and mult[i]%9==0 mult[i]%12==0 mult[i]%14==0 and mult[i]%15==0 and mult[i]%16==0 and mult[i]%17==0 and$
print "¡Lo has encontrado!",mult[i]
else:
print "Este no es...D:"
这样做:
for num in mult:
if all(num % val == 0 for val in [4, 6, 9, 12, 14, 15, 16, 17]):
print "¡Lo has encontrado!",num
else:
print "Este no es...D:"
您的原始代码已损坏,因为您尝试将numpy数组传递给xrange,但xrange仅获取int
个值。您可能要做的是for i in xrange(len(mult))
,但这不是在此迭代的最佳方式,因为您实际上并不需要数组的索引。您真正关心的是数组中的每个值,因此使用for num in mult
是一个更好的选择(并且需要更少的输入,这很好)。
此外,我通过利用您重复进行相同比较的事实来缩短您的if语句。我不是一遍又一遍地重新输入num % some_number == 0
,而是使用all
和生成器表达式来迭代[4, 6, 9, 12, 14, 15, 16, 17]
,只有True
num % val == 0
才会返回True
1}}对所有人来说。
修改:
这是一个完整的工作示例,带有输出。我也简化并加快了multiplos
功能,虽然它在功能上仍然与你原来的相同。
def multiplos(n):
from numpy import unique
list=[]
list1=[]
list2=[]
mod_list = [2, 3, 8, 10, 11, 13, 17, 19]
for i in xrange(1,n+1):
s=17*i
if all(s % val == 0 for val in mod_list):
list=list+[s]
m=13*i
if all(m % val == 0 for val in mod_list):
list1=list1+[m]
t=7*i
if all(t % val == 0 for val in mod_list):
list2=list2+[t]
#Concatenando las tres listas
lista_final=list+list1+list2
#Lista sin repeticiones
final=unique(lista_final)
return final
n = 23279256
mult = multiplos(n)
for num in mult:
if all(num % val == 0 for val in [4, 6, 9, 12, 14, 15, 16, 17]):
print "Lo has encontrado!",num
else:
print "Este no es...D:"
输出:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Lo has encontrado! 232792560
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D:
Este no es...D: