2011-11-16 112 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