所以到目前为止我的计划是这样的:
def update():
print word
counter = 0
blanks = len(word)*'-'
blank_list = list(blanks)
letter = raw_input('Please enter a single letter: ')
for index in range(len(word)):
if letter in word[index]:
blank_list[index] = letter
print ''.join(blank_list)
letter = raw_input('Please enter a single letter: ')
但是当我以错误的顺序输入正确的字母时,它会将其显示为不正确的猜测,即,我的一个单词是马,如果我输入了o它会显示-o ---,但是如果我输入了h,它会显示为None,因为当猜测不正确时,没有设置要做的参数。这适用于单词[index]中的字母或字母== word [index]的情况。 关于如何解决这个问题的任何建议?
答案 0 :(得分:1)
在这里,您可以通过查看确切的索引来强制执行订单:
if letter == word[index]
您想问if letter in word
。您还可以使用word.index(letter)
找到字母的确切索引(小心重复的字母)。
答案 1 :(得分:0)
我认为问题在于你有一个基于索引的for循环所以当你输入一个正确的答案时,下一个正确的字母必须在后面的索引中,因为你已经传递了以前的索引。对于一个刽子手程序,我可能会使用while循环执行某些操作并使用与您相同的计数,如果计数超过您的限制,则打破while循环并让您单词列出字母。然后检查您的猜测信是否在您的字母列表中。
所以,如果您的猜测限制为5,那么请执行
之类的操作将单词分成列表 将猜测计数设为0
而guess_count< 5: 如果word_list中的字母: #UPDATE 其他: guess_count + = 1
答案 2 :(得分:0)
问题是您的猜测是基于索引编制的。一旦你猜出一封信,你就不能猜到一个。
运行代码:
>>> update('mouse')
mouse
Please enter a single letter: m
m----
Please enter a single letter: u
m-u--
Please enter a single letter: o
>>>
退出是因为'u'
的放置位于'o'
之后。而是将代码更改为:
def update(word):
found = False
guesses_left = 3
blank_list = list(len(word)*'_')
while guesses_left > 0:
letter = raw_input('Enter your letter: ')
for k in range(len(word)):
if word[k] == letter and letter not in blank_list:
blank_list[k] = letter
found = True
if found == False:
guesses_left-=1
else:
found = False
print ''.join(blank_list)
if '_' not in blank_list:
break
if guesses_left < 1:
print 'You lost!'
else:
print 'You won!'
运行我的代码:
>>> update('mouse')
Enter your letter: m
m____
Enter your letter: s
m__s_
Enter your letter: u
m_us_
Enter your letter: o
mous_
Enter your letter: e
mouse
You won!
>>>