Python Word Scramble / Jumble - 这是如何扰乱一个词的?

时间:2017-04-12 02:40:12

标签: python random while-loop word scramble

我这里有一个python程序解读一个单词,但我不确定特定部分发生了什么。

在下面用标题框分区和分隔的部分中,我不明白为什么这个单词的“加扰”被放入while循环中 - 如果没有循环它会不能工作?此外,有人可以解释在while循环中发生的所有事情(而单词:)?

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 个答案:

答案 0 :(得分:0)

让我们一次看一行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的{​​{1}}部分。不幸的是,这是在Python中从字符串中删除字符的最优雅方式。

总结:while循环选择原始单词的随机字符,将其添加到加扰单词,并从原始单词中删除它。它会继续执行此操作,直到原始文件中没有任何字符。