Signup/Sign In
PUBLISHED ON: AUGUST 18, 2021

Python Program to generate random strings until a given string is generated

In this tutorial, you will learn to write a program where we have to generate random strings until a given string is generated in Python. We will be generating a random combination of letters and numbers until the desired string is printed.

A string can have letters in both uppercase and lowercase, numbers, special symbols, and punctuations so we have to consider these constraints when creating random sequences.

Look at the examples to understand the input and output format.

Input: "abc"

Output:

zL6
nWD
.

.

.

abc
Target matched after 141 iterations

Input: "aa"

Output:

EO

.

.

4a
aa
Target matched after 15 iterations

Approach For Creating Program

To solve this problem, we will take into consideration that the string is made up of ASCII characters. We will be using some common string operations which will define the constraints of a string.

In a variable, we will store all the possible characters which the string can have by combining values of some string constants in Python.

We will combine string.ascii_lowercase, string.ascii_uppercase, string.digits and a string constant containing punctuations ( . , ! ? ; : ) to get the possible characters.

Then we have to randomly generate strings which will be done using random() function in Python. It is a built-in function that returns random values.

We will use two loops in our program, one to show all the possible combinations that can be provided by the random function and the other which matches the random strings to the given string. If both the strings match we will stop the loop.

Look at the algorithm to understand the working of the program.

Algorithm

Step 1- Import modules in the program

Step 2- Declare a variable that will have all the possible ASCII characters

Step 3- Declare string which has to be generated

Step 4- Generate random strings from the variable which has all possible ASCII values

Step 5- Declare a boolean variable that will be used to break out of the loop, set its value to False

Step 6- Run another loop to print the generated random strings

Step 7- Run a loop till the boolean variable is true, to match the random string to the string which has to be generated

Step 8- If the required string is generated update the boolean value to false to stop the loop

Step 9- Else, move to the next iteration

Step 10- Use time.sleep(0.1) after the string is matched, to stops the execution of the current thread

Step 11- Print the iteration after which the required string has been generated

Python Program

To use string operations, random() method, and delay() method we will have to import string, random, and time modules in the program.

# generate random strings
import string
import random
import time
  
# all possible characters including lowercase, uppercase and punctuations
possibleChar = string.ascii_lowercase + string.digits + string.ascii_uppercase + ' ., !?;:'
  
# string to be generated
t = "test"
  
attemptThis = ''.join(random.choice(possibleChar) for i in range(len(t)))
attemptNext = ''
  
done= False
iteration = 0
  
# Iterate while done is false
while done == False:
    print(attemptThis)
      
    attemptNext = ''
    done = True
      
    # if matches with string 
    # change index
    for i in range(len(t)):
        if attemptThis[i] != t[i]:
            done = False
            attemptNext += random.choice(possibleChar)
        else:
            attemptNext += t[i]
              
    # increase iteration
    iteration = iteration + 1
    attemptThis = attemptNext
    time.sleep(0.1)

print("Target matched after ",iteration," iterations")


kAc5
ohbj
.
.
.
test
Target matched after 194 iterations

Conclusion

In this tutorial, we have seen how to generate random strings until a required string is generated. We have discussed how to use the common string operations and random() function in our program.



About the author:
Nikita Pandey is a talented author and expert in programming languages such as C, C++, and Java. Her writing is informative, engaging, and offers practical insights and tips for programmers at all levels.