2015-11-19 68 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

相關問題