Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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字母猜谜游戏_Python_Loops - Fatal编程技术网

python字母猜谜游戏

python字母猜谜游戏,python,loops,Python,Loops,我第一次真正尝试了python程序——一个猜字母的游戏 大部分的工作我都做完了,但最后一点工作我还没做完 我想让游戏在用户和人工智能之间来回交替,直到世界完全展现出来。到目前为止,我很好。在这一点上,我想让玩家猜对最多的字母赢得一分。电脑主持人选择另一个单词,然后重新开始。第一个得五分的玩家赢得比赛 我有一个while循环,在用户/人工智能转换之间交替,但是一旦这个词完全公开,我就不能让它正确地中断?在这之后,比较userCorrectLetters的数量和AicCorrectLetters的数

我第一次真正尝试了python程序——一个猜字母的游戏

大部分的工作我都做完了,但最后一点工作我还没做完

我想让游戏在用户和人工智能之间来回交替,直到世界完全展现出来。到目前为止,我很好。在这一点上,我想让玩家猜对最多的字母赢得一分。电脑主持人选择另一个单词,然后重新开始。第一个得五分的玩家赢得比赛

我有一个while循环,在用户/人工智能转换之间交替,但是一旦这个词完全公开,我就不能让它正确地中断?在这之后,比较userCorrectLetters的数量和AicCorrectLetters的数量应该很简单,然后用它来确定谁在这一轮中获胜

然后,我假设整个过程应该进入一个while循环,直到其中一个玩家达到5分才停止

我遇到的另一个问题是如何禁止用户重新猜测已经解决的角色位置

import random


#set initial values
player1points= 0
ai= 0
userCorrectLetters= []
aiCorrectLetters=[]
wrongLetters=[]
wrongPlace= []
correctLetters = []
endGame = False
allLetters = set(list('abcdefghijklmnopqrstuvwxyz'))
alreadyGuessed = set() 
userGuessPosition = 0
availLetters = allLetters.difference(alreadyGuessed)


#import wordlist, create mask
with open('wordlist.txt') as wordList:
    secretWord = random.choice(wordList.readlines()).strip()
print (secretWord)
secretWordLength = len(secretWord)








def displayGame():
    mask = '_'  * len(secretWord)
    for i in range (len(secretWord)):
        if secretWord[i] in correctLetters:
            mask = mask[:i] + secretWord[i] + mask [i+1:]
    for letter in mask:
        print (letter, end='')
    print (' ')
    print ('letters in word but not in correct location:', wrongPlace)
    print ('letters not in word:', wrongLetters)



    ##asks the user for a guess, assigns input to variable

def getUserGuess(alreadyGuessed):


    while True:
        print ('enter your letter')
        userGuess = input ()
        userGuess= userGuess.lower()
        if len(userGuess) != 1:
            print ('please enter only one letter')
        elif userGuess in alreadyGuessed:
            print ('that letter has already been guessed. try again')
        elif userGuess not in 'abcdefjhijklmnopqrstuvwxyz':
            print ('only letters are acceptable guesses. try again.')
        else:
            return userGuess

def newGame():
    print ('yay. that was great. do you want to play again? answer yes or no.')
    return input().lower().startswith('y')

def userTurn(wrongLetters, wrongPlace, correctLetters):
    print ('\n')

    displayGame ()
    print ('which character place would you like to guess. Enter number?')
    userGuessPosition = input ()
    if userGuessPosition not in ('123456789'):
        print ('please enter a NUMBER')
        userGuessPosition = input()
    slice1 = int(userGuessPosition) - 1  


    ##player types in letter
    guess = getUserGuess(wrongLetters + correctLetters)
    if guess== (secretWord[slice1:int(userGuessPosition)]):
        print ('you got it right! ')
        correctLetters.append(guess)
        userCorrectLetters.append(guess)
        displayGame()

    elif guess in secretWord:
            wrongPlace.append(guess) 
            print ('that letter is in the word, but not in that position')
            displayGame()

    else:
            wrongLetters.append(guess)
            print ('nope. that letter is not in the word')
            displayGame()




def aiTurn(wrongLetters,wrongPlace, correctLetters):
    print ('\n')
    print ("it's the computers turn")

    aiGuessPosition = random.randint(1, secretWordLength)

    aiGuess=random.sample(availLetters, 1)
    print ('the computer has guessed', aiGuess, "in position", + aiGuessPosition)
    slice1 = aiGuessPosition - 1
    if str(aiGuess) == (secretWord[slice1:userGuessPosition]):
            correctLetters.append(aiGuess)
            aiCorrectLetters.append(aiGuess)
            print ('this letter is correct ')
            return 
    elif str(aiGuess) in secretWord:
            wrongPlace.append(aiGuess)
            print ('that letter is in the word, but not in that position')
            return

    else:
            wrongLetters.append(aiGuess)
            print ('that letter is not in the word')
            return



wordSolved = False 
while wordSolved == False:

    userTurn(wrongLetters, wrongPlace, correctLetters)
    aiTurn(wrongLetters, wrongPlace, correctLetters)
    if str(correctLetters) in secretWord:
        break 
问题在于:

if str(correctLetters) in secretWord:
您可能期望
str(['a','b','c'])
返回'abc',但它没有。它返回
“['a','b','c']”
。 应将该行替换为:

if "".join(correctLetters) in secretWord:
除此之外,您的代码还有一个问题: 假设正确的单词是
foobar
。如果用户猜到前5个字母,但顺序相反,
correctLetters
将是
['a','b','o','o','f']
,行
If'。在secretWord中连接(correctLetters):
将计算为
False
因为
'aboof'
不在
'foobar'

您可以通过将secretWord:中的
if''替换为以下内容来解决该问题:

if len(correctLetters) > 4:

基本上,只要用户猜出5个正确的字母,程序的执行就会结束。无需检查字母是否在
secretWord
中,因为您已经在
userTurn
功能中进行了检查。

您正在比较列表
correctLetters
的字符串表示形式与字符串
secretWord
。例如:

>>> secretWord = 'ab'
>>> correctLetters = ['a','b']
>>> str(correctLetters)
"['a', 'b']"
>>> str(correctLetters) in secretWord
False
尝试将由正确字母组成的字符串与机密单词进行比较:

>>> ''.join(correctLetters) == secretWord
True

你把worldSolved设置为真了吗?只是尝试了一下,还是没有正确地断开。我想这是因为str(correctLetters)和secretWord之间的比较有问题?你在secretWord中的str(correctLetters)上想做什么