After a quick glance I see there are a few blocks that are repeated. They can be put into functions instead to reduce repetition and make it more readable. The sections are: 1) if(ip[0] == 0): if( self.player_card[0] == 'A of spades' or self.player_card[0] == 'A of hearts' or self.player_card[0] == 'A of diamonds' or self.player_card[0] == 'A of clubs' or self.player_card[1] == 'A of spades' or self.player_card[1] == 'A of hearts' or self.player_card[1] == 'A of diamonds' or self.player_card[1] == 'A of clubs'): values['A']=1 ip[0] = 1 2) print "Yipee ! Its BlackJack" player_bank.add_money((gamebet2)*2.5) gamebet1 = player_bank.get_money() print "Your Balance is : %s "%(gamebet1) time.sleep(7) continue 3) print "Yipee ! You Win !" player_bank.add_money((gamebet2)*2) gamebet1 = player_bank.get_money() print "Your Balance is : %s "%(gamebet1) time.sleep(7) 4) print '\nDealers Cards are :' print self.dealer_card print '\nYour Cards are : ' print self.player_card Also making the dealer and player into their own classes would at least help with readability and logically grouping your methods, since their methods are both currently in the Black_Jack_Gameplay class. With their similarities you could even find a way to use one class as both, or make one a parent class and one a child class (so you can practice some inheritance).