繁体   English   中英

我的if语句有什么问题? 蟒蛇

[英]What is wrong with my if statement? Python

我似乎无法弄清楚为什么我的if语句不起作用。 我是编程新手,我正在尝试创建一个a子手游戏来测试我的表现。 我进行了设置,以便代码可以选择一个随机单词,计算该单词的字母,并用破折号显示每个字母的位置。 在这一点上,我正在尝试使用一个if语句来对每个字母进行索引,直到完成所有字母为止。 这是代码。

"""
python simple.py
"""

from random_words import RandomWords
rw = RandomWords()
word = rw.random_word()
print(word)

word_len = len(word)
print(("___" + "   ") * word_len)
def letters(word):
    if word_len >= 0:
        letter1 = word[0]
    else:
        pass
    if word_len >= 1:
        letter2 = word[1]
    else:
        pass
    if word_len >= 2:
        letter3 = word[2]
    else:
        pass
    if word_len >= 3:
        letter4 = word[3]
    else:
        pass
    if word_len >= 4:
        letter5 = word[4]
    else:
        pass
    if word_len >= 5:
        letter6 = word[5]
    else:
        pass
    if word_len >= 6:
        letter7 = word[6]
    else:
        pass
    if word_len >= 7:
        letter8 = word[7]
    else:

print(letters(word))

我得到的错误如下:

Traceback (most recent call last):
  File "simple.py", line 46, in <module>
    print(letters(word))
  File "simple.py", line 30, in letters
    letter5 = word[4]
IndexError: string index out of range

Python是0索引的,因此长度为4的word只有word[0]word[3]

尝试访问word[4]会给您索引超出范围的错误。

注意你的第一个条件

if word_len >= 0:
        letter1 = word[0]

即使word的长度为零,这也会尝试访问word[0]

说出“猫”这个词。 len(word)将返回4,但是您只能将字符串从0索引到3。将您的> =符号更改为>。

除此之外,您还可以消除else-在各处传递语句。 如果if语句不正确,它将自动传递到下一行。

撇开如何使用if / else的问题,您可以轻松地用一个简单的list()替换整个if / else链。 试试下面的代码,它演示:

a = "abcd"
print(list(a))

编码风格的东西,尽量不要使用诸如letter1,letter2之类的变量,只要您深入了解这一点,请尝试考虑是否可以将它们替换为诸如list等的集合。

很多事情。

您拥有的不是if语句。 它是八个单独的if语句。 当您的代码运行时,它将评估第一个if语句。 然后,无论它在第一个语句中做了什么,它都将先评估第二个,然后评估第三个,依此类推。

您真正要使用的是elif语句。 这会将您的代码转换为一个语句,并且仅当前面的if/elif语句之一未计算为True才会评估后续的elif语句。

最重要的是,Python使用基于零的索引。 因此,如果您的单词是“ foo”,则将具有len(word) == 3 但是索引意味着word[0] == 'f'word[1] == 'o'word[2] == 'o' 没有word[3]

因此,当代码运行时

if word_len >= 4:
    letter5 = word[4]

您的单词长度为4,因此没有word[4] ,但您仍在尝试引用它。

最后,您的函数实际上没有return任何内容。 您想从功能中得到什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM