2017-04-12 77 views
0

我在这里有一个python程序解读一个单词,但我不知道特定部分发生了什么。Python Word Scramble/Jumble - 这是如何扰乱一个词?

在下面的标题被块引用和分隔的部分中,我不明白为什么将单词的“加扰”放到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'字循环中添加'print(word)'(两次),'print(位置)','print(scramble)'。弄清代码块内部发生什么的一个好方法是用打印语句清理它们,然后运行代码。 –

+0

谢谢,但我会在代码中添加这些打印语句?对不起,我对此很新。 –

+0

对于while循环中的每一行,如果您无法弄清楚变量的相关值是什么,请将其打印出来。 –

回答

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 + 1部分串联的word部分高达position。不幸的是,这是从Python中的字符串中删除字符的最优雅的方式。

总结:while循环选择原始单词的一个随机字符,将其添加到加扰的单词中,并从原始单词中删除它。它会继续这样做,直到原始文件中没有字符。

相关问题