How to shuffle a word in Python
In this tutorial, we will learn how to shuffle a word in Python.
Problem
In this problem, we will give a string(word) as input. The compiler will also give a string as output. The output string contains the letters of the word in a randomly shuffled manner.
Example
Let us consider the word “CodeSpeedy”. After shuffling, we will get the result as “pCdodySeee”, “dyCeeSoepd”, “yeCpdedSoe”, etc.
Remember, the results are different because we are randomly shuffling the word. So each time we run the code we shall get a different output.
Algorithm: Shuffle a word in Python
To shuffle the words randomly, we shall use the randint function from the random module.
The steps involved are:
- Find out the length of the word using the len function and then save it to some variable(say n).
- Since the string is immutable, we shall store the characters of the string in a character array( say li ). Further operations will be done in that array.
- for ( i = 0 to n-2)
store the value of randint(i+1, n-1) at position variable(pos)
exchange li[i] and li[pos] - store the characters of the shuffled list in a string and return the string
The shuffle function
def shuffle(s): n = len(s) #n stores the length of the string li = list(s) #since string is immutable, #we make a list of the characters of the string for i in range(0,n-1): #i is iterated from 0 to n-2 pos = randint(i+1,n-1) #this function randint will produce a #random number ranging between i+1 and n-1 li[pos],li[i] = li[i],li[pos] #exchanging li[pos] and li[i] res = "" for i in range(n): res = res + li[i] #sequentially add the charters of the list #to the string return res
Full Python Code
from random import randint def shuffle(s): n = len(s) #n stores the length of the string li = list(s)#since string is immutable, #we make a list of the characters of the string for i in range(0,n-1): #i is iterated from 0 to n-2 pos = randint(i+1,n-1) #this function randint will produce a #random number ranging between i+1 and n-1 li[pos],li[i] = li[i],li[pos] #exchanging li[pos] and li[i] res = "" for i in range(n): res = res + li[i] #sequentially add the charters of the list #to the string return res print("Enter a word: ") s = str(input()) # taking a string input print(shuffle(s)) #calling the shuffle function
Input
Enter a word: CodeSpeedy
Output
oeCdpyedSe
There is a three-line version to this problem:
import random as r
a=input(“Enter a word”)
print(“”.join(r.sample(a,len(a))))