Skip to content
    geeksforgeeks
    • Interview Prep
      • DSA
      • Interview Corner
      • Aptitude & Reasoning
      • Practice Coding Problems
      • All Courses
    • Tutorials
      • Python
      • Java
      • ML & Data Science
      • Programming Languages
      • Web Development
      • CS Subjects
      • DevOps
      • Software and Tools
      • School Learning
    • Tracks
      • Languages
        • Python
        • C
        • C++
        • Java
        • Advanced Java
        • SQL
        • JavaScript
        • C#
      • Interview Preparation
        • GfG 160
        • GfG 360
        • System Design
        • Core Subjects
        • Interview Questions
        • Interview Puzzles
        • Aptitude and Reasoning
        • Product Management
        • Computer Organisation and Architecture
      • Data Science
        • Python
        • Data Analytics
        • Complete Data Science
        • Gen AI
        • Agentic AI
      • Dev Skills
        • Full-Stack Web Dev
        • DevOps
        • Software Testing
        • CyberSecurity
        • NextJS
        • Git
      • Tools
        • Computer Fundamentals
        • AI Tools
        • MS Excel & Google Sheets
        • MS Word & Google Docs
      • Maths
        • Maths For Computer Science
        • Engineering Mathematics
        • School Maths
    • Python Tutorial
    • Data Types
    • Interview Questions
    • Examples
    • Quizzes
    • DSA Python
    • Data Science
    • NumPy
    • Pandas
    • Practice
    • Django
    • Flask
    • Projects
    Open In App

    Intermediate Coding Problems in Python

    Last Updated : 12 Jul, 2025
    Comments
    Improve
    Suggest changes
    3 Likes
    Like
    Report

    Python, being a very dynamic and versatile programming language, is used in almost every field. From software development to machine learning, it covers them all. This article will focus on some interesting coding problems which can be used to sharpen our skills a bit more and at the same time, have fun solving this list of specially curated problems. Although this article will focus on solving these problems using Python, one can feel free to use any other language of their choice. So let's head right into it!

    Infinite Monkey Theorem

    The theorem states that a monkey hitting keys at random on a typewriter keyboard for an infinite amount of time will almost surely type a given text, such as the complete works of William Shakespeare. Well, suppose we replace a monkey with a Python function. How long would it take for a Python function to generate just one sentence? The sentence we will go for is: "a computer science portal for geeks". 
    The way we will simulate this is to write a function that generates a string that is 35 characters long by choosing random letters from the 26 letters in the alphabet plus space. We will write another function that will score each generated string by comparing the randomly generated string to the goal. A third function will repeatedly call generate and score, then if 100% of the letters are correct we are done. If the letters are not correct then we will generate a whole new string. To make it easier to follow, our program should keep track of the best string generated so far.

    Example: 

    Python
    import random 
      
      
    # function to generate  
    # a random string  
    def generateOne(strlen):  
          
        # string with all the alphabets 
        # and a space 
        alphabet = "abcdefghijklmnopqrstuvwxyz " 
        res ="" 
          
        for i in range(strlen): 
            res+= alphabet[random.randrange(27)] 
              
        return res 
      
    # function to determine the  
    # score of the generated string 
    def score(goal, testString):  
        numSame = 0
          
        for i in range(len(goal)): 
            if goal[i] == testString[i]: 
                numSame+= 1
                  
        return numSame / len(goal) 
      
    # main function to call the previous 
    # two functions until the goal is achieved 
    def main():  
        goalString = "a computer science portal for geeks"
        newString = generateOne(35) 
        best = 0
        newScore = score(goalString, newString) 
          
        while newScore<1: 
            if newScore>best: 
                print(newString) 
                best = newScore 
            newString = generateOne(35) 
            newScore = score(goalString, newString) 
      
    # Driver code 
    main() 
    

    Output:

    pxwvkdfwpbzneycy rifcrnczxqtsfowgjm
    wfgytnakffjty ggfy trylljfhurazyxow
    docujzolvswarzqszridmejyluhwviujlkj
    qbtvqanrbwsximmnlhjgkaacufhskiooxm
    w jnlhvvinzrlimtesllsroqqqf wwteela
    mjcevludro yoigewqudxjsad bxrl qnlv
    f pomksbzrjizegcjwyoqftjz wwx ges

    Here, we wrote three functions. One will generate a random string using the 26 characters of the alphabet and space. The second function will then score the generated string by comparing each letter of it with the goalString. The third function will repeatedly call the first two functions until the task is completed. It will also take note of the best string generated so far by comparing their scores. The one with the highest score will be the best one. Finally, we run this program in our IDE and see it work. 

    The substring dilemma

    This is a really interesting program as it generates some really funny outputs. It is also a healthy practice problem for beginners who want to understand the "string" type more clearly. Let's look into the problem.
    Given a string, find a substring based on the following conditions: 

    • The substring must be the longest one of all the possible substring in the given string. 
    • There must not be any repeating characters in the substring. 
    • If there is more than one substring satisfying the above two conditions, then print the substring which occurs first. 
    • If there is no substring satisfying all the aforementioned conditions then print -1. 

    Although there can be many methods of approach to this problem, we will look at the most basic one.

    Example: 

    Python
    def test_1(string =""): 
          
        # initializing the substring 
        substring = ""  
        testList = [] 
        initial = 0
          
        for char in string: 
              
            for i in range(initial, len(string)): 
                substring+= string[i] 
                  
                # checking conditions 
                if substring.count(string[i])>1: 
                    testList.append(substring[:-1]) 
                    initial+= 1
                    substring = "" 
                    break
        maxi ="" 
          
        for word in testList: 
              
            if len(word)>len(maxi): 
                maxi = word 
                  
        if len(maxi)<3: 
            return "-1"
        else: 
            return maxi 
          
    # Driver code 
    print(test_1("character")) 
    print(test_1("standfan")) 
    print(test_1("class")) 
    

    Here, we write a single function that will carry out the entire task. First it will initialize variables called substring and testList to store the substring and a list of possible outputs respectively. Then it will loop over the entire string provided and break every time it finds a repetition and appends that word to testList. Finally, the longest word out of the possible outputs is returned.

    Output: 

    racte
    standf
    class

    Mastermind

    A low-level implementation of the classic game "Mastermind". We need to write a program that generates a four-digit random code and the user needs to guess the code in 10 tries or less. If any digit out of the guessed four-digit code is wrong, the computer should print out "B". If the digit is correct but at the wrong place, the computer should print "Y". If both the digit and position is correct, the computer should print "R". Example:

    mastermind-python

    Example: 

    Python
    import random 
      
      
    # generates a four-digit code 
    def gen_code():  
        set_code = [] 
          
        for i in range(4): 
            val = random.randint(0, 9) 
            set_code.append(val) 
              
        return set_code 
          
    # asks for input from the user 
    def input_code():  
        code = input("Enter your four digit guess code: ") 
        return code 
      
      
    # plays the game 
    def mastermind():  
          
        genCode = gen_code() 
        i = 0
          
        while i < 10: 
            result = "" 
            inputCode = [int(c) for c in input_code()] 
              
            if len(inputCode) != 4: 
                print("Enter only 4 digit number") 
                continue
              
            if inputCode == genCode: 
                 print("You guessed it !", genCode) 
                 break
                  
            for element in inputCode: 
                  
                if element in genCode: 
                      
                    if inputCode.index(element) == genCode.index(element): 
                        result+="R"
                    else: 
                        result+="Y"
                else: 
                    result+="B"
            print(result) 
              
            i += 1
        else:     
            print("You ran out of trys !", genCode)     
              
              
    # Driver Code 
    mastermind() 
    

    First, we write a function to generate a random four-digit code using Python's random module. Next, we define a function that asks for user input. Finally, we write a function that compares the generated code to the guessed code and gives appropriate results. 

    Direction Catastrophe

    A very simple problem with many different solutions, but the main aim is to solve it in the most efficient way. A man was given directions to go from point A to point B. The directions were: "SOUTH", "NORTH", "WEST", "EAST". Clearly "NORTH" and "SOUTH" are opposite, "WEST" and "EAST" too. Going to one direction and coming back in the opposite direction is a waste of time and energy. So, we need to help the man by writing a program that will eliminate the useless steps and will contain only the necessary directions. 
    For example: The directions ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"] should be reduced to ["WEST"]. This is because going "NORTH" and then immediately "SOUTH" means coming back to the same place. So we cancel them and we have ["SOUTH", "EAST", "WEST", "NORTH", "WEST"]. Next, we go "SOUTH", take "EAST" and then immediately take "WEST", which again means coming back to the same point. Hence we cancel "EAST" and "WEST" to giving us ["SOUTH", "NORTH", "WEST"]. It's clear that "SOUTH" and "NORTH" are opposites hence canceled and finally we are left with ["WEST"].

    Example: 

    Python
    def reduce_dir(directions):
    
        # Define opposites
        opposite = {
            "NORTH": "SOUTH",
            "SOUTH": "NORTH",
            "EAST":  "WEST",
            "WEST":  "EAST"
        }
        
        stack = []
        
        for d in directions:
            if stack and opposite[d] == stack[-1]:
              
                # If current direction is opposite
                # to last one in the stack, remove last one
                stack.pop()
            else:
              
                # Otherwise, add current direction to stack
                stack.append(d)
        
        return stack
    
    directions = ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]
    res = reduce_dir(directions)
    print(res)
    

    Output
    ['WEST']
    

    In the above solution, The idea is to iterate through the list of directions and use the stack to keep track of the valid directions. Whenever you encounter a direction that is opposite to the one at the top of the stack, we remove (pop) the top direction from the stack since they cancel each other out. Otherwise, we add (push) the current direction to the stack.

    Comparing arrays

    This problem helps one to understand the key concepts of an array(list) in Python. Two arrays are said to be the same if they contain the same elements and in the same order. However, in this problem, we will compare two arrays to see if they are same, but with a slight twist. Here, two arrays are the same if the elements of one array are squares of elements of other arrays and regardless of the order. Consider two arrays a and b.

    a = [121, 144, 19, 161, 19, 144, 19, 11] 
    b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]

    Here b can be written as: 

    b = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]

    which is a square of every element of a. Hence, they are same. If a or b are None, our program should written False

    Example: 

    Python
    # function to compare the arrays 
    def comp(array1, array2): 
          
        # checking if any array is None 
        if array1 is None or array2 is None:  
            return False
          
        # checking if any of the array  
        # is a square of the other 
        if (sorted(array1) == sorted([i ** 2 for i in array2])) or (sorted(array2) == sorted([i ** 2 for i in array1])):  
            return True
          
        return False
      
    # Driver Code 
    comp([1,2,3,4], [1,4,9,16]) 
    

    Output:

    True
    Create Quiz

    A

    agarwalkeshav8399
    Improve

    A

    agarwalkeshav8399
    Improve
    Article Tags :
    • Python
    • Python Programs
    • Python-Quizzes
    • python-basics

    Explore

      Python Fundamentals

      Python Introduction

      2 min read

      Input and Output in Python

      4 min read

      Python Variables

      4 min read

      Python Operators

      4 min read

      Python Keywords

      2 min read

      Python Data Types

      8 min read

      Conditional Statements in Python

      3 min read

      Loops in Python - For, While and Nested Loops

      5 min read

      Python Functions

      5 min read

      Recursion in Python

      4 min read

      Python Lambda Functions

      5 min read

      Python Data Structures

      Python String

      5 min read

      Python Lists

      4 min read

      Python Tuples

      4 min read

      Python Dictionary

      3 min read

      Python Sets

      6 min read

      Python Arrays

      7 min read

      List Comprehension in Python

      4 min read

      Advanced Python

      Python OOP Concepts

      11 min read

      Python Exception Handling

      5 min read

      File Handling in Python

      4 min read

      Python Database Tutorial

      4 min read

      Python MongoDB Tutorial

      3 min read

      Python MySQL

      9 min read

      Python Packages

      10 min read

      Python Modules

      3 min read

      Python DSA Libraries

      15 min read

      List of Python GUI Library and Packages

      3 min read

      Data Science with Python

      NumPy Tutorial - Python Library

      3 min read

      Pandas Tutorial

      4 min read

      Matplotlib Tutorial

      5 min read

      Python Seaborn Tutorial

      3 min read

      StatsModel Library - Tutorial

      3 min read

      Learning Model Building in Scikit-learn

      6 min read

      TensorFlow Tutorial

      2 min read

      PyTorch Tutorial

      6 min read

      Web Development with Python

      Flask Tutorial

      8 min read

      Django Tutorial | Learn Django Framework

      7 min read

      Django ORM - Inserting, Updating & Deleting Data

      4 min read

      Templating With Jinja2 in Flask

      6 min read

      Django Templates

      5 min read

      Build a REST API using Flask - Python

      3 min read

      Building a Simple API with Django REST Framework

      3 min read

      Python Practice

      Python Quiz

      1 min read

      Python Coding Practice

      1 min read

      Python Interview Questions and Answers

      15+ min read
    top_of_element && top_of_screen < bottom_of_element) || (bottom_of_screen > articleRecommendedTop && top_of_screen < articleRecommendedBottom) || (top_of_screen > articleRecommendedBottom)) { if (!isfollowingApiCall) { isfollowingApiCall = true; setTimeout(function(){ if (loginData && loginData.isLoggedIn) { if (loginData.userName !== $('#followAuthor').val()) { is_following(); } else { $('.profileCard-profile-picture').css('background-color', '#E7E7E7'); } } else { $('.follow-btn').removeClass('hideIt'); } }, 3000); } } }); } $(".accordion-header").click(function() { var arrowIcon = $(this).find('.bottom-arrow-icon'); arrowIcon.toggleClass('rotate180'); }); }); window.isReportArticle = false; function report_article(){ if (!loginData || !loginData.isLoggedIn) { const loginModalButton = $('.login-modal-btn') if (loginModalButton.length) { loginModalButton.click(); } return; } if(!window.isReportArticle){ //to add loader $('.report-loader').addClass('spinner'); jQuery('#report_modal_content').load(gfgSiteUrl+'wp-content/themes/iconic-one/report-modal.php', { PRACTICE_API_URL: practiceAPIURL, PRACTICE_URL:practiceURL },function(responseTxt, statusTxt, xhr){ if(statusTxt == "error"){ alert("Error: " + xhr.status + ": " + xhr.statusText); } }); }else{ window.scrollTo({ top: 0, behavior: 'smooth' }); $("#report_modal_content").show(); } } function closeShareModal() { const shareOption = document.querySelector('[data-gfg-action="share-article"]'); shareOption.classList.remove("hover_share_menu"); let shareModal = document.querySelector(".hover__share-modal-container"); shareModal && shareModal.remove(); } function openShareModal() { closeShareModal(); // Remove existing modal if any let shareModal = document.querySelector(".three_dot_dropdown_share"); shareModal.appendChild(Object.assign(document.createElement("div"), { className: "hover__share-modal-container" })); document.querySelector(".hover__share-modal-container").append( Object.assign(document.createElement('div'), { className: "share__modal" }), ); document.querySelector(".share__modal").append(Object.assign(document.createElement('h1'), { className: "share__modal-heading" }, { textContent: "Share to" })); const socialOptions = ["LinkedIn", "WhatsApp","Twitter", "Copy Link"]; socialOptions.forEach((socialOption) => { const socialContainer = Object.assign(document.createElement('div'), { className: "social__container" }); const icon = Object.assign(document.createElement("div"), { className: `share__icon share__${socialOption.split(" ").join("")}-icon` }); const socialText = Object.assign(document.createElement("span"), { className: "share__option-text" }, { textContent: `${socialOption}` }); const shareLink = (socialOption === "Copy Link") ? Object.assign(document.createElement('div'), { role: "button", className: "link-container CopyLink" }) : Object.assign(document.createElement('a'), { className: "link-container" }); if (socialOption === "LinkedIn") { shareLink.setAttribute('href', `https://www.linkedin.com/sharing/share-offsite/?url=${window.location.href}`); shareLink.setAttribute('target', '_blank'); } if (socialOption === "WhatsApp") { shareLink.setAttribute('href', `https://api.whatsapp.com/send?text=${window.location.href}`); shareLink.setAttribute('target', "_blank"); } if (socialOption === "Twitter") { shareLink.setAttribute('href', `https://twitter.com/intent/tweet?url=${window.location.href}`); shareLink.setAttribute('target', "_blank"); } shareLink.append(icon, socialText); socialContainer.append(shareLink); document.querySelector(".share__modal").appendChild(socialContainer); //adding copy url functionality if(socialOption === "Copy Link") { shareLink.addEventListener("click", function() { var tempInput = document.createElement("input"); tempInput.value = window.location.href; document.body.appendChild(tempInput); tempInput.select(); tempInput.setSelectionRange(0, 99999); // For mobile devices document.execCommand('copy'); document.body.removeChild(tempInput); this.querySelector(".share__option-text").textContent = "Copied" }) } }); // document.querySelector(".hover__share-modal-container").addEventListener("mouseover", () => document.querySelector('[data-gfg-action="share-article"]').classList.add("hover_share_menu")); } function toggleLikeElementVisibility(selector, show) { document.querySelector(`.${selector}`).style.display = show ? "block" : "none"; } function closeKebabMenu(){ document.getElementById("myDropdown").classList.toggle("show"); }
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Campus Training Program
  • Explore
  • POTD
  • Job-A-Thon
  • Blogs
  • Nation Skill Up
  • Tutorials
  • Programming Languages
  • DSA
  • Web Technology
  • AI, ML & Data Science
  • DevOps
  • CS Core Subjects
  • Interview Preparation
  • Software and Tools
  • Courses
  • ML and Data Science
  • DSA and Placements
  • Web Development
  • Programming Languages
  • DevOps & Cloud
  • GATE
  • Trending Technologies
  • Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
  • Preparation Corner
  • Interview Corner
  • Aptitude
  • Puzzles
  • GfG 160
  • System Design
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.
See More

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences