Python 我能';你不能让.upper()工作吗?不断给出一个叫做AttributeError的东西
在修复了前面的问题之后,我尝试使用.upper()将所有单词和用户输入大写,但是Python Shell一直给我一个名为AttributeError about for.upper之类的东西 我试过的是在def wordlist()函数中,我把strip_line=line.strip(“\n”).upper()放在def guesss(guessed)函数中,我把guess=guess.upper()放在def guesss中,它一直在崩溃。但是,当我将这些更改回.lower()时,它工作得非常好。但为了美观起见,我希望它是大写字母,因为我认为大写字母比小写字母更好看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()时,它工作得非
对于那些关心的人来说,我在这段代码中遇到的前一个错误是我没有在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