【问题标题】:Variable doesn't want to be defined?变量不想被定义?
【发布时间】:2015-10-06 14:29:36
【问题描述】:

我有一个小问题,变量似乎没有正确定义为变量。当我尝试print 变量WordLetters 的值时,它不会返回任何内容。当我尝试print 变量的长度时,它返回0

最初我在WordLetters 变量方面有一个NameError,然后我在try: 函数之外定义,现在它没有返回任何值。难道try: 有自己的作用域?如果是这样,我将如何将值附加到 WordLetters 列表?

RandomWord = random.choice(Words)
try:
  WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2], RandomWord[3], RandomWord[4], RandomWord[5], RandomWord[6], RandomWord[7], RandomWord[8], RandomWord[9]]
except(IndexError):
  pass

print("Word: " + "".join(WordLetters))
print("The word is " + str(len(WordLetters)) +  " letters long.")

【问题讨论】:

  • 默默地忽略了IndexError RandomWord 的异常。请删除try...except,您就会知道为什么没有设置WordLetters。您随机选择了一个少于 10 个元素的 RandomWord
  • 你不想要WordLetters = list(RandomWord)吗?
  • 这仅在RandoWord 的长度正好为 10 个字母时才有效。你总能找到字符串的len()
  • 哦,它想被定义,你只是不允许它。 Words 中的所有单词至少有 10 个字母似乎是错误的。 @Buzz,不完全是 10,但至少有 10 个字符长。
  • 多么冗长的代码啊。你可以只使用 RandomWord[:10] :)

标签: python list variables python-3.x global-variables


【解决方案1】:

您使用except IndexError: pass 默默地忽略了索引错误。如果您随机选择的任何单词短于 10 个字符,您将收到异常并且不会设置 WordLetters

当这种情况发生时,要么设置一个默认值,要么完全避免索引单个字符;您可以使用list() 函数创建一个包含单词所有单个字符的列表:

WordLetters = list(RandomWord)

无需预先知道单词中有多少个字符。

请注意,除非您打算改变列表(更改单个元素或从列表中添加或删除元素),否则您不需要将字符串转换为单个字符的列表。您总是可以遍历一个单词或获取长度; len(RandomWord) 有效,for character in RandomWord: print(character) 也有效。

【讨论】:

    【解决方案2】:

    忽略 IndexError 没有帮助。

    我的解决方案是检查每个单词的长度,如下所示:

    if len(RandomWord) == 2:
      WordLetters = [RandomWord[0], RandomWord[1]]
    elif len(RandomWord) == 3:
      WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2]]
    elif len(RandomWord) == 4:
      WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2], RandomWord[3]]
    elif len(RandomWord) == 5:
      WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2], RandomWord[3], RandomWord[4]]
    elif len(RandomWord) == 6:
      WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2], RandomWord[3], RandomWord[4], RandomWord[5]]
    elif len(RandomWord) == 7:
      WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2], RandomWord[3], RandomWord[4], RandomWord[5], RandomWord[6]]
    else:
      WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2], RandomWord[3], RandomWord[4], RandomWord[5], RandomWord[6], RandomWord[7]]
    

    有点冗长,但很有效。

    【讨论】:

    • 单词超过8个字母怎么办?
    • 或者你可以直接使用WordLetters = list(RandomWord),不需要索引每个单独的字符。
    • @buzz 我的列表不包含任何超过 8 个字母的单词。
    【解决方案3】:

    怎么样:

    aword = 'hello world'
    randomWord = []
    for i in range(len(aword)):
        randomWord.append(random.choice(aword))
    
    print ''.join(randomWord)
    print len(randomWord)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      相关资源
      最近更新 更多