2012-08-18 4 views
3

Я изучаю Python через книгу и интернет. Я пытаюсь сохранить оценку игры в отдельном классе. Чтобы проверить мою идею, я построил простой пример. По некоторым причинам это выглядит слишком сложно. Есть ли более простой/лучший/более Pythonic способ сделать это?python: использование класса для отслеживания данных, используемых другим классом

Мой код выглядит следующим образом:

import os 

class FOO(): 
    def __init__(self): 
     pass 

    def account(self, begin, change): 
     end = float(begin) + float(change) 
     return (change, end)   

class GAME(): 
    def __init_(self): 
     pass 

    def play(self, end, game_start): 
     os.system("clear") 
     self.foo = FOO() 

     print "What is the delta?" 
     change = raw_input('> ') 

     if game_start == 0: 
      print "What is the start?" 
      begin = raw_input('> ') 
     else: 
      begin = end 

     change, end = self.foo.account(begin, change) 
     print "change = %r" % change 
     print "end = %r" % end 

     print "Hit enter to continue." 
     raw_input('> ') 

     self.play_again(end, game_start)  

    def play_again(self, end, game_start): 

     print "Would you like to play again?" 
     a = raw_input('> ') 
     if a == 'yes': 
      game_start = 1 
      self.play(end, game_start) 
     else: 
      print "no" 
      exit(0) 

game = GAME() 
game.play(0, 0) 

ответ

1

Вот как я бы форматировать Ваш код:

import os 

class Game(object): 
    def play(self, end, game_start=None): 
     os.system("clear") 

     change = input('What is the delta? ') 

     # Shorthand for begin = game_start if game_start else end 
     begin = game_start or end 
     end = float(begin + change) 

     print "change = {}".format(change) 
     print "end = {}".format(end) 

     self.play_again(end, game_start)  

    def play_again(self, end, game_start): 
     raw_input('Hit enter to continue.') 

     if raw_input('Would you like to play again? ').lower() in ['yes', 'y']: 
      self.play(end, game_start) 
     else: 
      exit(0) 

if __name__ == '__main__': 
    game = Game() 
    game.play(0, 0) 

И несколько советов:

  • Я бы не создать новый класс, который содержит только код для выполнения одной конкретной задачи. Если класс не принимает аргументы или не упрощает ваш код, не создавайте его. Однако ваш класс Game является исключением, так как вы, вероятно, добавили бы ему больше кода.
  • В Python классы написаны в CamelCase. Глобальные константы обычно записываются в UPPERCASE.
  • raw_input() возвращает строку. input() возвращает строку, вычисленную в объект Python.
+0

Большое спасибо! Много полезной информации! – dwstein

+0

Нет проблем. Я действительно не тестировал код, поэтому он может не работать, но это, по крайней мере, то, что я хотел бы сделать с ним. – Blender

+0

, кстати, класс, который я использовал бы, чтобы сохранить оценку, будет иметь больше методов, и он будет использоваться как пара других классов. – dwstein

Смежные вопросы