Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 我能';你不能让.upper()工作吗?不断给出一个叫做AttributeError的东西_Python_Python 3.x - Fatal编程技术网

Python 我能';你不能让.upper()工作吗?不断给出一个叫做AttributeError的东西

Python 我能';你不能让.upper()工作吗?不断给出一个叫做AttributeError的东西,python,python-3.x,Python,Python 3.x,在修复了前面的问题之后,我尝试使用.upper()将所有单词和用户输入大写,但是Python Shell一直给我一个名为AttributeError about for.upper之类的东西 我试过的是在def wordlist()函数中,我把strip_line=line.strip(“\n”).upper()放在def guesss(guessed)函数中,我把guess=guess.upper()放在def guesss中,它一直在崩溃。但是,当我将这些更改回.lower()时,它工作得非

在修复了前面的问题之后,我尝试使用.upper()将所有单词和用户输入大写,但是Python Shell一直给我一个名为AttributeError about for.upper之类的东西

我试过的是在def wordlist()函数中,我把strip_line=line.strip(“\n”).upper()放在def guesss(guessed)函数中,我把guess=guess.upper()放在def guesss中,它一直在崩溃。但是,当我将这些更改回.lower()时,它工作得非常好。但为了美观起见,我希望它是大写字母,因为我认为大写字母比小写字母更好看


对于那些关心的人来说,我在这段代码中遇到的前一个错误是我没有在def wordlist()函数中输入.lower()

循环中有一个bug填补了hangingman中的空白:

import random

def wordlist():
    wordlistfile=open("dictionary.txt","r")
    word_list=[]
    for line in wordlistfile:
        strip_line=line.strip("\n").lower()
        word_list.append(strip_line)
    return (word_list)

#I want to change the .lower() here to .upper() but it keeps breaking as soon as
#change it and have to keep changing it back. This function opens the word list
#file and converts into a comma seperated list.

def randomword(words_list):
    word = random.randint(0, len(words_list)-1)
    return words_list[word]

#This function picks a random integer in the range of the word list and uses that
#integer to call an indexed word

def hangingman (hangmanpictures, wrongletters, rightletters, random_word):
    print(hangmanpictures[len(wrongletters)])
    blanks = "_" * len(random_word)

    for i in range(len(random_word)):
        if random_word[i] in rightletters:
            blanks = blanks[:i] + random_word[i] + blanks[i+1:]
    for letter in blanks:
        print(letter, end=" ")
    print("\nWrong letters: ", end=" ")
    print()
    for letter in wrongletters:
        print(letter, end=" ")

#function that runs the game

def guesses (guessed):
     while True:
        guess = input("\nGuess a letter: ")
        guess = guess.lower()
        if len(guess) != 1:
            print("Please enter one letter at a time")
        elif guess in guessed:
            print("You have already tried that letter, please try again")
        elif guess not in "qwertyuiopasdfghjklzxcvbnm":
            print("Please enter an ENGLISH letter")
        else:
            return guess

#function that checks whether or not if a guess is a valid guess or not
#I was trying to change the guess into .upper() as well to match the character
#from the word that is randomly chosen from above, but something kept breaking
#and I had to change it back

def again():
    choice = input("Do you want to play again? (Y or N): ").upper()
    return choice
#wanna play again? 

hangmanpictures = ['''
   +----+
   |    |
        |
        |
        |
        |
=========''', '''
   +----+
   |    |
   O    |
        |
        |
        |
=========''', '''
   +----+
   |    |
   O    |
   |    |
        |
        |
=========''', '''
   +----+
   |    |
   O    |
  /|    |
        |
        |
=========''', '''
   +----+
   |    |
   O    |
  /|\   |
        |
        |
=========''', '''
   +----+
   |    |
   O    |
  /|\   |
  /     |
        |
=========''', '''
   +----+
   |    |
   O    |
  /|\   |
  / \   |
        |
=========''']

print("Welcome to HANGMAN")
word_list = wordlist()
random_word = randomword(word_list)

wrongletters = ""
rightletters = ""
finishedgame = False
guessed = rightletters+wrongletters

print(random_word)


while True:
    hangingman (hangmanpictures, wrongletters, rightletters, random_word)
    playerguess = guesses(wrongletters + rightletters)
    if playerguess in random_word:
        rightletters = rightletters + playerguess
        correctletters=True
        for i in range(len(random_word)):
            if random_word[i] not in rightletters:
                correctletters=False
                break
        if correctletters:
            print("You have found the correct word, congratulations!!! The hidden word was: \n {}".format(random_word))
            finishedgame=True
    else:
        wrongletters = wrongletters + playerguess
        if len(wrongletters) == len(hangmanpictures)-1:
            hangingman (hangmanpictures, wrongletters, rightletters, random_word)
            print("\nYou have lost. The word was: {}".format(random_word))
            finishedgame=True

    if finishedgame:
        if again()=="Y":
            wrongletters = ""
            rightletters = ""
            finishedgame = False
            random_word = randomword(word_list)
        else:
            print("Press enter to quit the game.")
            input()
            break
除了字符串的第一个字符,您正在删除所有字符。应该是

            blanks = blanks[:1] + random_word[i] + blanks[i+1:]
注意i代替1

为了在Python2.7和Python3中运行,我做了一些小的编辑,现在我可以使用它了。以上是唯一的逻辑变化


为了您将来的使用,我所做的只是运行程序,查看输出在哪里出现异常,然后卡在print语句中跟踪值。如果你有病人,问问哪里疼

            blanks = blanks[:i] + random_word[i] + blanks[i+1:]

你需要花时间阅读。特别是最小的部分。另外,我推荐MCVE。你似乎不知道你的程序哪里出了问题。另外,我强烈推荐增量编程:写几行,调试添加内容,然后继续。在这里,您有大约150行代码来搜索问题。我将其缩小到程序中可能出现错误的两个点,但我不知道如何修复它,我正在寻求帮助。很抱歉,我不是一个专业的程序员。我认为这个函数中可能有一些不完整的地方,但无法找出它到底出了什么问题。问题在该函数或下面的实际程序中。-这是评论之一。更好的方法是说出对函数的期望以及当前正在发生的事情。我得到了一个不同的输出:单词中出现的字母不会添加到错误的字母列表中,但到目前为止,单词的显示在一个正确的字母处被切断。绞刑犯在正确的位置累积新的片段。啊,谢谢你,我没有注意到这个小错误,因为我的和1在python屏幕上看起来非常相似,我修复了这个小片段,然后再次运行代码,但我仍然无法得到任何类型的正确字母,因为每次输入都会自动输入错误的字母。我尝试在所有地方添加打印语句和输入语句,试图找出发生了什么,但我找不到问题的根源,我仍然无法注册正确的字母。我看不到代码和这一努力的成果。你在random_word:中的if playerguess前后的print语句应该可以很容易地显示问题。我没有用它们更新这里的代码,因为在这里这样做需要一个多小时。最初写这篇文章的时候,我花了一个小时才把所有的空格都弄好。编辑问题:从文本编辑器中复制代码并粘贴到编辑框中。选择新代码的整个主体。单击“代码示例”图标{}。这样就可以对代码进行格式化了。
for i in range(len(random_word)):
    if random_word[i] in rightletters:
        blanks = blanks[:i] + random_word[i] + blanks[i+1:]
        print "DEBUG", i, blanks