2011-11-16 64 views
1

即使問這個問題我覺得自己像個白癡,但是有沒有人知道爲什麼我的代碼在每次洗牌後都打印列表?Python中的打印問題

def shuffle(L, nswaps): 
    n = 0 
    for item in L: 
     while n < nswaps: 
      card_one = choose(L) 
      card_two = choose(L) 
      if card_two == card_one: 
       card_two = choose(L) 
      n += 1 
      L[card_one], L[card_two] = L[card_two], L[card_one] 
     print L 

NB我沒有粘貼導入/調用函數的東西,因爲它與問題無關。

+2

也許你想縮減'print'語句的一個級別? –

+0

我早些時候嘗試過,它沒有工作,但現在它是* head-desk *。非常感謝。 :) 如果你想把它複製到答案中,我可以給你點(我假設點系統就像在Y!A) –

+0

只需接受其他答案之一。 –

回答

0

小心你的縮進:

def shuffle(L, nswaps): 
    n = 0 

    for item in L: 
     while n < nswaps: 
      card_one = choose(L) 
      card_two = choose(L) 

      if card_two == card_one: 
       card_two = choose(L) 

      n += 1 
      L[card_one], L[card_two] = L[card_two], L[card_one] 

     print L 

注意,print L語句在同一水平for循環的內容(這是爲什麼每次循環都會調用它)。

print L前面的空格中刪除四個空格,並且所有內容都應該順利。

1

您的打印語句裏面的for循環,所以它會在L.

打印L用每個元素嘗試取消縮進它同一級別的for循環,把它的循環

1

您的打印語句位於for內部,因此它將爲列表中的每個元素執行一次:)。

嘗試做這樣的事情:

def shuffle(L, nswaps): 
    n = 0 
    for item in L: 
     while n < nswaps: 
      card_one = choose(L) 
      card_two = choose(L) 
      if card_two == card_one: 
       card_two = choose(L) 
      n += 1 
      L[card_one], L[card_two] = L[card_two], L[card_one] 
    print L