我不知道如何引用列表中的每一项,而不是在使用for循环时只引用最后一项。下面是一个简单的程序,我想要在一行中打印一个n-*
,其中n是stars
列表中的每个数字。
#!/usr/bin/python
def histogram():
stars = [10,2,3]
for i in stars:
char = "*" * i
return char
print histogram()
此代码的输出仅为***
(stars
中的最后一个数字)。我怎样才能让它打印出每个数字的星号?请尽可能使用最简单的语法和解释。
发布于 2015-11-20 00:16:52
实际上,您的函数只返回分配给'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‘。
做同样事情的一种更快、更干净的方法是列表理解(一种functional programming结构),它可以动态创建列表:
def histogram():
stars = [10,2,3]
return [ "*" * i for i in stars ]
>>> histogram()
['**********', '**', '***']
>>> print('\n'.join( histogram() ))
**********
**
***
发布于 2015-11-20 00:16:54
问题是,对于stars
中的每一项,您都需要重新分配char
。因此,在histogram()
返回时,char等于"*" * stars[-1]
(列表中的最后一项)。纠正这个问题的最简单方法是只为stars
中的每个元素打印char
,而不返回任何内容。
def histogram():
stars = [10,2,3]
for i in stars:
char = "*" * i
print char
histogram()
**********
**
***
如果您希望返回直方图的输出,则可以添加到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()
发布于 2015-11-20 00:20:15
考虑一下:
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 ***
https://stackoverflow.com/questions/33808916
复制相似问题