{"id":117703,"date":"2026-05-12T18:10:03","date_gmt":"2026-05-12T12:40:03","guid":{"rendered":"https:\/\/www.mygreatlearning.com\/blog\/?page_id=117703"},"modified":"2026-05-12T17:57:36","modified_gmt":"2026-05-12T12:27:36","slug":"python-program-custom-range-generator","status":"publish","type":"page","link":"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/","title":{"rendered":"Python Program Custom Range Generator"},"content":{"rendered":"\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/codemirror\/5.65.16\/codemirror.min.css\" \/>\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/codemirror\/5.65.16\/theme\/eclipse.min.css\" \/>\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\">\n\n<style>\n    .py-custrange-wrapper {\n        --py-bg-app: #f9fafb;\n        --py-bg-panel: #ffffff;\n        --py-border: #e5e7eb;\n        --py-text-primary: #1f2937;\n        --py-text-secondary: #6b7280;\n        --py-primary-blue: #2563eb;\n        --py-primary-hover: #1d4ed8;\n        --py-header-height: 50px;\n        --py-footer-height: 60px;\n\n        font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n        background-color: var(--py-bg-app);\n        color: var(--py-text-primary);\n        width: 100%;\n        border: 1px solid var(--py-border);\n        box-sizing: border-box;\n        display: flex;\n        flex-direction: column;\n        min-height: 85vh;\n    }\n\n    .py-custrange-wrapper * { box-sizing: border-box; }\n\n    .py-custrange-top-nav {\n        display: flex; align-items: center; justify-content: space-between;\n        height: var(--py-header-height); padding: 0 20px;\n        background: var(--py-bg-panel); border-bottom: 1px solid var(--py-border); min-width: 100%;\n    }\n    .py-custrange-nav-title { font-weight: 600; color: var(--py-text-secondary); font-size: 14px; }\n\n    .py-custrange-ide-container {\n        display: flex; flex: 1; height: auto; min-width: 100%; background: white; overflow: hidden;\n    }\n\n    .py-custrange-left-pane {\n        width: 45%; border-right: 1px solid var(--py-border);\n        background: var(--py-bg-panel); display: flex; flex-direction: column;\n    }\n\n    .py-custrange-tabs-header {\n        height: var(--py-header-height); border-bottom: 1px solid var(--py-border);\n        display: flex; align-items: center; padding: 0 20px; gap: 25px;\n        font-size: 14px; font-weight: 500; color: var(--py-text-secondary);\n    }\n\n    .py-custrange-tab-item { cursor: pointer; padding: 14px 0; border-bottom: 2px solid transparent; }\n    .py-custrange-tab-item.active { color: var(--py-text-primary); border-bottom-color: var(--py-primary-blue); }\n    .py-custrange-tab-item:hover { color: var(--py-text-primary); }\n\n    .py-custrange-pane-content { flex: 1; overflow-y: auto; padding: 25px; display: none; }\n    .py-custrange-pane-content.active { display: block; }\n\n    .py-custrange-wrapper h1 { margin-top: 0; font-size: 22px; font-weight: 600; color: var(--py-text-primary); margin-bottom: 1rem; }\n    .py-custrange-wrapper p { line-height: 1.6; color: #374151; margin-bottom: 1rem; }\n    .py-custrange-wrapper ul { margin-bottom: 20px; color: #374151; line-height: 1.6; padding-left: 20px; }\n    .py-custrange-wrapper li { margin-bottom: 5px; }\n    .py-custrange-wrapper h3 { font-size: 16px; margin-top: 15px; margin-bottom: 10px; }\n\n    .py-custrange-solution-block {\n        background: #f8f9fa; border: 1px solid var(--py-border); padding: 15px;\n        border-radius: 6px; font-family: 'Consolas', monospace; font-size: 14px;\n        color: #333; white-space: pre-wrap; overflow-x: auto;\n    }\n\n    .py-custrange-sample-box { background-color: #f3f4f6; border: 1px solid var(--py-border); border-radius: 6px; margin-top: 20px; overflow: hidden; }\n    .py-custrange-sample-header { display: flex; background-color: #e5e7eb; font-size: 13px; font-weight: 600; color: var(--py-text-primary); }\n    .py-custrange-sample-col-title { width: 50%; padding: 8px 15px; border-right: 1px solid #d1d5db; }\n    .py-custrange-sample-col-content { width: 50%; padding: 15px; font-family: 'Consolas', monospace; font-size: 14px; border-right: 1px solid var(--py-border); white-space: pre-wrap; color: #333; }\n    .py-custrange-sample-body { display: flex; }\n\n    .py-custrange-right-pane { width: 55%; display: flex; flex-direction: column; background: var(--py-bg-panel); }\n\n    .py-custrange-editor-top-bar {\n        height: var(--py-header-height); border-bottom: 1px solid var(--py-border);\n        display: flex; align-items: center; justify-content: space-between;\n        padding: 0 15px; background-color: #f9fafb;\n    }\n\n    .py-custrange-lang-label { font-weight: 600; font-size: 14px; background: #e5e7eb; padding: 4px 12px; border-radius: 4px; }\n    .py-custrange-editor-settings i { color: var(--py-text-secondary); margin-left: 15px; cursor: pointer; font-size: 16px; }\n\n    .py-custrange-code-area { flex: 1; display: flex; flex-direction: column; position: relative; }\n    .py-custrange-code-area .CodeMirror { flex: 1; height: 100%; position: absolute; top: 0; bottom: 0; left: 0; right: 0; font-family: 'Source Code Pro', monospace; font-size: 15px; }\n\n    .py-custrange-console-section {\n        border-top: 1px solid var(--py-border); background: #f9fafb;\n        display: flex; flex-direction: column; height: 35%;\n    }\n    .py-custrange-console-header { padding: 8px 15px; background: #e5e7eb; font-size: 12px; font-weight: 600; color: var(--py-text-secondary); text-transform: uppercase; }\n    .py-custrange-console-body { display: flex; flex: 1; overflow: hidden; }\n    .py-custrange-input-wrapper, .py-custrange-output-wrapper { flex: 1; display: flex; flex-direction: column; padding: 10px; border-right: 1px solid var(--py-border); }\n    .py-custrange-output-wrapper { border-right: none; }\n    .py-custrange-console-label { font-size: 12px; font-weight: 600; margin-bottom: 5px; color: var(--py-text-secondary); }\n\n    textarea.py-custrange-custom-input-area { flex: 1; border: 1px solid var(--py-border); border-radius: 4px; resize: none; padding: 8px; font-family: monospace; width: 100%; }\n\n    .py-custrange-output-display {\n        flex: 1; background: white; border: 1px solid var(--py-border);\n        border-radius: 4px; padding: 8px; font-family: monospace;\n        white-space: pre-wrap; overflow-y: auto; font-size: 13px; line-height: 1.15;\n    }\n\n    .py-custrange-footer-actions {\n        height: var(--py-footer-height); border-top: 1px solid var(--py-border);\n        display: flex; align-items: center; justify-content: flex-end;\n        padding: 0 20px; background-color: var(--py-bg-panel);\n    }\n\n    .py-custrange-execution-group { display: flex; gap: 12px; align-items: center; }\n\n    .py-custrange-btn {\n        padding: 8px 20px; border-radius: 4px; font-size: 14px; font-weight: 600;\n        cursor: pointer; text-decoration: none; display: inline-flex; align-items: center;\n        justify-content: center; transition: 0.2s; height: 38px; box-shadow: none; border: none;\n    }\n\n    .py-custrange-btn-secondary { background: transparent; border: 1px solid var(--py-border); color: var(--py-text-primary); }\n    .py-custrange-btn-secondary:hover { background: #f3f4f6; }\n    .py-custrange-btn-primary { background: var(--py-primary-blue); border: 1px solid var(--py-primary-blue); color: white; }\n    .py-custrange-btn-primary:hover { background: var(--py-primary-hover); }\n\n    .py-custrange-spinner {\n        display: none; width: 14px; height: 14px;\n        border: 2px solid #fff; border-top-color: transparent;\n        border-radius: 50%; animation: py-custrange-spin 0.8s linear infinite; margin-left: 8px;\n    }\n    @keyframes py-custrange-spin { 100% { transform: rotate(360deg); } }\n\n    .py-custrange-hidden { display: none !important; }\n    .py-custrange-btn-mobile { display: none !important; }\n\n    @media (max-width: 768px) {\n        .py-custrange-wrapper { display: block; height: auto; min-height: auto; }\n        .py-custrange-ide-container { flex: none; height: auto; }\n        .py-custrange-top-nav { display: none; }\n        .py-custrange-ide-container { flex-direction: column; overflow-y: auto; height: auto; }\n        .py-custrange-left-pane, .py-custrange-right-pane { width: 100%; height: auto; }\n        .py-custrange-left-pane { border-right: none; border-bottom: 8px solid #f3f4f6; min-height: auto; max-height: 400px; }\n        .py-custrange-right-pane { display: flex; flex-direction: column; }\n        .py-custrange-console-section, .py-custrange-console-body, .py-custrange-footer-actions { display: contents; }\n        .py-custrange-console-header { display: none; }\n        .py-custrange-editor-top-bar { order: 1; }\n        .py-custrange-code-area { order: 2; height: 500px; flex: none; }\n        .py-custrange-code-area .CodeMirror { position: relative; height: 500px; }\n        .py-custrange-input-wrapper { order: 3; width: 100%; height: auto; min-height: 280px; border-right: none; border-top: 8px solid #f3f4f6; border-bottom: 1px solid var(--py-border); }\n        .py-custrange-execution-group { order: 4; width: 100%; display: flex; padding: 15px; gap: 10px; border-bottom: 1px solid var(--py-border); background: #fff; }\n        .py-custrange-execution-group .py-custrange-btn { flex: 1; }\n        .py-custrange-output-wrapper { order: 5; width: 100%; height: auto; min-height: 300px; max-height: 500px; border-right: none; background: #fff; }\n        .py-custrange-btn-mobile { display: inline-flex !important; order: 6; width: 48%; margin: 15px 1%; box-sizing: border-box; text-align: center; }\n        a.py-custrange-hidden { display: none !important; }\n    }\n<\/style>\n\n<div class=\"py-custrange-wrapper\">\n    <div class=\"py-custrange-top-nav\">\n        <a id=\"py-custrange-btn-prev-top\" class=\"py-custrange-btn py-custrange-btn-secondary py-custrange-hidden\" href=\"#\">&larr; Previous<\/a>\n        <span class=\"py-custrange-nav-title\">Module 11: Iterators &amp; Generators<\/span>\n        <a id=\"py-custrange-btn-next-top\" class=\"py-custrange-btn py-custrange-btn-primary py-custrange-hidden\" href=\"#\">Next &rarr;<\/a>\n    <\/div>\n\n    <div class=\"py-custrange-ide-container\" id=\"py-custrange-ideContainer\">\n\n        <div class=\"py-custrange-left-pane\">\n            <div class=\"py-custrange-tabs-header\">\n                <div class=\"py-custrange-tab-item active\" onclick=\"pyCustRangeSwitchTab('statement')\">Statement<\/div>\n                <div class=\"py-custrange-tab-item\" onclick=\"pyCustRangeSwitchTab('solution')\">Solution<\/div>\n            <\/div>\n\n            <div id=\"py-custrange-tab-statement\" class=\"py-custrange-pane-content active\">\n                <h1 id=\"python-exercise-11-1-custom-range\">Python Exercise 11.1: Custom Range<\/h1>\n                <p>Generators are a memory-efficient way to produce sequences on demand. In this exercise, you will build a generator function <code>my_range(start, end, step)<\/code> that mimics the behaviour of Python's built-in <code>range()<\/code>.<\/p>\n\n                <p>Your generator function should:<\/p>\n                <ul>\n                    <li>Accept three parameters: <code>start<\/code>, <code>end<\/code>, and <code>step<\/code>.<\/li>\n                    <li>Use a <code>while<\/code> loop to yield values starting from <code>start<\/code>, incrementing by <code>step<\/code> each time, and stopping <strong>before<\/strong> reaching <code>end<\/code>.<\/li>\n                    <li>Support both <strong>positive<\/strong> and <strong>negative<\/strong> step values.<\/li>\n                    <li>Use the <code>yield<\/code> keyword \u2014 not <code>return<\/code> \u2014 to produce each value.<\/li>\n                <\/ul>\n\n                <p>Once defined, use your generator to print:<\/p>\n                <ul>\n                    <li>All values from <code>my_range(1, 10, 2)<\/code> on one line, space-separated.<\/li>\n                    <li>All values from <code>my_range(10, 0, -3)<\/code> on one line, space-separated.<\/li>\n                <\/ul>\n\n                <h3 id=\"sample-output\">Sample Output:<\/h3>\n                <div class=\"py-custrange-sample-box\">\n                    <div class=\"py-custrange-sample-header\">\n                        <div class=\"py-custrange-sample-col-title\">Input<\/div>\n                        <div class=\"py-custrange-sample-col-title\">Output<\/div>\n                    <\/div>\n                    <div class=\"py-custrange-sample-body\">\n                        <div class=\"py-custrange-sample-col-content\">(no input required)<\/div>\n                        <div class=\"py-custrange-sample-col-content\">1 3 5 7 9\n10 7 4 1<\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div id=\"py-custrange-tab-solution\" class=\"py-custrange-pane-content\">\n                <h1 id=\"solution\">Solution<\/h1>\n                <p>The key is using <code>yield<\/code> inside a <code>while<\/code> loop. The loop condition must account for the sign of <code>step<\/code> so the generator works correctly in both directions.<\/p>\n                <div class=\"py-custrange-solution-block\">def my_range(start, end, step):\n    current = start\n    while (step > 0 and current < end) or (step < 0 and current > end):\n        yield current\n        current += step\n\nprint(*my_range(1, 10, 2))\nprint(*my_range(10, 0, -3))<\/div>\n\n                <p style=\"margin-top:20px\"><strong>Key Concepts:<\/strong><\/p>\n                <ul>\n                    <li>A <strong>generator function<\/strong> uses <code>yield<\/code> instead of <code>return<\/code>. Each call to <code>yield<\/code> pauses the function and returns the value to the caller.<\/li>\n                    <li>The function resumes from where it left off the next time the caller asks for a value (e.g. in a <code>for<\/code> loop or <code>next()<\/code> call).<\/li>\n                    <li>The <code>while<\/code> condition must check the direction of <code>step<\/code> to avoid an infinite loop when stepping negatively.<\/li>\n                    <li><code>print(*my_range(...))<\/code> unpacks the generator and prints all values space-separated in one line.<\/li>\n                    <li>Generators are memory-efficient: they produce one value at a time instead of building the full list in memory.<\/li>\n                <\/ul>\n            <\/div>\n        <\/div>\n\n        <div class=\"py-custrange-right-pane\">\n            <div class=\"py-custrange-editor-top-bar\">\n                <span class=\"py-custrange-lang-label\">Python 3<\/span>\n                <div class=\"py-custrange-editor-settings\">\n                    <i class=\"fas fa-expand\" id=\"py-custrange-fullscreenBtn\" title=\"Toggle Fullscreen\"><\/i>\n                <\/div>\n            <\/div>\n\n            <div class=\"py-custrange-code-area\">\n                <div id=\"py-custrange-code-editor-div\"><\/div>\n            <\/div>\n\n            <div class=\"py-custrange-console-section\">\n                <div class=\"py-custrange-console-header\">Test Console<\/div>\n                <div class=\"py-custrange-console-body\">\n                    <div class=\"py-custrange-input-wrapper\">\n                        <label class=\"py-custrange-console-label\">Custom Input (Stdin)<\/label>\n                        <textarea id=\"py-custrange-custom-input\" class=\"py-custrange-custom-input-area\" placeholder=\"No input required for this exercise\"><\/textarea>\n                    <\/div>\n                    <div class=\"py-custrange-output-wrapper\">\n                        <label class=\"py-custrange-console-label\">Output<\/label>\n                        <div id=\"py-custrange-output-console\" class=\"py-custrange-output-display\">Run code to see output...<\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"py-custrange-footer-actions\">\n                <a id=\"py-custrange-btn-prev-mobile\" class=\"py-custrange-btn py-custrange-btn-secondary py-custrange-hidden py-custrange-btn-mobile\" href=\"#\">&larr; Previous<\/a>\n\n                <div class=\"py-custrange-execution-group\">\n                    <button class=\"py-custrange-btn py-custrange-btn-secondary\" onclick=\"pyCustRangeResetCode()\">Reset<\/button>\n                    <button class=\"py-custrange-btn py-custrange-btn-primary\" onclick=\"pyCustRangeRunCode()\">\n                        <span id=\"py-custrange-btn-text\">Run Code<\/span>\n                        <span class=\"py-custrange-spinner\" id=\"py-custrange-btn-spinner\"><\/span>\n                    <\/button>\n                <\/div>\n\n                <a id=\"py-custrange-btn-next-mobile\" class=\"py-custrange-btn py-custrange-btn-primary py-custrange-hidden py-custrange-btn-mobile\" href=\"#\">Next &rarr;<\/a>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/codemirror\/5.65.16\/codemirror.min.js\"><\/script>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/codemirror\/5.65.16\/mode\/python\/python.min.js\"><\/script>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/codemirror\/5.65.16\/addon\/edit\/closebrackets.min.js\"><\/script>\n\n<script>\n    var pyCustRangeEditor;\n    var pyCustRangeStarterCode;\n\n    const pyCustRangePrevLink = \"\";\n    const pyCustRangeNextLink = \"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-fibonacci-sequence-generator\";\n\n    document.addEventListener(\"DOMContentLoaded\", function() {\n        const prevBtnTop = document.getElementById('py-custrange-btn-prev-top');\n        const nextBtnTop = document.getElementById('py-custrange-btn-next-top');\n        const prevBtnMobile = document.getElementById('py-custrange-btn-prev-mobile');\n        const nextBtnMobile = document.getElementById('py-custrange-btn-next-mobile');\n\n        if (pyCustRangePrevLink && pyCustRangePrevLink.trim() !== \"\") {\n            prevBtnTop.href = pyCustRangePrevLink;\n            prevBtnMobile.href = pyCustRangePrevLink;\n            prevBtnTop.classList.remove('py-custrange-hidden');\n            prevBtnMobile.classList.remove('py-custrange-hidden');\n        }\n        if (pyCustRangeNextLink && pyCustRangeNextLink.trim() !== \"\") {\n            nextBtnTop.href = pyCustRangeNextLink;\n            nextBtnMobile.href = pyCustRangeNextLink;\n            nextBtnTop.classList.remove('py-custrange-hidden');\n            nextBtnMobile.classList.remove('py-custrange-hidden');\n        }\n    });\n\n    function pyCustRangeSwitchTab(tabName) {\n        document.querySelectorAll('#py-custrange-tab-statement, #py-custrange-tab-solution').forEach(el => el.classList.remove('active'));\n        const headerTabs = document.querySelector('#py-custrange-ideContainer .py-custrange-tabs-header').children;\n        Array.from(headerTabs).forEach(el => el.classList.remove('active'));\n        document.getElementById('py-custrange-tab-' + tabName).classList.add('active');\n        if (tabName === 'statement') headerTabs[0].classList.add('active');\n        if (tabName === 'solution') headerTabs[1].classList.add('active');\n    }\n\n    const pyCustRangeFullscreenBtn = document.getElementById('py-custrange-fullscreenBtn');\n    const pyCustRangeIdeContainer = document.getElementById('py-custrange-ideContainer');\n\n    if (pyCustRangeFullscreenBtn) {\n        pyCustRangeFullscreenBtn.addEventListener('click', () => {\n            if (!document.fullscreenElement) {\n                pyCustRangeIdeContainer.requestFullscreen().catch(err => alert(`Error: ${err.message}`));\n                pyCustRangeFullscreenBtn.classList.replace('fa-expand', 'fa-compress');\n            } else {\n                document.exitFullscreen();\n                pyCustRangeFullscreenBtn.classList.replace('fa-compress', 'fa-expand');\n            }\n        });\n    }\n\n    pyCustRangeStarterCode = `# Exercise 11.1: Custom Range\n# Create a generator function my_range(start, end, step)\n# that mimics Python's built-in range()\n\n# Step 1: Define the generator function\n# def my_range(start, end, step):\n\n    # Step 2: Initialize current to start\n    # current = start\n\n    # Step 3: Use a while loop with the correct condition\n    # (Hint: handle both positive and negative step values)\n    # while ...:\n\n        # Step 4: Yield the current value\n        # yield current\n\n        # Step 5: Increment current by step\n        # current += step\n\n\n# Step 6: Print all values from my_range(1, 10, 2) space-separated\n\n\n# Step 7: Print all values from my_range(10, 0, -3) space-separated\n\n`;\n\n    pyCustRangeEditor = CodeMirror(document.getElementById(\"py-custrange-code-editor-div\"), {\n        value: pyCustRangeStarterCode,\n        mode: \"python\",\n        theme: \"eclipse\",\n        lineNumbers: true,\n        indentUnit: 4,\n        autoCloseBrackets: true\n    });\n\n    function pyCustRangeResetCode() {\n        pyCustRangeEditor.setValue(pyCustRangeStarterCode);\n        document.getElementById(\"py-custrange-output-console\").innerText = \"Run code to see output...\";\n    }\n\n    function pyCustRangeRunCode() {\n        const spinner = document.getElementById('py-custrange-btn-spinner');\n        const btnText = document.getElementById('py-custrange-btn-text');\n        const outputBox = document.getElementById('py-custrange-output-console');\n\n        spinner.style.display = \"inline-block\";\n        btnText.innerText = \"Running \";\n        outputBox.innerText = \"Processing...\";\n        outputBox.style.color = \"#6b7280\";\n\n        const pythonCode = pyCustRangeEditor.getValue();\n        const userInput = document.getElementById(\"py-custrange-custom-input\").value;\n\n        fetch(\"https:\/\/blogsupport123-python-compiler.hf.space\/api\/run-python\", {\n            method: \"POST\",\n            headers: { \"Content-Type\": \"application\/json\" },\n            body: JSON.stringify({ code: pythonCode, input: userInput }),\n        })\n        .then(response => response.json())\n        .then(data => {\n            if (data.output) {\n                outputBox.innerText = data.output;\n                outputBox.style.color = \"#1f2937\";\n            } else if (data.error || data.errors) {\n                outputBox.innerText = data.error || data.errors;\n                outputBox.style.color = \"#ef4444\";\n            } else {\n                outputBox.innerText = \"No output returned.\";\n            }\n        })\n        .catch(err => {\n            outputBox.innerText = \"Error: \" + err.message;\n            outputBox.style.color = \"#ef4444\";\n        })\n        .finally(() => {\n            spinner.style.display = \"none\";\n            btnText.innerText = \"Run Code\";\n        });\n    }\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>&larr; Previous Module 11: Iterators &amp; Generators Next &rarr; Statement Solution Python Exercise 11.1: Custom Range Generators are a memory-efficient way to produce sequences on demand. In this exercise, you will build a generator function my_range(start, end, step) that mimics the behaviour of Python's built-in range(). Your generator function should: Accept three parameters: start, end, [&hellip;]<\/p>\n","protected":false},"author":41,"featured_media":0,"parent":114145,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[25860],"tags":[36796,36895],"class_list":["post-117703","page","type-page","status-publish","hentry","category-software","tag-python","tag-python-exercise"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Python Program Custom Range Generator - Great Learning Blog: Free Resources what Matters to shape your Career!<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python Program Custom Range Generator\" \/>\n<meta property=\"og:description\" content=\"&larr; Previous Module 11: Iterators &amp; Generators Next &rarr; Statement Solution Python Exercise 11.1: Custom Range Generators are a memory-efficient way to produce sequences on demand. In this exercise, you will build a generator function my_range(start, end, step) that mimics the behaviour of Python&#039;s built-in range(). Your generator function should: Accept three parameters: start, end, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/\" \/>\n<meta property=\"og:site_name\" content=\"Great Learning Blog: Free Resources what Matters to shape your Career!\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/GreatLearningOfficial\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@Great_Learning\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/python-exercise\\\/python-program-custom-range-generator\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/python-exercise\\\/python-program-custom-range-generator\\\/\"},\"author\":{\"name\":\"Great Learning Editorial Team\",\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/#\\\/schema\\\/person\\\/6f993d1be4c584a335951e836f2656ad\"},\"headline\":\"Python Program Custom Range Generator\",\"datePublished\":\"2026-05-12T12:40:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/python-exercise\\\/python-program-custom-range-generator\\\/\"},\"wordCount\":275,\"publisher\":{\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/#organization\"},\"keywords\":[\"python\",\"python-exercise\"],\"articleSection\":[\"IT\\\/Software Development\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/python-exercise\\\/python-program-custom-range-generator\\\/\",\"url\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/python-exercise\\\/python-program-custom-range-generator\\\/\",\"name\":\"Python Program Custom Range Generator - Great Learning Blog: Free Resources what Matters to shape your Career!\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-05-12T12:40:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/python-exercise\\\/python-program-custom-range-generator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/python-exercise\\\/python-program-custom-range-generator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/python-exercise\\\/python-program-custom-range-generator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python Exercises\",\"item\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/python-exercise\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Python Program Custom Range Generator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/\",\"name\":\"Great Learning Blog\",\"description\":\"Learn, Upskill &amp; Career Development Guide and Resources\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/#organization\"},\"alternateName\":\"Great Learning\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/#organization\",\"name\":\"Great Learning\",\"url\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/GL-Logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/GL-Logo.jpg\",\"width\":900,\"height\":900,\"caption\":\"Great Learning\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/GreatLearningOfficial\\\/\",\"https:\\\/\\\/x.com\\\/Great_Learning\",\"https:\\\/\\\/www.instagram.com\\\/greatlearningofficial\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/school\\\/great-learning\\\/\",\"https:\\\/\\\/in.pinterest.com\\\/greatlearning12\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/beaconelearning\\\/\"],\"description\":\"Great Learning is a leading global ed-tech company for professional training and higher education. It offers comprehensive, industry-relevant, hands-on learning programs across various business, technology, and interdisciplinary domains driving the digital economy. These programs are developed and offered in collaboration with the world's foremost academic institutions.\",\"email\":\"info@mygreatlearning.com\",\"legalName\":\"Great Learning Education Services Pvt. Ltd\",\"foundingDate\":\"2013-11-29\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"1001\",\"maxValue\":\"5000\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/#\\\/schema\\\/person\\\/6f993d1be4c584a335951e836f2656ad\",\"name\":\"Great Learning Editorial Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/02\\\/unnamed.webp\",\"url\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/02\\\/unnamed.webp\",\"contentUrl\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/02\\\/unnamed.webp\",\"caption\":\"Great Learning Editorial Team\"},\"description\":\"The Great Learning Editorial Staff includes a dynamic team of subject matter experts, instructors, and education professionals who combine their deep industry knowledge with innovative teaching methods. Their mission is to provide learners with the skills and insights needed to excel in their careers, whether through upskilling, reskilling, or transitioning into new fields.\",\"sameAs\":[\"https:\\\/\\\/www.mygreatlearning.com\\\/\",\"https:\\\/\\\/in.linkedin.com\\\/school\\\/great-learning\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/Great_Learning\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCObs0kLIrDjX2LLSybqNaEA\"],\"award\":[\"Best EdTech Company of the Year 2024\",\"Education Economictimes Outstanding Education\\\/Edtech Solution Provider of the Year 2024\",\"Leading E-learning Platform 2024\"],\"url\":\"https:\\\/\\\/www.mygreatlearning.com\\\/blog\\\/author\\\/greatlearning\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Python Program Custom Range Generator - Great Learning Blog: Free Resources what Matters to shape your Career!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/","og_locale":"en_US","og_type":"article","og_title":"Python Program Custom Range Generator","og_description":"&larr; Previous Module 11: Iterators &amp; Generators Next &rarr; Statement Solution Python Exercise 11.1: Custom Range Generators are a memory-efficient way to produce sequences on demand. In this exercise, you will build a generator function my_range(start, end, step) that mimics the behaviour of Python's built-in range(). Your generator function should: Accept three parameters: start, end, [&hellip;]","og_url":"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/","og_site_name":"Great Learning Blog: Free Resources what Matters to shape your Career!","article_publisher":"https:\/\/www.facebook.com\/GreatLearningOfficial\/","twitter_card":"summary_large_image","twitter_site":"@Great_Learning","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/#article","isPartOf":{"@id":"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/"},"author":{"name":"Great Learning Editorial Team","@id":"https:\/\/www.mygreatlearning.com\/blog\/#\/schema\/person\/6f993d1be4c584a335951e836f2656ad"},"headline":"Python Program Custom Range Generator","datePublished":"2026-05-12T12:40:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/"},"wordCount":275,"publisher":{"@id":"https:\/\/www.mygreatlearning.com\/blog\/#organization"},"keywords":["python","python-exercise"],"articleSection":["IT\/Software Development"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/","url":"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/","name":"Python Program Custom Range Generator - Great Learning Blog: Free Resources what Matters to shape your Career!","isPartOf":{"@id":"https:\/\/www.mygreatlearning.com\/blog\/#website"},"datePublished":"2026-05-12T12:40:03+00:00","breadcrumb":{"@id":"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/python-program-custom-range-generator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog","item":"https:\/\/www.mygreatlearning.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python Exercises","item":"https:\/\/www.mygreatlearning.com\/blog\/python-exercise\/"},{"@type":"ListItem","position":3,"name":"Python Program Custom Range Generator"}]},{"@type":"WebSite","@id":"https:\/\/www.mygreatlearning.com\/blog\/#website","url":"https:\/\/www.mygreatlearning.com\/blog\/","name":"Great Learning Blog","description":"Learn, Upskill &amp; Career Development Guide and Resources","publisher":{"@id":"https:\/\/www.mygreatlearning.com\/blog\/#organization"},"alternateName":"Great Learning","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mygreatlearning.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.mygreatlearning.com\/blog\/#organization","name":"Great Learning","url":"https:\/\/www.mygreatlearning.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.mygreatlearning.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.mygreatlearning.com\/blog\/wp-content\/uploads\/2022\/06\/GL-Logo.jpg","contentUrl":"https:\/\/www.mygreatlearning.com\/blog\/wp-content\/uploads\/2022\/06\/GL-Logo.jpg","width":900,"height":900,"caption":"Great Learning"},"image":{"@id":"https:\/\/www.mygreatlearning.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/GreatLearningOfficial\/","https:\/\/x.com\/Great_Learning","https:\/\/www.instagram.com\/greatlearningofficial\/","https:\/\/www.linkedin.com\/school\/great-learning\/","https:\/\/in.pinterest.com\/greatlearning12\/","https:\/\/www.youtube.com\/user\/beaconelearning\/"],"description":"Great Learning is a leading global ed-tech company for professional training and higher education. It offers comprehensive, industry-relevant, hands-on learning programs across various business, technology, and interdisciplinary domains driving the digital economy. These programs are developed and offered in collaboration with the world's foremost academic institutions.","email":"info@mygreatlearning.com","legalName":"Great Learning Education Services Pvt. Ltd","foundingDate":"2013-11-29","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"1001","maxValue":"5000"}},{"@type":"Person","@id":"https:\/\/www.mygreatlearning.com\/blog\/#\/schema\/person\/6f993d1be4c584a335951e836f2656ad","name":"Great Learning Editorial Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.mygreatlearning.com\/blog\/wp-content\/uploads\/2022\/02\/unnamed.webp","url":"https:\/\/www.mygreatlearning.com\/blog\/wp-content\/uploads\/2022\/02\/unnamed.webp","contentUrl":"https:\/\/www.mygreatlearning.com\/blog\/wp-content\/uploads\/2022\/02\/unnamed.webp","caption":"Great Learning Editorial Team"},"description":"The Great Learning Editorial Staff includes a dynamic team of subject matter experts, instructors, and education professionals who combine their deep industry knowledge with innovative teaching methods. Their mission is to provide learners with the skills and insights needed to excel in their careers, whether through upskilling, reskilling, or transitioning into new fields.","sameAs":["https:\/\/www.mygreatlearning.com\/","https:\/\/in.linkedin.com\/school\/great-learning\/","https:\/\/x.com\/https:\/\/twitter.com\/Great_Learning","https:\/\/www.youtube.com\/channel\/UCObs0kLIrDjX2LLSybqNaEA"],"award":["Best EdTech Company of the Year 2024","Education Economictimes Outstanding Education\/Edtech Solution Provider of the Year 2024","Leading E-learning Platform 2024"],"url":"https:\/\/www.mygreatlearning.com\/blog\/author\/greatlearning\/"}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"web-stories-poster-portrait":false,"web-stories-publisher-logo":false,"web-stories-thumbnail":false},"uagb_author_info":{"display_name":"Great Learning Editorial Team","author_link":"https:\/\/www.mygreatlearning.com\/blog\/author\/greatlearning\/"},"uagb_comment_info":0,"uagb_excerpt":"&larr; Previous Module 11: Iterators &amp; Generators Next &rarr; Statement Solution Python Exercise 11.1: Custom Range Generators are a memory-efficient way to produce sequences on demand. In this exercise, you will build a generator function my_range(start, end, step) that mimics the behaviour of Python's built-in range(). Your generator function should: Accept three parameters: start, end,&hellip;","_links":{"self":[{"href":"https:\/\/www.mygreatlearning.com\/blog\/wp-json\/wp\/v2\/pages\/117703","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mygreatlearning.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.mygreatlearning.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.mygreatlearning.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mygreatlearning.com\/blog\/wp-json\/wp\/v2\/comments?post=117703"}],"version-history":[{"count":2,"href":"https:\/\/www.mygreatlearning.com\/blog\/wp-json\/wp\/v2\/pages\/117703\/revisions"}],"predecessor-version":[{"id":117712,"href":"https:\/\/www.mygreatlearning.com\/blog\/wp-json\/wp\/v2\/pages\/117703\/revisions\/117712"}],"up":[{"embeddable":true,"href":"https:\/\/www.mygreatlearning.com\/blog\/wp-json\/wp\/v2\/pages\/114145"}],"wp:attachment":[{"href":"https:\/\/www.mygreatlearning.com\/blog\/wp-json\/wp\/v2\/media?parent=117703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mygreatlearning.com\/blog\/wp-json\/wp\/v2\/categories?post=117703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mygreatlearning.com\/blog\/wp-json\/wp\/v2\/tags?post=117703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}