[英]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.