2012-11-22 39 views
-1

我做了一个小数猜测游戏,如果需要,我已经让它重新启动。 然而,它会重新开始并重新开始询问“myname”,我该如何使它回到它认为数字的那一点,并且记得我第一次的名字?转到while循环的某个部分

import random 
restart = '1' 
def main(): 
    guessestaken = 0 

    print ('Hello, what is your name?') 
    myname = raw_input() 


    number = random.randint(1, 50) 
    print ('Okay ' + myname + ', I am thinking of a number between 1 and 50. You have 5 guesses.') 

    while guessestaken < 5: 
     print ('Take a guess.') 
     guess = input() 
     guess = int(guess) 

     guessestaken = guessestaken + 1 

     if guess < number: 
      print ('Your guess is too low.') 

     if guess > number: 
      print ('Your guess is too high.') 

     if guess == number: 
      break 

    if guess == number: 
     guessestaken = str(guessestaken) 
     print ('Good job ' + myname + ', you got the correct answer in ' + guessestaken + ' guesses') 


    if guess != number: 
     number = str(number) 
     print ('Oh dear ' + myname + ', the number I was thinking of was ' + number + '.') 

while restart == '1': 
    main() 
    restart = raw_input('Would you like to try again? Press 1 for Yes, and 2 for No: ') 

此刻它再次要求我的名字。我的意思是,它是功能性的,只是令人讨厌。

感谢

+2

你为什么不多种功能拆分起来,每问一个问题,只是重复那些要重复? (例如,将名称分解为单独的函数,并且在while循环之前调用它) – poke

回答

1

你可以简单地在main()功能前移到

print ('Hello, what is your name?') 
myname = raw_input() 

,所以它只能运行一次。

您还可以在您的main()函数中使用raw_input()而不是input()

+0

他可能使用Python 3,在这种情况下,'input'将会很好。 – Junuxx

+0

@Junuxx:不,他不是。他在脚本的最后一行调用'raw_input()'。 –

+0

+1因为你的答案是第一位的。 – Junuxx

0

最简单的方法是询问main()函数以外的名称,然后将其传入每个游戏。你在技术上不必传递它(python仍然可以访问变量),但最好这样做。

def main(myname): 
    # Remove the name prompt from here 

... 

print ('Hello, what is your name?') 
myname = raw_input() 

while restart == '1': 
    main(myname) 
    restart = raw_input('Would you like to try again? Press 1 for Yes, and 2 for No: ') 
0

一个简单的解决将是初始化mynamemain,通过把myname = ''刚下restart = '1'。然后,只要求玩家的名字,如果他的名字是未知的,即:

if myname == '': 
    print ('Hello, what is your name?') 
    myname = raw_input()