有什么原因我不能让.upper()工作吗?一直在给一个叫做AttributeE的东西

2024-09-29 23:24:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在解决了前面的问题之后,我尝试使用.upper()将所有单词和用户输入大写,但是pythonshell一直给我一个名为AttributeError about for.upper之类的东西。你知道吗

我试过的是在def wordlist()函数中,我把strip\u行=线条.strip(“\n”).upper()并在def guesses(guessed)函数中输入guess=猜猜看。上()它不断地破裂。不过,当我把这些改回使用.lower()时,效果非常好。但为了美观起见,我希望它是大写字母,因为我认为大写字母比小写字母更好看。你知道吗

对于那些关心这个问题的人来说,我之前在这段代码中遇到的错误是,我没有在def wordlist()函数中放入.lower()。你知道吗


Tags: thetoinforlenifdefrandom
1条回答
网友
1楼 · 发布于 2024-09-29 23:24:55

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

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

除了字符串的第一个字符外,您正在切掉所有字符。应该是的

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

i代替1。你知道吗

为了在Python2.7和python3中运行这个程序,我做了一些小的编辑,现在它可以为我工作了。以上是唯一的逻辑变化。你知道吗


为了您将来的使用,我所做的只是运行程序,查看输出在何处出现异常,然后卡在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

相关问题 更多 >

    热门问题