2015-11-19 116 views
0

我不明白如何引用列表中的每个项目,而不是仅使用for循环时的最后一个项目。这里是一个简单的程序,我想在一行中打印一个n-*,其中n是stars列表中的每个数字。这里是我的代码:使用for循环引用列表中的每个项目(而不是最后一个项目)

#!/usr/bin/python 

def histogram(): 
    stars = [10,2,3] 

    for i in stars: 
     char = "*" * i 

    return char 

print histogram() 

这段代码的输出是唯一***(在stars的最后一个数字)。我怎样才能让它打印每个号码的星星?请尽可能使用最简单的语法和解释。

+1

请澄清所需的输出。我的猜测是你想在循环之外做 - char =“”并且在循环中 - char + =“*”*我 –

+0

上面3行输出,先用10 *,第二用2和第三用3 – johndoe12345

回答

3

就像这样,你的函数只返回被赋值给'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() 
********** 
** 
*** 

上面会打印出星,一行行,并且将存储列表作为变量,'星星'。

更快/更清洁的方式做同样的事情,是一个列表理解(一functional programming结构),其在飞行中产生的名单:

def histogram(): 
    stars = [10,2,3] 
    return [ "*" * i for i in stars ] 

>>> histogram() 
['**********', '**', '***'] 

>>> print('\n'.join(histogram())) 
********** 
** 
*** 
+0

道歉,我希望他们列在另一个之下? – johndoe12345

+0

@ johndoe12345这一点就是你可以返回一个类似于数组的列表。然后你必须打印该列表(例如'print('\ n'.join(histogram()))')以按照你想要的方式得到它们。 –

+1

@ johndoe12345 - 进行相应编辑,但也请查看Two-Bit Alchemist的评论。 – Boa

2

的问题是,在stars每个项目,你正在重新分配char。因此,在histogram()返回时,char等于"*" * stars[-1](列表中的最后一项)。最简单的方法是对stars中的每个元素打印char,但不返回任何内容。

def histogram(): 
    stars = [10,2,3] 
    for i in stars: 
     char = "*" * i 
     print char 

histogram() 

**********
**
***

如果你想,而不是从直方图返回输出,你可以添加到char而不是将其分配给新的价值。为此,我们将char设置为for循环外部的空字符串(''),然后在for循环中使用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() 
+0

char为什么是空的?你也可以解释这一行请char + =“*”* i +'\ n' – johndoe12345

+0

@ johndoe12345查看我的更新。希望这可以帮助! – pzp

-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

我想你的意思是返回'rtr'而不是'rtf',但除此之外我不理解downvote。 –

+1

@ Two-BitAlchemist:谢谢!固定。自动纠正头痛.... – dawg

相关问题