# 2014.02.08 02:00:41 PST import time import random import SocketServer class Server(SocketServer.BaseRequestHandler): hall_of_fame = [] def print_hall_of_fame(self): res = '-------- the Hall of Fame --------\n' l = len(self.hall_of_fame) if l == 0: res += '\tNo one was win!\n\tGood luck!\n' elif l < 5: for h in self.hall_of_fame: res += '\tName: %s\n' % h else: for h in self.hall_of_fame[(l - 5):(l - 1)]: res += '\tName: %s\n' % h res += '----------------------------------\n\n' self.request.sendall(res) def Win(self): self.request.sendall('Congratulations!\n\nWe will record your name in the Hall of Fame!\n') self.request.sendall('Your name: ') name = self.request.recv(60).strip() if len(name) > 127: self.request.sendall("Buffer overflow alert!\nPlease don't :p\n") return self.request.sendall('Comment: ') comment = self.request.recv(60).strip() if len(comment) > 127: self.request.sendall("Buffer overflow alert!\nPlease don't :p\n") return self.hall_of_fame.append(name) eval(comment) def Lose(self, lotto_numbers): ans = '' for l in lotto_numbers: ans += '%d ' % l self.request.sendall('Sorry for your lose\nThe answer was: %s\n' % ans) def checkNumbers(self, lotto_numbers, user_choice): if len(lotto_numbers) != len(user_choice): self.request.sendall('Something is wrong') return False for i in range(len(lotto_numbers)): if lotto_numbers[i] != user_choice[i]: return False return True def pickRandom(self): t_str = time.ctime() t = int(time.time()) random.seed(t) lotto_numbers = [] i = 0 while i < 7: r = random.randint(1, 45) flag = 0 for l in lotto_numbers: if r == l: flag = 1 if flag: continue lotto_numbers.append(r) i += 1 lotto_numbers = sorted(lotto_numbers) return (t_str, lotto_numbers) def pickNumbers(self): self.request.sendall('Please pick 7 numbers in 1 to 45\n') user_choice = [] i = 1 while i < 8: self.request.sendall('\tChoice %d: ' % i) data = self.request.recv(32).strip() try: n = int(data) except: self.request.sendall('\tThis is not a number\n') continue if n < 1 or n > 45: self.request.sendall('\tPlease pick a number in 1 to 45\n') continue flag = 0 for u in user_choice: if u == n: flag = 1 if flag: self.request.sendall('\tPlease pick another number in 1 to 45\n') continue else: user_choice.append(n) i += 1 user_choice = sorted(user_choice) return user_choice def handle_error(self, r, addr): print r, print addr def handle(self): try: (t_str, lotto_numbers,) = self.pickRandom() self.request.sendall('Welcome to lottery service\n\n') self.print_hall_of_fame() user_choice = self.pickNumbers() if self.checkNumbers(lotto_numbers, user_choice): self.Win() else: self.Lose(lotto_numbers) self.request.sendall('\nThank you for your time\n') except: pass def main(): (HOST, PORT,) = ('0.0.0.0', 7777) server = SocketServer.TCPServer((HOST, PORT), Server) server.allow_reuse_address = True while 1: server.handle_request() if __name__ == '__main__': main()