Hack Forums
[Python] Shuffle method? - Printable Version

+- Hack Forums (https://hackforums.net)
+-- Forum: Tech (https://hackforums.net/forumdisplay.php?fid=444)
+--- Forum: Coding (https://hackforums.net/forumdisplay.php?fid=151)
+---- Forum: Software Development (https://hackforums.net/forumdisplay.php?fid=118)
+---- Thread: [Python] Shuffle method? (/showthread.php?tid=5551546)



Shuffle method? - B0PS - Feb 14, 2017

Write a function named shuffle() that randomizes the order of a deck of 52 cards stored in a list. To achieve this, visit each element in the list and swap it with another random element in the list. You must write your own loop to shuffle the cards. You cannot make use of Python’s built-in shuffle function.

Any idea how to go about doing this I've been googling all day and have been messing around with stuff but so far nothing


* - captainspalding - Feb 14, 2017

You have some boilerplate code for this challenge?


* - B0PS - Feb 14, 2017

Code
#1.
def createDeck():
    deckComplete = [As, Ah, Ad, Ac, Ks, Kh, Kd, Kc, Js , Jh, Jd, Jc, Qs, Qh, Qd, Qc, Ts, Th, Td, Tc, 9s, 9h, 9d, 9c, 8s, 8h, 8d, 8c, 7s, 7h, 7d, 7c, 6s, 6h, 6d, 6c, 5s, 5h, 5d, 5c, 4s, 4h, 4d, 4c, 3s, 3h, 3d, 3c, 2s, 2h, 2d, 2c]
    return deckComplete
#2.
def shuffle():
    index = 0
    while index < len(deckcomplete):



* - Goodies - Feb 14, 2017

Well, it's not that hard:
PHP Code

<?php 
from random import SystemRandom
random 
= SystemRandom()

def shuffle(lst):
    
size = len(lst)
    for 
i in range(size):
        
r = random.randint(0, size - 1)
        
lst[r], lst[i] = lst[i], lst[r] 

Usage:
PHP Code

<?php 
Python 3.6.0 
(v3.6.0:41df79263a11, Dec 23 2016, 07:18:10) [MSC v.1900 32 bit (Intel)] on win32
Type 
"help", "copyright", "credits" or "license" for more information.
>>> 
from random import SystemRandom
>>> random = SystemRandom()
>>>
>>> 
def shuffle(lst):
...     
size = len(lst)
...     for 
i in range(size):
...         
r = random.randint(0, size - 1)
...         
lst[r], lst[i] = lst[i], lst[r]
...
>>> 
x = list(range(10))
>>> 
x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 
shuffle(x)
>>> 
x
[4, 9, 0, 7, 5, 2, 8, 3, 1, 6]
>>> 
shuffle(x)
>>> 
x
[7, 8, 9, 1, 3, 2, 0, 6, 5, 4]
>>> 



* - B0PS - Feb 14, 2017

Code
#1.
def createDeck():
    deckComplete = [As, Ah, Ad, Ac, Ks, Kh, Kd, Kc, Js , Jh, Jd, Jc, Qs, Qh, Qd, Qc, Ts, Th, Td, Tc, 9s, 9h, 9d, 9c, 8s, 8h, 8d, 8c, 7s, 7h, 7d, 7c, 6s, 6h, 6d, 6c, 5s, 5h, 5d, 5c, 4s, 4h, 4d, 4c, 3s, 3h, 3d, 3c, 2s, 2h, 2d, 2c]
    return deckComplete
#2.
from random import SystemRandom
random = SystemRandom()

def shuffle(deckComplete):
    size = len(deckComplete)
    for i in range(size):
        r = random.randint(0, size - 1)
        deckComplete[r], deckComplete[i] = deckComplete[i], deckComplete[r]
    return deckComplete

So would that possibly work? this is using python 3.6.0b3


* - Riԁdle - Feb 15, 2017

Here's my go probably not better than goodies.

PHP Code

<?php 
from random import randint

ordered_list 
= ["A", "B", "C", "D", "E", "F"]


def shuffle_deck(unshuffed_deck):
    
shuffled_deck = []
    for 
_ in unshuffed_deck:
        
shuffled_deck.append(unshuffed_deck[randint(0, len(unshuffed_deck) - 1)])
    return 
shuffled_deck

for _ in range(10):
    print(
shuffle_deck(ordered_list)) 

output:
Code
['E', 'B', 'C', 'C', 'E', 'B']
['C', 'D', 'B', 'D', 'D', 'B']
['D', 'E', 'E', 'B', 'B', 'D']
['B', 'E', 'D', 'B', 'E', 'F']
['D', 'B', 'D', 'B', 'E', 'E']
['B', 'B', 'E', 'D', 'F', 'A']
['D', 'D', 'A', 'C', 'B', 'A']
['C', 'E', 'A', 'C', 'B', 'B']
['B', 'C', 'A', 'F', 'B', 'B']
['A', 'B', 'B', 'B', 'A', 'C']