2012-05-08 93 views
3

好了,所以我一直在学习了不少的Python在过去的几天里,两个或三个,我决定把我的知识和创造的东西简单,但那种娱乐性,所以我创建了一个猜谜游戏。这个Python程序可以被简化或写得更好吗?

经过大约30分钟的创建这个程序,并让它工作100%,我想知道是否有什么我可以做得更好等,我想确保我从任何错误中学习,所以我很感激它!

所以这里是代码:

import random 

def guessingGame(): 

    randomNumber = random.randrange(1, 10) 
    yourGuess = int(input("Take A Guess, Numbers 1 Through 10: ")) 

    while yourGuess != randomNumber: 
     print("DOH! You Did Not Guess Right, TRY AGAIN") 
     yourGuess = int(input("Take A Guess, Numbers 1 Through 10: ")) 
    else: 
     if yourGuess == randomNumber: 
      print("Congrats You Beat The Guess Game!") 

playGame = input("Would You Like To Play The Guessing Game (Y/N): ") 

if playGame == "Y" or playGame == "y": 
    print("Okay Lets Play!") 
    guessingGame() 

elif playGame == "N" or playGame == "n": 
    print("Okay Thanks Anyways!") 
    break 

再次感谢!

+2

这个问题可能属于在代码审查 –

+0

'randrange(1,10)'会给你的号码'0-9'。这里请参阅[docs](http://docs.python.org/library/random.html#random.randrange)。你想要做的是'randrange(1,11)',或较明显的'randint(1,10)'' –

+0

一个循环外break'是一个语法错误 – wim

回答

4

而不是

if playGame == "Y" or playGame == "y": 
    print("Okay Lets Play!") 
    guessingGame() 

我挺喜欢

if playGame.lower() == "y": 
    # ... 

我甚至更好,如:

def quit(): 
    print("Okay Thanks Anyways!") 


actions = {"y": guessingGame} 
actions.get(playGame.lower(), quit)() 
1

我想你可以使用一个 “突破” 语句在while循环中,如

import random 

def guessingGame():  
    randomNumber = random.randrange(1, 10) 

    while True: 

     yourGuess = input("Take A Guess, Numbers 1 Through 10: ") 

     if !yourGuess.isdigit(): 
      print ("That's not a number!") 
     elif int(yourGuess) not in range(1,10): 
      print("I said between 1 and 10!") 
     elif int(yourGuess) != randomNumber: 
      print("DOH! You Did Not Guess Right, TRY AGAIN") 
     else: 
      break 

    print("Congrats You Beat The Guess Game!") 

playGame = input("Would You Like To Play The Guessing Game (Y/N): ") 

if playGame.lower() == "y": 
    print("Okay Lets Play!") 
    guessingGame() 

elif playGame.lower() == "n": 
    print("Okay Thanks Anyways!") 
    break 
2

有几件事情,我注意到:

  • 你应该处理这种情况的用户试图猜测的东西,看起来并不像一个数量的情况下,说,字母“A”,例如。
  • Python风格指南说优先使用lower_with_underscores而不是CamelCase的变量名称。
  • 线yourGuess = int(input("Take A Guess, Numbers 1 Through 10: "))是不必要的重复,参见下面的一种可能的方式重构的那部分。

常规清理:

import random 

def guessing_game(): 
    random_number = random.randint(1, 10) 
    assert random_number in range(1, 11) 
    your_guess = None 
    while your_guess != random_number: 
    try: 
     your_guess = int(input("Take A Guess, Numbers 1 Through 10: ")) 
    except ValueError: 
     print("That wasn't a number") 
     continue 

    if your_guess != random_number: 
     print("DOH! You Did Not Guess Right, TRY AGAIN") 
    else: 
     print("Congrats You Beat The Guess Game!") 
     break 

play_game = None 
while play_game not in ['y', 'n']: 
    play_game = input("Would You Like To Play The Guessing Game (Y/N): ").lower() 

if play_game == "y": 
    print("Okay Lets Play!") 
    guessing_game() 
else: 
    assert play_game == "n": 
    print("Okay Thanks Anyways!") 
+0

这里的一个缺点是,如果您输入一个非数字,它仍然会执行'your_guess!= random_number'检查并且打印出最后一个环绕/默认的“无”值的错误信息。将(不必要的)pass改成continue可能会更好,或者把其余的循环放到try语句的else中。 – Dougal

+0

是的,很好的捕获..我其实是意义继续,并写了一个无用的通过声明,而不是由于某种原因 – wim

2
from random import randint 

def getInt(prompt): 
    while True: 
     try: 
      return int(input(prompt)) 
     except ValueError: 
      print("That's no integer!") 

def play(): 
    secret = randint(1,10) 
    while True: 
     guess = getInt("Take a guess (1-10):") 
     if guess==secret: 
      print("Congrats, you beat The Guess Game!") 
      break 
     else: 
      print("D'oh! You guessed wrong. Try again!") 

def main(): 
    while True: 
     inp = input("Would you like to play The Guessing Game? (Y/N)").lower() 
     if inp=="y": 
      print("Okay, let's play!") 
      play() 
     elif inp=="n": 
      print("Alright. Thanks anyways!") 
      break 
     else: 
      print("You don't follow directions too good, eh?") 

if __name__=="__main__": 
    main() 
1

阅读命名约定Pep 8文档和编码的Python的风格。

import random 

def guessing_game(x=1, y=10): 
    """ 
    A simple number guessing game. 
    """ 
    while int(input("Take A Guess, Numbers 1 Through 10: ")) \ 
              != random.randrange(x, y): 
     print("DOH! You Did Not Guess Right, TRY AGAIN") 

    print("Congrats You Beat The Guess Game!") 

    if input("Would You Like To Play The Guessing Game (Y/N): ") == 'Y': 
     print("Okay Lets Play!") 
     guessing_game() 
    else: 
     print("Okay Thanks Anyways!") 

if __name__ == '__main__': 
    guessing_game(1, 10)