Python Word Scramble/Jumble - как это шифрует слово?

У меня есть программа Python, которая расшифровывает слова, но я не уверен, что происходит в определенном разделе.

В разделе, который цитируется в блоке и разделяется заголовками ниже, я не понимаю, почему "скремблирование" слова помещается в цикл while - не может ли он работать без цикла? Кроме того, кто-то может объяснить все, что происходит внутри цикла while (while word:)?

import random
words = ('coffee', 'phone', 'chair', 'alarm')
word = random.choice(words)

correct = word
scramble = ""

while word:
    position = random.randrange(len(word))
    scramble += word[position]
    word = word[:position] + word[(position + 1):]

print("The scrambled word is: ", scramble)
answer = input("What's your guess?: ")

def unscramble(answer):
    while answer != correct and answer != "":
        print("Sorry, incorrect.")
        answer = input("Try again: ")
    if answer == correct:
        print("Good job, that is correct!")

unscramble(answer)

1 ответ

Решение

Давайте посмотрим на цикл while по одной строке за раз.

while word:

Это просто сокращение, чтобы сказать while len(word) > 0, Это означает, что цикл будет продолжаться до word пустой.

    position = random.randrange(len(word))

Эта строка использует стандартную библиотеку random.randrange функция для получения (псевдо) случайного числа от 0 до len(word) - 1 включительно.

    scramble += word[position]

Здесь символ в случайной позиции в слове добавляется к зашифрованному слову.

    word = word[:position] + word[(position + 1):]

Наконец, эта строка удаляет случайно выбранный символ из исходного слова, используя нарезку. Выражение word[:position] означает "подстрока word до (но не включая) индекса position". Так что если position 3, то word[:position] будет первые три символа слова в виде строки. Так же, word[(position + 1):] означает "подстрока word начиная с индекса position + 1".

Целое выражение заканчивается тем, что "word за исключением символа в индексе position", потому что вы объединяете часть word вплоть до position с частью word начинается с position + 1, К сожалению, это самый изящный способ удалить символ из строки в Python.

Подводя итог: цикл while выбирает случайный символ исходного слова, добавляет его к зашифрованному слову и удаляет его из оригинала. Это продолжается до тех пор, пока в оригинале не останется символов.

Другие вопросы по тегам