Python 字符串值为';t更新
所以我一直在用Python修改Hangman,我遇到了一个问题。 输出根本没有更新。尽管代码的其他部分,例如添加到Python 字符串值为';t更新,python,string,list,Python,String,List,所以我一直在用Python修改Hangman,我遇到了一个问题。 输出根本没有更新。尽管代码的其他部分,例如添加到used列表中的尝试次数减少或使用过的字母,似乎功能完美,但它始终保持这种下划线网格 代码如下: # IMPORT GUARDS from random import choice from os import system from time import sleep # DECLARATIONS wordList = ["apple", "pear"] gameWord = c
used
列表中的尝试次数减少或使用过的字母,似乎功能完美,但它始终保持这种下划线网格
代码如下:
# IMPORT GUARDS
from random import choice
from os import system
from time import sleep
# DECLARATIONS
wordList = ["apple", "pear"]
gameWord = choice(wordList)
strList = list(gameWord)
strOut = "_" * len(gameWord)
tries = 5
used = []
alphabet = "abcdefghijklmnopqrstuvwxyz"
while True:
system ("cls")
print (strOut + "\n")
print ("Tries Left:", str(tries))
print ("Letters Used:", used)
Ltr = input ("Letter: ")
# INPUT CHECK
if len(Ltr) != 1 and Ltr.lower() in alphabet:
print ("Input is of incorect size.")
sleep(0.5)
elif len(Ltr) == 0 and Ltr.lower() in alphabet:
print ("No input value given.")
sleep(0.5)
if len(Ltr) == 1 and Ltr.lower() not in alphabet:
print ("Invalid character input.")
sleep(0.5)
if len(Ltr) != 1 and Ltr.lower() not in alphabet:
print ("Input is both too large and contains invalid characters.")
sleep(0.5)
# CORRECT INPUT
if len(Ltr) == 1 and Ltr.lower() in alphabet:
ltrPos = ( [pos for pos, char in enumerate(gameWord) if char == Ltr.lower])
# DECLARATIONS
Counter = 0
strcounter = 0
# CHECKING THE NUM OF TIMES THE INPUT APPEARS IN THE WORD
while Counter < len(strList):
if gameWord[Counter].lower() == Ltr.lower():
strcounter += 1
Counter += 1
# INPUT DOES APPEAR
if strcounter != 0:
strcounter -= 1
strOut = list(strOut)
for i in ltrPos:
strOut[ltrPos[strcounter]] = Ltr.upper()
strcounter += 1
strOut = "".join(strOut)
# INPUT DOES NOT APPEAR AND/OR IS USED
elif strcounter == 0:
if Ltr not in used:
print ("Letter not in word.")
used.append(Ltr.lower())
tries -= 1
else:
print ("Letter Already Used.")
sleep(0.5)
# OUT OF TRIES
if tries == 0:
system("cls")
print ("Game Over. \nWord: " + gameWord)
break
# VICTORY
if "_" not in strOut:
system("cls")
print ("Congratulations!")
break
system ("pause")
#导入防护装置
从随机进口选择
从操作系统导入系统
从时间上导入睡眠
#声明
单词列表=[“苹果”,“梨”]
gameWord=选项(单词列表)
strList=list(gameWord)
strOut=“389;”*len(gameWord)
尝试=5次
已用=[]
alphabet=“abcdefghijklmnopqrstuvxyz”
尽管如此:
系统(“cls”)
打印(strOut+“\n”)
打印(“尝试左:”,str(尝试))
打印(“使用的字母:”,已使用)
Ltr=输入(“字母:”)
#输入检查
如果len(Ltr)!=字母表中的1和Ltr.lower()
打印(“输入的大小不正确。”)
睡眠(0.5)
elif len(Ltr)=0,字母表中的Ltr.lower()
打印(“未给出输入值”)
睡眠(0.5)
如果len(Ltr)==1且Ltr.lower()不在字母表中:
打印(“无效字符输入”)
睡眠(0.5)
如果len(Ltr)!=1和Ltr.lower()不在字母表中:
打印(“输入太大,包含无效字符。”)
睡眠(0.5)
#正确输入
如果字母表中的len(Ltr)==1和Ltr.lower():
ltrPos=([pos代表pos,枚举(gameWord)中的字符,如果字符==Ltr.lower])
#声明
计数器=0
strcounter=0
#检查输入在WORD中出现的次数
当计数器
谢谢你的建议。提前感谢。主要问题是您忘记在一个地方调用
lower
函数:
ltrPos = [pos for pos, char in enumerate(gameWord) if char == Ltr.lower()]
但还有更多。首先,您可以将strCounter的计算简化为
strcounter = len(ltrPos)
或者只需检查如果LTRPO:
而不是如果strcounter!=0:
。此外,您还可以使用else
而不是elif
下一个问题是strOut[ltrPos[strcounter]。在这里,您尝试访问lrtPos[strcounter]
,这将在您将strcounter
减量一次时产生索引错误,而不是将其设置回零。相反,只需直接迭代ltrPos
中的索引即可:
for i in ltrPos:
strOut[i] = Ltr.upper()
另外,请注意,如果字母不在单词中,您只能将其添加到
已使用的列表中。在列表中键入理解ltrPos=([pos代表pos,char在枚举(gameWord)中,如果char==Ltr.lower])
lower
应该是lower()
,您正在与函数进行比较。投票结束,因为打字错误。(事实上,本想因拼写错误而关闭,但点击了错误的选项;不过,还是投票关闭了…@tobias_k祝你一切顺利,先生!但是现在我在strOut[ltrPos[strcounter]]=Ltr.upper()部分中收到一条indexer错误消息(“列表索引超出范围”)。当我输入一个字符来替换两个下划线时就会发生这种情况,即apple
中的P