我真的需要帮助来修复此代码。基本上,这是一个刽子手游戏,用户可以猜测字母或字。
如果用户输入一封信,它将像普通的刽子手游戏一样工作。然而,最后的机会(猜猜#6)必须是一个词。如果用户使用字母猜测并在猜测#6之前将其更正,则用户不会通过单词guess。
用户可以事先猜出这个词,但如果错误,他们将失去2个机会。因此,如果他们在开始时猜错了单词,他们将有4个机会,但最后一次机会仍然是猜猜。
编辑:该程序现在只有5个字母的猜测是对还是错,但最后的猜测仍然是一个单词猜测,我们仍然有可选的早期猜测。该计数器似乎现在正在运作,但我不确定如何分开这些单词。 (编辑:我已经意识到附加单词也有问题。)
这是我目前的代码。 当用户猜测它(计数器< 5)时我改变了部分。 (counter == 5)的部分就像要比较的旧代码一样。
import random
wordlist = 'artist breeze circle decent enroll filthy growth honest invest kernel letter narrow meteor policy pursue roster runway scheme ripple toddle wobbly zeroes'.upper().split()
random.shuffle(wordlist)
counter = 0
def draw_board():
#Display words here
for i in secret_word:
if i in correct:
print(i, end=' ')
else:
print('_', end=' ')
print("\n")
print("*** MISSES ***")
for i in incorrect:
print(i, end=' ')
print('\n*********************')
def user_guess():
#For user to input guess
global counter
secret_word = wordlist.pop()
while(counter < 5):
guess = input("Guess a letter or word\n: ").upper()
if(len(guess) > 1):
guess_list = list(guess)
if(guess_list == secret_list):
correct.append(guess_list)
else:
counter = counter + 1
elif guess in secret_word:
correct.append(guess)
else:
incorrect.append(guess)
return counter
if(counter == 5):
wordguess = input("Enter your word\n: ").upper()
if(guess == secret_word):
correct.append(wordguess)
else:
counter = counter + 1
print(counter)
return counter
def check_win():
#Check if user has won or not
global counter
if(counter > 5):
return 'loss'
for i in secret_word:
if i not in correct:
return 'no win'
return 'win'
#pop is used to retrieve a word from word list
secret_word = wordlist.pop()
secret_list = list(secret_word)
correct = []
incorrect = []
print("DEBUG: %s" % secret_word)
while True:
draw_board()
user_guess()
counter = counter + 1
win_condition = check_win()
if win_condition == 'loss':
print("You lose!")
break
elif win_condition == 'win':
print("You win!")
答案 0 :(得分:0)
这里至少应该改变3件事以避免额外的循环。
counter = 0
def user_guess():
并将def user_guess(counter):
替换为
user_guess()
counter = user_guess(counter)
替换为 -Xss512k -Xms6g -Xmx6g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=70 -XX:NewRatio=1 -XX:SurvivorRatio=6 -XX:G1ReservePercent=10 -XX:G1HeapRegionSize=32m -XX:ConcGCThreads=6 -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
此外,您应该将user_guess()中的while更改为ifs。
答案 1 :(得分:0)
调试问题主要有两种方法。第一种是分散打印报表以显示正在发生的事情,第二种是使用类似pdb
的调试程序。
调试器允许您逐步执行代码并且是跟踪问题的最佳方法,因此您应该学习如何使用它,但是打印语句通常很有用且易于理解,因此我将演示在这里。
听起来游戏绘图正确,所以我们会专注于逻辑。让我们放入print语句来显示主while
循环中的程序状态。 (我还删除了一些不必要的打印语句来缩短输出)。
while True:
draw_board()
user_guess()
win_condition = check_win(counter)
print('secret_word: {}, correct: {}, incorrect: {}, counter: {}, win_condition: {}'.format(
secret_word, correct, incorrect, counter, win_condition))
if win_condition == 'loss':
print("You lose!")
break
elif win_condition == 'win':
print("You win!")
这是一个带有此输出的示例游戏:
Guess a letter or word: a
secret_word: ZEROES, correct: [], incorrect: ['A'], counter: 0, win_condition: no win
_ _ _ _ _ _ *** MISSES ***
A
Guess a letter or word: e
secret_word: ZEROES, correct: ['E'], incorrect: ['A'], counter: 0, win_condition: no win
_ E _ _ E _ *** MISSES ***
A
Guess a letter or word: n
secret_word: ZEROES, correct: ['E'], incorrect: ['A', 'N'], counter: 0, win_condition: no win
_ E _ _ E _ *** MISSES ***
A N
Guess a letter or word: t
secret_word: ZEROES, correct: ['E'], incorrect: ['A', 'N', 'T'], counter: 0, win_condition: no win
_ E _ _ E _ *** MISSES ***
A N T
Guess a letter or word: zeroes
secret_word: ZEROES, correct: ['E', 'ZEROES'], incorrect: ['A', 'N', 'T'], counter: 0, win_condition: no win
_ E _ _ E _ *** MISSES ***
A N T
Guess a letter or word: test
secret_word: ZEROES, correct: ['E', 'ZEROES'], incorrect: ['A', 'N', 'T'], counter: 0, win_condition: no win
_ E _ _ E _ *** MISSES ***
A N T
我们可以直接看到一些问题。
counter
在每次猜测后都没有增加correct
列表而不是单个字母counter
没有改变因此,需要解决一些问题:
user_guess
(计数器)的返回值并将其分配给您的全局counter
变量 - 由于范围,这两个变量是单独的变量。您也可以将global counter
放入user_guess
函数correct.append(guess)
应更改为单独附加每个字母尝试进行这些更改并再次测试。如果您仍然遇到问题,请添加一些打印报表,看看是否能找到问题。