Python,用户选择一个单词,计算机进行猜测



首先,我是python的noob(如果你不知道的话(和StackOverflow的noob。

我看过类似的节目,但找不到能给我很大帮助的。简而言之,我正在做的任务是创建一个程序,从用户那里获取一个单词,然后继续猜测随机字母。

目前,我的new_letter函数不起作用,我已经在几个地方尝试过打印,所以我知道它无法通过该函数。

我试图想出一个计数器,这样猜到的字母就会取代computers_word中与actual_word中相同位置对应的正确位置的*。

import random
#I just have this as a placeholder so guessed_letter exists
guessed_letter = 0
#list of all letters
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
generateletter = True
#this function is supposed to randomly picks letters and only move on if that letter is not one in the guessed list
def new_letter():
while generateletter == True:
n = random.randint(0, 25)
guessed_letter = alphabet[n]

for g in guessed:
if guessed_letter == g:
continue
generateletter == False
guessed.append(guessed_letter)
print('I guess '+str(guessed_letter))
generateletter == False

return guessed_letter
#This functions just updates the player (and me)
def display_status():
print(actual_word)
print(computers_word)
print(guessed)
playagain = True
guessagain = True
#Outer loops allow for variables to be reset if the user wants to play again after the word has been guessed
while playagain == True:
#new word is entered by the user
user_word = input('Please choose a word and I will try to guess it: ')

#resets lists
guessed = []
actual_word = []
computers_word = []

for letter in user_word:

#Append users word to actual_word as a list
actual_word.append(letter)

#Appends *'s the same length as the user's word to computers_word
computers_word.append('*')

counter = 0
#computer gameplay begins
while guessagain == True:
if computers_word != actual_word:
display_status()

^好的,到目前为止,程序到达这里并停止,我没有收到任何错误,只是new_letter函数没有返回任何内容。

guessed_letter = new_letter()
print(guessed_letter)
for letter in user_word:
if guessed_letter == letter:
computers_word.append(counter, guessed_letter)

#I realize that the way these counter works is wrong. The concept is so that the star replaced corresponds with the same position in the actual_word list
counter = counter + 1

else:
continue

elif computers_word == actual_word:
display_status
user_choice = input('I guessed the word! Would you like to play again? ')
if user_choice == 'Yes' or user_choice == 'yes':
guessagain == False
playagain == True

else:
guessagain == False
playagain == False

好的。因此,正如@Uvar所指出的,首先,赋值和比较在几个地方被混淆了。此外,由于while循环和在0-25之间不加区分地选取值,代码可能会运行很长时间。该代码不会在将来的猜测中消除以前猜测的数字。修改后的代码(带注释(如下:

import random
import string
guessed_letter = 0
# list of all letters
# string.ascii returns 'abcdefghijklmnopqrstuvwxyz'
alphabet = list(string.ascii_lowercase)
alphabet.extend(list(string.ascii_uppercase))
generateletter = True

# this function is susposed to randomly picks letters and only move 
# on if that letter is not one in the guessed list
def new_letter(generateletter, alphabet):
while generateletter:
# Using random.choice to pick values
guessed_letter = random.choice(alphabet)
if guessed_letter not in guessed:
for g in guessed:
if guessed_letter == g:
continue
generateletter = False
guessed.append(guessed_letter)
# To prevent picking the same values again, remove them
alphabet.remove(guessed_letter)
print('I guess '+str(guessed_letter))
generateletter = False
return guessed_letter
def display_status(actual_word, computers_word, guessed):
print("Actual Word", actual_word)
print("Computers Word:", computers_word)
print("Guessed:", guessed)
playagain = True
guessagain = True
# 'while playagain == True' and 'while playagain' evaluate the same thing
while playagain:
user_word = input('Please choose a word and I will try to guess it: ')
guessed = []
actual_word = []
computers_word = []
for letter in user_word:
actual_word.append(letter)
computers_word.append('*')
while guessagain:
if computers_word != actual_word:
display_status(actual_word, computers_word, guessed)
guessed_letter = new_letter(generateletter, alphabet)
print("Guessed Letter:", guessed_letter)
# Used enumerate here to get position too
# Additionally, used actual_word
for i,letter in enumerate(actual_word):
if guessed_letter == letter:
# Insert at exactly the required position
computers_word[i] = guessed_letter
else:
continue
elif computers_word == actual_word:
display_status
user_choice = input('I guessed the word! Would you like to play again? ')
if user_choice == 'Yes' or user_choice == 'yes':
guessagain = False
playagain = True
else:
guessagain = False
playagain = False

最新更新