2015-10-03 2 views
2

В настоящее время я изучаю Python из книги Майкла Доусона. Все было ясно и лаконично, за исключением случаев, когда я добрался до упражнения под названием «Игра в Jumble Word». Это код, который меня путает.Я не понимаю этот кусочек учебного кода?

import random 

    # create a sequence of words to choose from 
    WORDS = ("python", "jumble", "easy", "difficult", "answer", "xylophone") 

    # pick one word randomly from the sequence 
    word = random.choice(WORDS) 

    # create a variable to use later to see if the guess is correct 
    correct = word 

    # create a jumbled version of the word 
    jumble ="" 
    while word: 
     position = random.randrange(len(word)) 
     jumble += word[position] 
     word = word[:position] + word[(position + 1):] 

Что я не понимаю, так это то, как действует слово: слово работает. Это объяснение:

Я поставил петлю вверх таким образом, так что он будет продолжаться, пока слово не равным пустой строке. Это прекрасно, потому что каждый раз, когда выполняется цикл , компьютер создает новую версию слова с одной буквой «извлечен» и присваивает ее слову. В конце концов, слово станет пустым строком, и смешение будет выполнено.

Я попытался проследить программу (может быть, его очевидный контроль от моего имени), но я не могу видеть, как «слово» в конце концов прорывается из цикла, потому что до тех пор, как она есть символы в нем, несомненно, было бы оценить, Верно и быть бесконечным циклом.

Любая помощь очень ценится ребятам, поскольку я искал ответы повсюду, и это было бесплодно. Заранее спасибо.

+0

try 's =" hello world "; print (repr (s [25:]))', который должен помочь вам понять, как .. –

ответ

5

Это три утверждения, что вы страдаете, чтобы понять

jumble += word[position] # adding value of the index `position` to jumble 
word[:position] # items from the beginning through position-1 
word[(position + 1):] # items position+1 through the rest of the array 

Таким образом, после каждой итерации, ровно один элемент вырублен из исходной строки word. (word[position])

Итак, в конце концов вы получите пустую строку word.

Если вы еще не уверены, добавьте инструкцию печати в конце каждой итерации. Это должно помочь вам. блок Loop

while word: 
    position = random.randrange(len(word)) 
    jumble += word[position] 
    word = word[:position] + word[(position + 1):] 
    print word 
0

while word:будет выполняться до тех пор, длина слова не равна нулю. Примечание: Этот код действует как random.shuffle. from random import shuffle; shuffle(word)

+2

OP уже знает, что 'while word:' будет зацикливаться до слова 'word' пуст, но возникает проблема с отслеживанием * как *, что происходит. Кроме того, вы не можете перетасовать такую ​​строку, так как 'shuffle' работает на месте (он будет жаловаться, что' str' не поддерживает назначение элемента). Вам нужно будет выполнить 'word = list (word); перетасовать (слово); word = '' .join (word) '. – lvc

+0

@lvc благодарим вас и простите за эту ошибку. Я забыл об этом. –

Смежные вопросы