<p>问题是在Cities()、Countries()等中的print语句被调用之后调用<code>os.system('cls')</code>。让我们看看你的代码结构:</p>
<pre><code>print ('Welcome to Hangman! By Aaron Taylor')
print (HANGMANPICS[6])
words = Welcome()
MISSEDLETTERS = ''
CORRECTLETTERS = ''
SECRETWORD = getRandomword(words)
done = False
while True:
Display(HANGMANPICS,MISSEDLETTERS,CORRECTLETTERS,SECRETWORD)
</code></pre>
<p>当<code>Welcome()</code>存在时,它调用适当的函数,比如<code>Cities()</code></p>
^{pr2}$
<p>这个print语句被调用并打印出来,但几乎立即执行就会流入<code>while True</code>循环,该循环调用立即调用<code>os.system('cls')</code>的<code>Display()</code>,删除{<cd3>}内的打印。有道理吗?在</p>
<p>我认为最好的方法是将他们的选择存储在一个变量中,并在清除屏幕后让<code>Display()</code>打印正确的消息。但是,这将涉及到对代码的轻微重组。一种老套的方法是根据Welcome当前的返回值来获得他们的选择。以下是我对你的代码的破解,我认为它能满足你的需要:</p>
<pre><code>def Display(HANGMANPICS,MISSEDLETTERS,CORRECTLETTERS,SECRETWORD, CHOICE):
os.system('cls')
CHOICE()
print(HANGMANPICS[len(MISSEDLETTERS)])
print
print 'Missed letters:',
for letter in MISSEDLETTERS:
print letter,
print
blanks = '_' * len(SECRETWORD)
for i in range(len(SECRETWORD)):
if SECRETWORD[i] in CORRECTLETTERS:
blanks = blanks[:i] + SECRETWORD[i] + blanks[i+1:]
for letter in blanks:
print letter
print
def getGuess(alreadyguessed):
while True:
print 'Guess a letter'
guess = raw_input()
guess = guess.lower()
if len(guess) != 1:
print 'Please enter single letters'
elif guess in alreadyguessed:
print 'This letter has already been guessed, please guess again'
elif guess not in 'abcdefghijklmnopqrstuvwxyz':
print 'You did not guess a letter, please guess a letter'
else:
return guess
def playAgain():
print ('Do you wanna play again? (Yes or No)')
return raw_input().lower().startswith('y')
print ('Welcome to Hangman! By Aaron Taylor')
print (HANGMANPICS[6])
words = Welcome()
if words == ANIMALS:
CHOICE = Animals
elif words == CITIES:
CHOICE = Cities
elif words == COUNTRIES:
CHOICE = Countries
else:
CHOICE = Random
MISSEDLETTERS = ''
CORRECTLETTERS = ''
SECRETWORD = getRandomword(words)
done = False
while True:
Display(HANGMANPICS,MISSEDLETTERS,CORRECTLETTERS,SECRETWORD,CHOICE)
guess = getGuess(MISSEDLETTERS + CORRECTLETTERS)
</code></pre>