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 выбирает случайный символ исходного слова, добавляет его к зашифрованному слову и удаляет его из оригинала. Это продолжается до тех пор, пока в оригинале не останется символов.