Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 字符串值为';t更新_Python_String_List - Fatal编程技术网

Python 字符串值为';t更新

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

所以我一直在用Python修改Hangman,我遇到了一个问题。 输出根本没有更新。尽管代码的其他部分,例如添加到
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