python - Python,用户选择一个词,计算机猜测它
问题描述
首先,我是 python 的菜鸟(如果你不知道的话),也是 StackOverflow 的菜鸟。
我见过类似的程序,但我找不到能给我很大帮助的程序。简而言之,我正在做的任务是创建一个程序,该程序从用户那里获取一个单词并继续猜测随机字母。
目前,我的 new_letter 函数不起作用我已经尝试在几个地方打印,所以我知道它只是没有通过该函数。
我试图想出一个计数器,以便猜测的字母将在与actual_word 中的相同位置对应的正确位置替换computers_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
推荐阅读
- javascript - Angular:Google Material 图标未呈现
- c# - 如何在 xamarin 中将选择器的焦点设置为 true?
- c - 以下 C 代码中扫描集的不同行为
- batch-file - 运行 SHH 后 Cmd 锁定
- typo3 - 如果正文为空,则换行图像
- julia - Julia Delaunay 三角测量无限期挂起
- functional-programming - F# 绑定或组合作用于不同源流的解析器
- reactjs - 与 ComponentWillMount 等效的 React 钩子
- typescript - 当我在可调用函数中使用“上下文”时,firebase 云函数显示错误
- javascript - 我将如何为每个项目实现一组关于数组的指令?