使用for循环引用列表中的每个项(而不仅仅是最后一个项)
我不太明白在使用循环的时候,怎么能引用列表中的每一个项目,而不仅仅是最后一个项目。这里有一个简单的程序,我想在一行上打印出 n 个*
,其中 n 是stars
列表中的每一个数字。我的代码如下:
#!/usr/bin/python
def histogram():
stars = [10,2,3]
for i in stars:
char = "*" * i
return char
print histogram()
这段代码的输出结果只有***
(也就是stars
中的最后一个数字)。我该怎么做才能让它打印出每个数字对应的星号呢?请用最简单的语法和解释来说明。
相关文章:
- 暂无相关问题
4 个回答
-1
#!/usr/bin/python
def histogram():
stars = [10,2,3]
stars_str = ""
for i in stars :
stars_str += "*" * i + '\n'
return stars_str.strip()
print histogram ()
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。
1
考虑一下:
def histogram(li):
rtr=[]
for n in li:
rtr.append('*'*n)
return rtr
然后你可以这样做:
stars=[10,2,3]
for t in zip(stars, histogram(stars)):
print('{:4d} {}'.format(*t))
输出:
10 **********
2 **
3 ***
2
问题在于,对于stars
中的每一个项目,你都在重新赋值给char
。所以,当histogram()
返回时,char
的值就变成了"*" * stars[-1]
(也就是列表中的最后一个项目)。解决这个问题最简单的方法就是直接打印每个stars
中的char
,而不是返回任何东西。
def histogram():
stars = [10,2,3]
for i in stars:
char = "*" * i
print char
histogram()
**********
**
***
如果你想从histogram
返回输出,可以选择在char
上添加内容,而不是给它重新赋值。为此,我们可以在循环外把char
设置为空字符串(''
),然后在循环内部使用char +=
(这相当于char = char +
)来给char
添加内容。'\n'
是用来在stars
中的每个项目之间添加换行的(如果没有这个,所有的星星会在输出中显示在同一行)。
def histogram():
stars = [10,2,3]
char = ''
for i in stars:
char += "*" * i + '\n'
return char
print histogram()
以上内容可以更简洁地写成:
def histogram():
stars = [10,2,3]
return '\n'.join('*' * i for i in stars)
print histogram()
4
现在你的函数只返回了最后一次赋值给'char'的值,这个值是一个由星号组成的字符串。你想要做的是在每次循环中,记录'char'的每一个值,形成一个列表。
def histogram():
stars = [10,2,3]
characters = []
for i in stars :
cur_stars = "*" * i
characters.append( cur_stars )
print cur_stars
return characters
>>> stars = histogram()
**********
**
***
这样做会逐行打印出星号,并把这些星号存储在一个叫'stars'的变量里。
还有一种更快、更简洁的方法可以做到这一点,那就是使用列表推导式(这是一种函数式编程的结构),它可以即时创建你的列表:
def histogram():
stars = [10,2,3]
return [ "*" * i for i in stars ]
>>> histogram()
['**********', '**', '***']
>>> print('\n'.join( histogram() ))
**********
**
***