我的if语句有什么问题?python
我似乎不明白为什么我的if语句不起作用。我是编程新手,我正在尝试创建一个刽子手游戏来测试我的表现。我把它设置好了,这样代码就可以选择一个随机的单词,数一数这个单词的字母,用破折号来显示每个字母的位置。在这一点上,我试图使用一个if语句,它将索引每个字母,直到完成所有字母。这是代码我的if语句有什么问题?python,python,if-statement,indexing,Python,If Statement,Indexing,我似乎不明白为什么我的if语句不起作用。我是编程新手,我正在尝试创建一个刽子手游戏来测试我的表现。我把它设置好了,这样代码就可以选择一个随机的单词,数一数这个单词的字母,用破折号来显示每个字母的位置。在这一点上,我试图使用一个if语句,它将索引每个字母,直到完成所有字母。这是代码 """ python simple.py """ from random_words import RandomWords rw = RandomWords() word = rw.random_word() pri
"""
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
回溯(最近一次呼叫最后一次):
文件“simple.py”,第46行,在
打印(字母(单词))
文件“simple.py”,第30行,字母
字母5=单词[4]
索引器错误:字符串索引超出范围
Python是0索引的,因此长度为4的单词将只有单词[0]
到单词[3]
尝试访问word[4]
会导致索引超出范围错误
注意你的第一个条件
if word_len >= 0:
letter1 = word[0]
这将尝试访问word[0]
,即使word
的长度为零。说单词是“Cats”。len(word)将返回4,但只能将字符串从0索引到3。将>=符号更改为just>
除此之外,您可以在任何地方消除else-pass语句。如果If语句不正确,它将自动传递到下一行。抛开If/else如何使用的问题,您可以轻松地用一个简单的列表()替换整个If/else链。请尝试以下代码,它演示了以下内容:
a = "abcd"
print(list(a))
一个编码风格的东西,尽量不要使用像letter1、letter2这样的变量,任何时候,当你谈到这个问题时,试着想想它们是否可以被列表等集合所取代。很多东西
您拥有的不是if
语句。它是八个独立的if
语句。当代码运行时,它计算第一条if
语句。然后,不管它在第一条语句中做了什么,它都会计算第二条语句,然后计算第三条语句,以此类推
您真正想要使用的是elif
语句。这会将代码转换为一条语句,并且仅当前面的if/elif
语句之一未计算为True
时,才会计算后续的elif
语句
除此之外,Python使用基于零的索引。因此,如果你的单词是“foo”,你将有len(word)==3
。但是索引意味着word[0]='f'
,word[1]='o'
,以及word[2]='o'
。没有单词[3]
那么,当代码运行时
if word_len >= 4:
letter5 = word[4]
您的单词长度为4,因此没有单词[4]
,但您仍在尝试引用它
最后,函数实际上不会返回任何内容。您想从函数中得到什么?您应该尝试
elif
语句。另外,不要查看它是否为=
,而是检查=
。任何时候你发现自己创建了名为letter1
、letter2
等的变量。你可能应该使用一个列表(或其他语言中的数组),而不是单独的变量。不需要其他:pass
。如果无事可做,您可以省略else:
语句。letters
函数从不返回任何内容,您希望print(letters(word))
打印什么?您怎么知道letters
应该返回列表?@Barmar,重点不是为OP执行letters()函数,但是要展示这样一个事实,即整个if/else都可以被内置的python功能所取代。但是if/else
只是设置了一组变量,没有提到从任何地方创建列表。非常感谢您的帮助。我没有提到列表,主要是因为我对编程非常陌生,不知道如何用正确的术语提出好的问题。不过,我相信这可能是一个很好的解决方案。我想一份清单会有用的。我计划让用户猜一个字母,如果它是正确的,它将显示该字母,我相信有一种简单的方法可以将用户输入与随机单词中的潜在字母匹配。非常欢迎!随着对python的进一步了解,您将开始为不同的情况选择合适的特性。享受学习python的乐趣,度过美好的一天!它当然是最好的编程语言之一。