【问题标题】:Python Word Scramble/Jumble - how does this scramble a word?Python Word Scramble/Jumble - 这是如何打乱单词的?
【发布时间】:2017-09-07 15:08:24
【问题描述】:

我这里有一个 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)

【问题讨论】:

  • 我建议在while word 循环中添加print(word)(两次)、print(position)print(scramble)。弄清楚代码块内部发生了什么的一个好方法是用打印语句乱扔它们,然后运行代码。
  • 谢谢,但我应该在哪里将这些打印语句添加到代码中?抱歉,我对此很陌生。
  • 对于 while 循环中的每一行,如果您无法确定变量的相关值是什么,请打印出来。
  • 如果涉及到一些实验也没关系,或者你添加一个打印语句然后删除它或注释掉它。为了弄清楚代码在做什么,值得练习这个过程。
  • 谢谢,这对 while 循环中的前两行有很大帮助。虽然循环中的底线并没有让我清楚地知道打印(word)时发生了什么。

标签: python random while-loop word scramble


【解决方案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 的前三个字符作为字符串。同样,word[(position + 1):] 表示“word 的子字符串,从索引 position + 1 开始”。

整个表达式最终为“word,除了索引处的字符 position”,因为您将word 的部分连接到positionword 的部分从@ 开始987654342@。不幸的是,这是在 Python 中从字符串中删除字符的最优雅的方式。

总结一下:while 循环选择原始单词的一个随机字符,将其添加到打乱的单词中,然后将其从原始单词中删除。它会继续这样做,直到原稿中没有字符为止。

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 2012-01-27
    • 2017-07-18
    • 1970-01-01
    • 2016-09-09
    • 2017-07-10
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多