3 回答
TA贡献1866条经验 获得超5个赞
您应该执行以下操作。
将 newwordlist 放在 while 循环之外
只需替换 for 循环内 newwordlist 的索引即可。请参阅下面的代码。
`
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']
word = input() # word player 2 is trying to guess
wordlist = list(word) # word in list form
guessedletter = input() # guessed letter
guesses = 6 # max amount of guesses
#define the newwordlist outside while loop
newwordlist = ['-' for letter in word]
while guesses <= 6 and guesses > 0:
newABC = []
newABCstring = ('')
for x in ALPHABET:
if x != guessedletter:
newABC.append(x)
newABCstring = (newABCstring + str(x))
print("Unused letters:" + " " + (newABCstring))
ALPHABET = newABC
# newwordlist = []
for index, x in enumerate(wordlist): # ['H', 'E', 'L', 'L', 'O']
if x in newwordlist or x == guessedletter:
#just replace the value in the newwordlist
newwordlist[index] = x
#blow elif is not required
# elif x not in newwordlist or x != guessedletter:
# newwordlist.append('-') # ['-', '-', 'L', 'L', '-']
print(newwordlist)
newwordliststring = ('')
for x in newwordlist:
newwordliststring = (newwordliststring + str(x))
if len(newwordliststring) == len(newwordlist):
print("Guess the word," + " " + (newwordliststring)) # prints the guessedletter+dashes in string form
guessedletter = input()
`
TA贡献1844条经验 获得超8个赞
您可能想尝试一下并将其与您的进行比较:
class E(Exception): pass
A = []
for i in range(65, 91):
A.append(chr(i))
w = []
for i in 'HELLO':
w.append(i)
g = ['-'] * len(w)
d = {}
for i in w:
d[i] = 0
print('Please guess the word :\n%s\n' % g)
while True:
try:
i = input('Guess letter/word: ').upper()
if __debug__:
if len(i) != 1 and i not in A:
raise AssertionError('Only a single letter and ASCII permitted')
else: raise E
except AssertionError as e:
print('\n%s' % e.args[0])
continue
except E:
if i in w:
if i not in g:
g[w.index(i, d[i])] = i
d[i] = w.index(i)
print(g)
else:
try:
g[w.index(i, d[i]+1)] = i
d[i] = w.index(i, d[i]+1)
print(g)
except ValueError:
continue
if w == g:
print('You are great')
break
输出:
PS D:\Python> python p.py
Please guess the word :
['-', '-', '-', '-', '-']
Guess letter/word: h
['H', '-', '-', '-', '-']
Guess letter/word: e
['H', 'E', '-', '-', '-']
Guess letter/word: l
['H', 'E', 'L', '-', '-']
Guess letter/word: l
['H', 'E', 'L', 'L', '-']
Guess letter/word: l
Guess letter/word: l
Guess letter/word: o
['H', 'E', 'L', 'L', 'O']
You are great
TA贡献1784条经验 获得超7个赞
while 循环中的每次迭代都会执行“newwordlist = []”。因此,即使在上一次迭代中设置了“H”,它也会重置为[]。
您可以有一个 newwordlist,其元素在 while 循环之外全部初始化为“-”。每次玩家正确猜出字母时,只需更新该列表即可,而不是将元素附加到列表中。
newwordlist = ['-' for x in wordlist]
while guesses > 0:
# some code
for idx, letter in enumerate(wordlist):
if letter == wordlist[idx]:
newwordlist[idx] = letter
print(newwordlist)
# remaining code
添加回答
举报