I'm starting to learn Python as it seems to be adopted by many companies that 
I've been looking to apply to. I used the book Learning Phython to get the 
basics of the language and many of the gotcha's. I think I know enough of the 
basic features of the language to start playing around and can understand most 
code I've seen so far by looking at some of the posts here.

 

The one worry I have is not coding things the Phython way as I've been a Visual 
Basic programmer for so long and a C++ programmer before that. So would like to 
have people look at a simplistic class (shuffles lists of objects wrote it for 
shuffling cards but with Phython could be used for any "list" type object) I 
wrote to give me some feedback on the style of it.

 

Any feedback is appreciated.

 

Thanks,

Brian
import random

class shuffler(object):
    def __init__(self):
        self.rgen = random.Random()
    def shuffle(self, inpile1, inpile2):
        """Function that shuffles two list of items."""
        if self.rgen.randint(0,1):  #randomly decide which pile is shuffled 
down first
            (pile1,pile2)=(inpile1,inpile2)
        else:
            (pile1,pile2)=(inpile2,inpile1)
        pile1c = len(pile1)
        pile2c = len(pile2)
        rpile = pile1[0:0] #get blank copy of the passed in object types. 
Should allow user defined list type objects to work as well
        while pile1c and pile2c:    #while there are still items in both piles 
execute following logic
            i = self.rgen.randint(1,4)  #to allow for human error get random 
offset of items to shuffle
            if i > pile1c:  #ensure we don't go out of bounds for the pile
                i = pile1c
            for x in range(0,i):    #append cards to the output pile and remove 
from shuffle pile
                rpile.append(pile1.pop(0))
                pile1c -= 1
            i = self.rgen.randint(1,4)  #to allow for human error get random 
offset of items to shuffle
            if i > pile2c:  #ensure we don't go out of bounds for the pile
                i = pile2c
            for x in range(0,i):    #append cards to the output pile and remove 
from shuffle pile
                rpile.append(pile2.pop(0))
                pile2c -= 1
        #check for which pile has left over items if any do
        if pile1c:
            rpile.extend(pile1)
        elif pile2c:
            rpile.extend(pile2)
        return rpile
    def shuffledeck(self, deck):
        """Function that shuffles a list type object"""
        i = len(deck) #get length of the deck object to shuffle
        cut = (i // 2) + self.rgen.choice(range(-4,5)) #find half way point of 
deck +/- human error factor
        pile1 = deck[0:cut]
        pile2 = deck[cut:]
        return self.shuffle(pile1,pile2)

if __name__ == '__main__':
    myshuffle = shuffler()
    deck = range(1,53)
    print deck
    for i in range(1,5):
        deck = myshuffle.shuffledeck(deck)
    print deck

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to