Печатная проблема в Python - PullRequest
1 голос
/ 16 ноября 2011

Я чувствую себя идиотом даже за то, что спрашиваю об этом, но кто-нибудь имеет представление, почему мой код печатает список после каждого перемешивания?

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 Я не вставил функцию импорта / вызова функцииматериал, так как он не имеет отношения к вопросу.

Ответы [ 3 ]

1 голос
/ 16 ноября 2011

Ваш оператор print находится внутри 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
1 голос
/ 16 ноября 2011

Ваш оператор print находится внутри цикла for, поэтому он будет печатать L для каждого элемента в L.

Попробуйте отменить отступ в том же уровне, что и цикл for, чтобы поместить его вне цикла

0 голосов
/ 16 ноября 2011

Будьте осторожны с вашими отступами:

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, и все должно пройти хорошо.

...