循环的基本python

时间:2016-04-21 05:54:11

标签: python loops for-loop

我是python的新手,有人可以告诉我这段代码有什么问题:

#!/usr/bin/python
nl=[] 
for x in range(1500, 2700):
     i=0
     if (x%7==0) and (x%5==0):
         nl[i]=x
     i=i+1
print (','.join(nl))

8 个答案:

答案 0 :(得分:1)

除了其他答案中提到的零长度列表问题。您在循环的每次迭代中设置i = 0。因此,您始终更改列表中的相同元素(第一个元素)。

答案 1 :(得分:0)

您将n定义为零长度list,但您在列表末尾之外写入(假定的)元素。

解决此问题的一种方法是将n的分配更改为:

n = [None]*1200

答案 2 :(得分:0)

您无法将任意索引设置为0长度列表。

使用列表,并附加:

# nl[i]=x <- this won't work
nl.append(x)

由于您在打印时似乎没有使用实际索引,因此这应该可行。请注意,您需要使用

print(",".join(map(str, nl)))

因为加入不会对整合工作。

如果您确实需要索引,我建议您使用字典。

nl = {}
low = 1500 
high = 2700
for x in range(low, high):
     if (x % 7 == 0) and (x % 5 ==0):
         nl[x-low] = x
print(','.join(map(str, nl.values())))

注意此情况下的值不会被排序。如果你想要它们那么你可以对它们进行排序

print(','.join(map(str, sorted(nl.values()))))

此外,您现在可以使用

迭代索引和值(甚至按排序顺序)
for index, value in sorted(nl.items()):

答案 3 :(得分:0)

nl=[] 
for x in range(1500, 2700):

    if (x%7==0) and (x%5==0):
       nl.append(str(x))

print (','.join(nl))

答案 4 :(得分:0)

您可以尝试使用列表中的追加方法,而不是使用索引,这在这种情况下非常有用。请尝试以下

nl=[]
for x in range(1500,2700):
if x%7==0 and x%5==0 :
    m.append(x)
print(nl)

希望它有所帮助。

答案 5 :(得分:0)

请改用此程序:

nl=[]
for x in range(1500, 2700):
    if (x%7==0) and (x%5==0):
        nl.append(x)
print nl

它的工作原理如下:

>>> ================================ RESTART ================================
>>> 
[1505, 1540, 1575, 1610, 1645, 1680, 1715, 1750, 1785, 1820, 1855, 1890, 1925, 1960, 1995, 2030, 2065, 2100, 2135, 2170, 2205, 2240, 2275, 2310, 2345, 2380, 2415, 2450, 2485, 2520, 2555, 2590, 2625, 2660, 2695]
>>> 

代码问题:

  1. 您正在尝试将值分配给零长度列表(即nl)。您必须使用append()方法追加其长度。
  2. 您希望在包含,字符的列表中加入整数。你根本不需要它。打印列表本身。 :)

答案 6 :(得分:0)

您已在for循环中设置i = 0。相反,将其设置在外面并增加。

答案 7 :(得分:0)

此外,在Python中,您可以使用所谓的list comprehension在一行中获得相同的结果:

nl = [x for x in range(1500, 2700) if (x%7==0) and (x%5==0)]

这提供了int的列表。要打印它,您需要将int转换为string

print(','.join(map(str, nl)))

或者您可以直接创建字符串列表:

nl = [str(x) for x in range(1500, 2700) if (x%7==0) and (x%5==0)]
print(','.join(nl))

如果您只想打印它,一切都可以在一行中完成:

print(','.join(str(x) for x in range(1500, 2700) if (x%7==0) and (x%5==0)))