Introduction to Programming – Chapter 1 | O Level M3-R5 | Boosting Skills

Introduction to Programming – NIELIT O Level (M3-R5)

इस chapter में हम Programming की मूल अवधारणाओं को समझेंगे जैसे – Model of Computation, Algorithms, Flowcharts, Programming Languages, Compilation, Testing, Debugging और Documentation। ये सभी किसी भी beginner programmer के लिए foundation बनाते हैं।

👉 Swipe to see more
1️⃣ Basic Model of Computation

💡 Introduction

Computation का अर्थ है किसी समस्या को step-by-step हल करना। Model of Computation वह सैद्धांतिक ढांचा (theoretical framework) है जो बताता है कि कोई कंप्यूटर या प्रोग्राम डेटा को कैसे process करता है। Python जैसी programming languages इन्हीं computational models के practical रूप हैं।

Note: Computation model का प्रयोग algorithm की correctness, performance और feasibility को परखने के लिए किया जाता है।

📘 Types of Computational Models

  • 1. Mathematical Model: Computation को equations और logic में दर्शाता है।
  • 2. Physical Model: बताता है कि CPU, Memory और Storage computation को वास्तव में कैसे चलाते हैं।
  • 3. Abstract Model: यह logical steps और data flow पर केंद्रित होता है, जैसे Turing Machine और RAM Model

🧠 Common Models of Computation

1. Turing Machine

Alan Turing द्वारा विकसित यह computation का theoretical model है। इसमें:

  • एक Infinite Tape होती है जिस पर symbols लिखे जाते हैं।
  • एक Head जो symbols को पढ़ता और लिखता है।
  • एक Control Unit जो next step तय करती है।
Python Analogy:
Python का program भी इसी model को follow करता है — जहाँ instructions sequentially execute होते हैं और memory में values update होती हैं।

x = 2
y = 3
z = x + y
print(z)   # Output: 5
    
ऊपर कोड में Python interpreter sequential steps में instructions को पढ़ता और execute करता है — यह Turing Machine के step-by-step computation के समान है।

2. Finite Automata (FA)

Finite Automata एक simple computation model है जो limited memory के साथ काम करता है। यह input symbols को पढ़ता है और final state तक पहुँचता है।

  • DFA (Deterministic Finite Automata): हर symbol के लिए केवल एक next state।
  • NFA (Non-Deterministic Finite Automata): एक symbol के लिए कई possible states।
Python Example (Pattern Checking):
Finite Automata का उपयोग pattern matching में होता है, जैसे यह देखना कि कोई string "101" pattern से मिलती है या नहीं:

s = "10101"
if "101" in s:
    print("Pattern found!")  
else:
    print("Pattern not found!")
# Output: Pattern found!
    
यह simple code internally Finite Automata जैसा logic follow करता है।

3. RAM Model (Random Access Machine)

RAM Model computation का practical रूप है — जैसे Python में instructions sequentially execute होती हैं और memory को random access किया जा सकता है।

  • हर instruction को 1 unit time माना जाता है।
  • Memory access O(1) time में होता है।
  • Algorithm analysis के लिए सबसे उपयुक्त model है।
Python Example (RAM Model):

arr = [10, 20, 30, 40]
arr[2] = arr[2] + 5
print(arr)  # Output: [10, 20, 35, 40]
    
यहाँ memory index पर direct access हुआ — यह RAM model की खासियत है।

⚙️ Components of a Computational Model

  • Input: Raw data (e.g., user input, variables)।
  • Process: Operations और logic (e.g., calculations, loops)।
  • Output: Process का final result।
  • Storage: Temporary or permanent memory (lists, variables)।
  • Control Unit: Step-by-step execution का order manage करता है।
Python Example:

num = int(input("Enter a number: "))
square = num * num
print("Square is:", square)
    
यहाँ Input (user number), Process (multiplication), और Output (result) — computation model के सभी तीन stages दिखाते हैं।

📈 Importance of Model of Computation

  • Algorithm की time और space complexity समझने में मदद करता है।
  • Computability और limitations define करता है।
  • Programming languages और compilers की design में theoretical आधार देता है।
  • Python जैसी high-level languages इन्हीं models के ऊपर आधारित हैं।
In short: Model of Computation = Theoretical design of how Python (or any language) executes code.

🧩 Summary

  • Computation = Step-by-step data processing।
  • Turing Machine → Theory; RAM Model → Practice।
  • Python interpreter = Real-world RAM model implementation।
  • Model helps analyze efficiency, complexity, and feasibility।
2️⃣ Algorithms

💡 Introduction

किसी भी प्रोग्राम का आधार उसका Algorithm होता है। Algorithm एक step-by-step process है जो किसी समस्या को हल करने का तरीका बताता है। यह computer program का logical blueprint होता है — जिसे Python या किसी भी language में implement किया जा सकता है।

Definition: “An algorithm is a finite sequence of well-defined instructions to solve a specific problem.”

📘 Characteristics of a Good Algorithm

  • 1. Finiteness: Algorithm को finite steps में खत्म होना चाहिए।
  • 2. Definiteness: हर step का meaning clear और unambiguous होना चाहिए।
  • 3. Input: 0 या अधिक input values लेने चाहिए।
  • 4. Output: कम से कम एक output देना चाहिए।
  • 5. Effectiveness: Steps इतने simple होने चाहिए कि manually भी perform किए जा सकें।
Example: किसी संख्या का square निकालने का algorithm:
  1. Start
  2. Read a number N
  3. Compute square = N × N
  4. Display square
  5. Stop

🧩 Types of Algorithms

  • 1. Sequential Algorithm: Steps एक के बाद एक क्रम से execute होते हैं।
  • 2. Conditional Algorithm: किसी condition के आधार पर steps बदलते हैं (if-else logic)।
  • 3. Iterative Algorithm: कोई step बार-बार दोहराया जाता है (loops का प्रयोग)।
Python Example (Sequential):

a = 10
b = 5
sum = a + b
print("Sum =", sum)
# Output: Sum = 15
    
यह एक simple sequential algorithm है — step by step execute होता है।
Python Example (Conditional):

num = int(input("Enter a number: "))
if num % 2 == 0:
    print("Even number")
else:
    print("Odd number")
    
यहाँ condition के अनुसार algorithm का flow बदलता है।
Python Example (Iterative):

n = int(input("Enter n: "))
i = 1
while i <= n:
    print(i)
    i += 1
    
यह algorithm loop के माध्यम से बार-बार steps दोहराता है।

🧮 Algorithm Representation

Algorithm को आम तौर पर दो तरीकों से लिखा जाता है:

  • 1. Pseudocode: Plain English में steps लिखे जाते हैं।
  • 2. Flowchart: Diagram के रूप में logic को दिखाया जाता है (अगले topic में)।

Example – Algorithm for Finding Factorial of a Number

Pseudocode:
  1. Start
  2. Read number N
  3. Set fact = 1
  4. Repeat i = 1 to N
  5.     fact = fact × i
  6. Print fact
  7. Stop
Python Implementation:

n = int(input("Enter a number: "))
fact = 1
for i in range(1, n + 1):
    fact = fact * i
print("Factorial =", fact)
    

⚙️ Algorithm Analysis

किसी algorithm की performance को Time Complexity और Space Complexity से मापा जाता है।

  • Time Complexity: Execution में लगने वाला कुल समय।
  • Space Complexity: Memory की आवश्यकता।
Example: O(n) का अर्थ है कि algorithm का समय input size के साथ linear रूप से बढ़ता है।

📈 Importance of Algorithms

  • Efficient algorithm से program का performance बेहतर होता है।
  • Programming logic को समझने में आसानी होती है।
  • Reusability और modularity को promote करता है।
  • Python जैसी languages में सभी operations algorithms पर आधारित होते हैं।

📘 Real-Life Example

Algorithm हमारे रोजमर्रा के कामों में भी होता है:

  • चाय बनाने के steps
  • ATM से cash निकालने की प्रक्रिया
  • Google Search का ranking algorithm

🧩 Summary

  • Algorithm = Step-by-step logical process।
  • हर program का आधार उसका algorithm होता है।
  • Python algorithm को practically implement करता है।
  • Efficiency = कम time और कम memory में solution।
3️⃣ Flowcharts

💡 Introduction

Flowchart किसी algorithm या program का graphical representation होता है। यह symbols और arrows का उपयोग करके logic का step-by-step flow दिखाता है। Flowcharts programming logic को समझने और debug करने में बेहद मददगार होते हैं — और Python जैसे प्रोग्राम में इन्हीं steps को code के रूप में लिखा जाता है।

Definition: “A flowchart is a diagrammatic representation of an algorithm showing the flow of control.”

🧩 Importance of Flowcharts

  • Logic को visually समझने में मदद करता है।
  • Errors और logical mistakes जल्दी पकड़ में आते हैं।
  • Team में communicate करना आसान होता है।
  • Programming शुरू करने से पहले सही योजना (planning) बन जाती है।

📘 Common Flowchart Symbols

SymbolNamePurpose
🔹 OvalStart / StopProgram की शुरुआत और अंत दर्शाने के लिए।
⬜ RectangleProcessComputation या processing step दिखाने के लिए।
🔺 DiamondDecisionCondition check या branching दिखाने के लिए।
🟦 ParallelogramInput / OutputData read या print करने के लिए।
➡️ ArrowFlow LinesExecution flow का direction बताने के लिए।
🔘 CircleConnectorFlowchart के दो भागों को जोड़ने के लिए।
Tip: हर flowchart में Start और Stop symbols अनिवार्य होते हैं।

📄 Example 1 – Algorithm to Add Two Numbers

नीचे एक simple flowchart logic और उसका Python equivalent दिया गया है:

Flowchart Steps:
  1. Start
  2. Read A, B
  3. Sum = A + B
  4. Print Sum
  5. Stop
Python Implementation:

a = int(input("Enter first number: "))
b = int(input("Enter second number: "))
sum = a + b
print("Sum =", sum)
    
Python में हर step उसी क्रम में execute होता है जैसे flowchart में दिखाया गया है।

📄 Example 2 – Find the Largest of Two Numbers

Flowchart Logic:
  1. Start
  2. Read A, B
  3. Is A > B ?
  4. Yes → Print “A is greater”
  5. No → Print “B is greater”
  6. Stop
Python Equivalent:

a = int(input("Enter first number: "))
b = int(input("Enter second number: "))

if a > b:
    print("A is greater")
else:
    print("B is greater")
    
यहाँ Decision Symbol (Diamond) को Python में if-else statement द्वारा दर्शाया गया है।

📄 Example 3 – Calculate Factorial of a Number

Flowchart Steps:
  1. Start
  2. Read N
  3. Set F = 1, i = 1
  4. While i ≤ N, do:
  5.     F = F × i
  6.     i = i + 1
  7. Print F
  8. Stop
Python Implementation:

n = int(input("Enter number: "))
fact = 1
i = 1
while i <= n:
    fact = fact * i
    i += 1
print("Factorial =", fact)
    
Python में while loop को flowchart के loop/iteration part के रूप में देखा जा सकता है।

⚙️ How Flowcharts Help in Python Programming

  • Code logic को visualize करने में मदद मिलती है।
  • Flowchart → Pseudocode → Python Code: यह natural progression होती है।
  • Logical errors debug करना आसान होता है।
  • Beginners के लिए logic समझने का best तरीका है।
Remember: हर Python program का एक equivalent flowchart बन सकता है — बस steps को symbols और arrows के रूप में दर्शाना होता है।

📈 Summary

  • Flowchart = Visual form of algorithm।
  • हर symbol का specific purpose होता है।
  • Python code और flowchart logic एक-दूसरे के पूरक हैं।
  • Flowchart बनाने से पहले algorithm लिखना बेहतर होता है।
4️⃣ Programming Languages

💡 Introduction

Programming Language वह माध्यम (medium) है जिसके द्वारा हम computer को निर्देश (instructions) देते हैं। जैसे मनुष्य एक-दूसरे से संवाद करने के लिए भाषाओं का उपयोग करते हैं, वैसे ही कंप्यूटर से बात करने के लिए हमें programming languages की आवश्यकता होती है। Python, C, Java, और JavaScript सभी high-level programming languages के उदाहरण हैं।

Definition: “A programming language is a formal language comprising a set of instructions that produce various kinds of output.”

📘 Why Do We Need Programming Languages?

  • Computer केवल binary language (0s और 1s) समझता है।
  • मनुष्य के लिए binary code लिखना कठिन है।
  • Programming languages instructions को human-readable बनाती हैं।
  • Compiler या Interpreter इन्हें machine code में translate करता है।

🧩 Types of Programming Languages

1. Machine Language (1st Generation)

यह सबसे नीचले स्तर (lowest level) की भाषा है। इसमें instructions केवल 0 और 1 के रूप में लिखे जाते हैं। यह सीधे hardware द्वारा समझी जाती है।

Example: 10110100 00001111 (यह किसी particular CPU instruction का binary रूप हो सकता है)
Drawback: याद रखना और debug करना कठिन, portable नहीं।

2. Assembly Language (2nd Generation)

Machine language की readability बढ़ाने के लिए mnemonics (short words) का उपयोग किया गया — जैसे MOV, ADD, SUB आदि। Assembly language को machine code में convert करने के लिए Assembler की जरूरत होती है।

Example:

MOV A, 05H
MOV B, 06H
ADD A, B
    

3. High-Level Languages (3rd Generation)

High-level languages मनुष्यों के लिए समझने योग्य होती हैं। इनका syntax English जैसा होता है, और compiler/interpreter द्वारा translate किया जाता है। Python, C, C++, Java, BASIC आदि इसी category में आते हैं।

Python Example:

a = 5
b = 10
sum = a + b
print("Sum =", sum)
    
यह high-level code आसानी से पढ़ा और समझा जा सकता है।

4. Fourth Generation Languages (4GL)

ये languages और भी high-level होती हैं — जैसे SQL, MATLAB, R, आदि। इनका उद्देश्य programming effort को कम करना और काम को सरल बनाना है।

Example (SQL):

SELECT name, age FROM students WHERE age > 18;
    

5. Fifth Generation Languages (5GL)

ये logic-based और AI-oriented languages हैं। इनका प्रयोग Machine Learning, Artificial Intelligence और Expert Systems में होता है। उदाहरण: Prolog, Mercury, और Python के कुछ AI frameworks।

⚙️ Compiler vs Interpreter

Compiler और Interpreter दोनों का काम high-level code को machine code में translate करना होता है, लेकिन इनके working methods अलग होते हैं।

FeatureCompilerInterpreter
Translationपूरे program को एक बार में translate करता है।एक-एक line को translate और execute करता है।
Execution SpeedFast (pre-compiled)Slow (line-by-line)
Error Detectionसभी errors compile time पर दिखते हैं।पहली error पर execution रुक जाता है।
Example LanguagesC, C++Python, JavaScript
Python Interpreter Example:
जब आप यह कोड लिखते हैं —

print("Hello, World!")
    
Python interpreter इसे line-by-line पढ़कर तुरंत output देता है। कोई अलग compile step नहीं होता।

🧠 Key Programming Concepts

  • Source Code: Programmer द्वारा लिखा गया high-level code (e.g., .py file)।
  • Object Code: Machine-readable translated version।
  • Executable Code: Final file जो directly run होती है।
  • Syntax: Language के grammatical rules।
  • Semantics: Meaning या behavior of code।
Example – Syntax Error in Python:

print("Hello"
# Missing parenthesis → Syntax Error
    

🚀 Why Python?

  • Simple, readable syntax — beginners के लिए आसान।
  • Interpreter-based — code तुरंत run किया जा सकता है।
  • Open source और platform-independent।
  • Huge libraries for data science, AI, web development, etc.
  • O Level syllabus में practical implementation के लिए perfect language।
In Short: Python modern high-level language का उत्कृष्ट उदाहरण है — जो simplicity और power दोनों प्रदान करती है।

🧩 Summary

  • Programming language = computer से संवाद करने का माध्यम।
  • Machine → Assembly → High-Level → 4GL → 5GL evolution।
  • Compiler & Interpreter code को machine language में बदलते हैं।
  • Python = interpreted, user-friendly, high-level language।
5️⃣ Compilation Process

💡 Introduction

जब हम किसी programming language (जैसे Python या C) में program लिखते हैं, तो वह Source Code कहलाता है। यह code सीधे computer द्वारा समझा नहीं जा सकता, इसलिए इसे Machine Code में translate करने की आवश्यकता होती है। इसी translation की पूरी प्रक्रिया को Compilation Process कहा जाता है।

Definition: “Compilation is the process of translating source code written in a high-level language into machine code that the computer can execute.”

⚙️ Steps in Compilation Process

Compilation process कई stages में पूरी होती है। नीचे हर stage को simple explanation और Python reference के साथ समझाया गया है 👇

1️⃣ Lexical Analysis (Scanning)

Compiler source code को पढ़ता है और उसे छोटे-छोटे tokens (keywords, identifiers, operators, literals, etc.) में बाँट देता है। इस stage पर comments और whitespaces को हटा दिया जाता है।

Example (Python Code):

a = 5
b = 10
print(a + b)
    
यह code tokens में टूटेगा: ['a', '=', '5', 'b', '=', '10', 'print', '(', 'a', '+', 'b', ')'] → यही lexical analysis कहलाता है।

2️⃣ Syntax Analysis (Parsing)

इस चरण में compiler यह चेक करता है कि code का structure language के grammar rules के अनुसार है या नहीं। जैसे — parentheses, indentation, keywords की position आदि।

Example (Syntax Error):

print("Hello"
# Missing parenthesis → SyntaxError: unexpected EOF while parsing
    
Note: Syntax analysis phase “Syntax Tree” या “Parse Tree” बनाता है जो program के logical structure को दर्शाता है।

3️⃣ Semantic Analysis

अब compiler meaning (semantics) check करता है — जैसे data type mismatch, undeclared variables, invalid operations आदि।

Example (Python Semantic Check):

x = "Hello"
y = 5
print(x + y)  # ❌ TypeError: can only concatenate str (not "int") to str
    
यह error syntax में नहीं, बल्कि semantics में है।

4️⃣ Intermediate Code Generation

इस stage में compiler source code को एक intermediate code में बदलता है (जो platform-independent होता है)। Python में यह step internally होता है — Python interpreter .py file को .pyc (bytecode) में बदल देता है।

Example:
जब आप Python file चलाते हैं —

python myprogram.py
    
तो Python background में myprogram.pyc file बनाता है (in __pycache__ folder)। यह bytecode “intermediate code” है।

5️⃣ Code Optimization

Compiler यहाँ program के performance को बेहतर बनाने की कोशिश करता है — जैसे unnecessary calculations को हटाना, repeated operations को optimize करना, आदि।

Before Optimization:

x = (10 * 5) + (10 * 5)
    
After Optimization:

x = 2 * (10 * 5)
    
Result same रहेगा, लेकिन performance बेहतर होगी।

6️⃣ Code Generation

अब compiler intermediate code को machine code (object code) में बदलता है। यह binary format में होता है, जिसे CPU execute कर सकता है।

Python Reference:
Python interpreter bytecode को internally machine instructions में बदलकर execute करता है — इसीलिए Python को “interpreted language” कहा जाता है।

7️⃣ Linking and Loading

अंतिम चरण में compiler अलग-अलग object files और libraries को link करता है ताकि एक final executable file बन सके। फिर loader उस executable को memory में load करता है और program चलना शुरू होता है।

Python में linking और loading dynamic तरीके से होती है — जब भी आप कोई module import करते हैं, Python runtime पर उसे memory में load करता है।

📘 Summary of Compilation Stages

StageDescription
Lexical AnalysisCode को tokens में तोड़ना
Syntax AnalysisGrammar और structure की जाँच
Semantic AnalysisMeaning और type consistency check करना
Intermediate CodePlatform-independent bytecode बनाना
OptimizationCode performance सुधारना
Code GenerationFinal machine code तैयार करना
Linking & LoadingExecutable को memory में लोड कर चलाना

💡 Python and Compilation

Python technically interpreted language है, लेकिन internally यह भी एक compilation step perform करता है। जब आप Python code चलाते हैं:

  1. Python source code को bytecode (.pyc) में compile करता है।
  2. Bytecode को Python Virtual Machine (PVM) execute करता है।
Visual Representation:
Source Code (.py)
       ↓
Bytecode (.pyc)
       ↓
Python Virtual Machine (PVM)
       ↓
Output
    
इसलिए Python को अक्सर “Interpreted + Compiled language” कहा जाता है।

🧩 Summary

  • Compilation = Translation from source to machine code।
  • 7 main stages: Lexical → Syntax → Semantic → Intermediate → Optimization → Code Gen → Linking।
  • Python internally bytecode compile करता है।
  • Python interpreter line-by-line execution करता है।
6️⃣ Testing and Debugging

💡 Introduction

जब हम कोई program लिखते हैं, तो उसमें कभी-कभी errors (bugs) आ जाते हैं। इन errors को ढूँढने और सुधारने की प्रक्रिया को Testing and Debugging कहते हैं। यह software development का सबसे महत्वपूर्ण चरण है क्योंकि यह सुनिश्चित करता है कि program सही तरीके से काम करे।

Definition:
  • Testing: यह प्रक्रिया है जिससे यह जांचा जाता है कि program expected result दे रहा है या नहीं।
  • Debugging: Testing के दौरान मिले errors को खोजकर उन्हें ठीक करने की प्रक्रिया।

🧩 Types of Errors in Programming

Python या किसी भी programming language में errors को मुख्यतः तीन श्रेणियों में बाँटा जाता है:

  • 1. Syntax Errors: जब कोड language के grammar rules को follow नहीं करता।
  • 2. Logical Errors: जब logic गलत होने के कारण output गलत आता है।
  • 3. Runtime Errors: जब program execute होते समय crash हो जाता है।

Example 1: Syntax Error


# Missing closing parenthesis
print("Hello World"
    
Output: SyntaxError: unexpected EOF while parsing

Example 2: Logical Error


# Logic गलत है — factorial गलत निकलेगा
n = 5
fact = 0
for i in range(1, n + 1):
    fact = fact + i
print(fact)
    
Output: 15 (जबकि सही उत्तर 120 होना चाहिए)

Example 3: Runtime Error


# Division by zero error
x = 10
y = 0
print(x / y)
    
Output: ZeroDivisionError: division by zero

🧠 What is Testing?

Testing का मुख्य उद्देश्य है यह सुनिश्चित करना कि software सभी situations में सही output दे। यह केवल errors खोजने के लिए नहीं बल्कि correctness, completeness और quality सुनिश्चित करने के लिए भी होती है।

✅ Types of Testing

  • 1. Unit Testing: Program के छोटे हिस्सों (functions, modules) को अलग-अलग test करना।
  • 2. Integration Testing: जब अलग-अलग modules को मिलाकर test किया जाता है।
  • 3. System Testing: पूरा system test किया जाता है ताकि यह देखा जा सके कि सभी components मिलकर सही से काम कर रहे हैं।
  • 4. Acceptance Testing: यह सुनिश्चित करने के लिए कि program user की जरूरतों को पूरा कर रहा है।
Python Example – Simple Unit Test:

def add(a, b):
    return a + b

# Testing the function
assert add(2, 3) == 5
assert add(-1, 1) == 0

print("All tests passed!")
    
यहाँ assert keyword function को test करने के लिए उपयोग किया गया है। अगर कोई condition fail होगी, तो error दिखेगा।

🐞 Debugging

Debugging का अर्थ है program में errors को ढूँढना और उन्हें ठीक करना। यह testing के बाद की प्रक्रिया है।

🧰 Common Debugging Techniques

  • 1. Print Statements: Program में intermediate values print करके logic check करना।
  • 2. Using Debugger Tool: जैसे Python का pdb module।
  • 3. Divide and Conquer: Code को छोटे-छोटे हिस्सों में बाँटकर error खोजना।
  • 4. Reading Error Messages: Python के error messages खुद बहुत informative होते हैं।
Example – Using print() for Debugging:

def multiply(a, b):
    print("Debug:", a, b)  # Debugging info
    return a * b

result = multiply(3, 4)
print("Result =", result)
    
Example – Using Python Debugger (pdb):

import pdb

def divide(a, b):
    pdb.set_trace()  # Debugger starts here
    return a / b

print(divide(10, 2))
    
जब program यहाँ पहुंचेगा, Python interactive debugger mode में चला जाएगा जहाँ आप variables inspect कर सकते हैं और line-by-line execution देख सकते हैं।

🔍 Difference Between Testing and Debugging

FeatureTestingDebugging
PurposeErrors खोजने के लिएErrors ठीक करने के लिए
Who performsTester या QAProgrammer / Developer
WhenDevelopment के बादTesting के दौरान या बाद में
ToolTesting frameworks (pytest, unittest)Debugger tools (pdb, IDE debugger)

🧩 Error Handling in Python

Python में runtime errors को handle करने के लिए try-except block का प्रयोग किया जाता है। इससे program crash होने से बचता है।

Example:

try:
    x = int(input("Enter number: "))
    y = int(input("Enter divisor: "))
    print("Result =", x / y)
except ZeroDivisionError:
    print("Cannot divide by zero!")
except ValueError:
    print("Invalid input! Please enter a number.")
finally:
    print("Program finished.")
    
Output (if y = 0): Cannot divide by zero! Finally block हमेशा execute होता है — चाहे error आए या नहीं।

📈 Benefits of Testing & Debugging

  • Program reliability और correctness सुनिश्चित करता है।
  • Errors जल्दी पकड़ में आते हैं।
  • Software maintenance आसान बनाता है।
  • User satisfaction और trust बढ़ाता है।
Pro Tip: हमेशा छोटे modules test करें, फिर पूरे program को integrate करें। Python में pytest और unittest जैसे frameworks का उपयोग करें।

🧩 Summary

  • Testing = Errors ढूँढना; Debugging = Errors ठीक करना।
  • Errors तीन प्रकार के होते हैं — Syntax, Logical, Runtime।
  • Python में try-except, assert, और pdb tools debugging में मदद करते हैं।
  • Testing software reliability और quality सुनिश्चित करता है।
7️⃣ Documentation

💡 Introduction

किसी भी software project की सफलता सिर्फ उसके code पर नहीं, बल्कि उसकी Documentation पर भी निर्भर करती है। Documentation वह प्रक्रिया है जिसमें हम program या system के बारे में आवश्यक जानकारी लिखते हैं ताकि कोई भी व्यक्ति उसे आसानी से समझ सके, maintain कर सके या आगे develop कर सके।

Definition: “Documentation is the written text or illustration that accompanies computer software or source code explaining how it operates or how to use it.”

📘 Why Documentation is Important?

  • Program को समझने और maintain करने में मदद करता है।
  • Future developers को program logic और structure समझने में सहायता करता है।
  • User manuals end-users को software का उपयोग करना सिखाते हैं।
  • Testing, debugging और updates के दौरान reference material प्रदान करता है।
Example:
अगर आपने एक Python calculator बनाया है — तो documentation में यह लिखा होना चाहिए कि calculator कौन-कौन से operations करता है, उसका usage क्या है, और उसमें कौन-कौन से functions हैं।

🧾 Types of Documentation

  • 1. Internal Documentation: Program के अंदर लिखी गई जानकारी — जैसे comments, variable names, function docstrings आदि।
  • 2. External Documentation: Program के बाहर रखी गई जानकारी — जैसे manuals, design documents, flowcharts, or technical reports।
  • 3. User Documentation: End-users के लिए बनाई गई manuals या help guides जो software के उपयोग को समझाती हैं।

💬 Internal Documentation (in Python)

Python में internal documentation के दो प्रमुख तरीके हैं:

  • 1. Comments (Single-line, Multi-line)
  • 2. Docstrings (Documentation Strings)

👉 1. Comments

Comments का उपयोग code को explain करने के लिए किया जाता है ताकि अन्य developers logic समझ सकें। Python interpreter comments को ignore करता है।

Example:

# This program adds two numbers
a = 10
b = 5
sum = a + b  # Adding the numbers
print("Sum =", sum)
    
यहाँ # से शुरू होने वाली lines comments हैं।

👉 2. Docstrings

Docstrings का उपयोग functions, classes और modules के अंदर documentation लिखने के लिए किया जाता है। ये triple quotes (""" ... """) में लिखे जाते हैं।

Example:

def greet(name):
    """This function greets the user with their name."""
    print("Hello,", name)

help(greet)  # Displays the docstring
    
Output में function का description दिखाई देगा।
Tip: हमेशा हर function या class के ऊपर एक docstring जरूर लिखें — यह good programming practice मानी जाती है।

📄 External Documentation

External documentation project के बाहर बनाई जाती है और अक्सर text files या PDFs के रूप में होती है। यह developers और users दोनों के लिए reference का काम करती है।

  • Program Design Document: Software structure और logic को explain करता है।
  • User Manual: End-user को software use करने की पूरी जानकारी देता है।
  • Technical Documentation: Software architecture, database, APIs आदि की details रखता है।
Example (User Manual Outline):
  • Introduction
  • Installation Steps
  • System Requirements
  • Usage Instructions
  • Troubleshooting Guide

🧩 Good Documentation Practices

  • Clear, simple और concise language का प्रयोग करें।
  • हर module और function के लिए short explanation दें।
  • Version information और date update करते रहें।
  • Code changes के साथ documentation को भी update करें।
  • Examples और screenshots का उपयोग करें (जहाँ संभव हो)।
Pro Tip: Documentation सिर्फ formal requirement नहीं — बल्कि एक communication bridge है developer और user के बीच।

📚 Documentation Tools for Python

  • Sphinx: Python projects के लिए documentation generator (used for Python.org docs).
  • pdoc / pydoc: Automatically extracts docstrings into HTML pages.
  • Jupyter Notebook: Code + Explanation + Output को combine करता है — perfect for tutorials.
  • ReadTheDocs: Online hosting platform for documentation websites.

Example – Auto Documentation with pydoc


pydoc -w myprogram.py
    
यह command आपके Python file की documentation को HTML format में generate कर देता है।

📈 Benefits of Documentation

  • Software की maintainability और scalability बढ़ती है।
  • नए developers को project समझने में मदद मिलती है।
  • Testing और debugging आसान होती है।
  • End users के लिए उपयोग में सरलता आती है।

🧩 Summary

  • Documentation = program का written explanation।
  • Types: Internal (comments/docstrings), External (manuals/reports), User Documentation।
  • Python में docstrings और comments सबसे useful tools हैं।
  • Good documentation एक successful project की पहचान है।
O Level Python – Top FAQs

❓ Frequently Asked Questions (Python – M3-R5)

  • Q1. O Level में Python module (M3-R5) में क्या-क्या आता है?
    Variables, Data Types, Operators, Expressions, Control Flow (if/else, loops), Functions, File I/O, Modules & Scope, NumPy basics.
  • Q2. Python में indentation क्यों ज़रूरी है?
    Python block structure (if/for/def आदि) को braces की जगह indentation से पहचानता है; गलत indentation → IndentationError.
  • Q3. == और is में फर्क?
    == values की equality चेक करता है; is object identity (same memory) चेक करता है।
  • Q4. Mutable vs Immutable types?
    List, dict, set → mutable; str, int, float, tuple → immutable.
  • Q5. List vs Tuple कब उपयोग करें?
    Frequent updates चाहिए तो list; fixed, hashable/fast reads चाहिए तो tuple।
  • Q6. *args और **kwargs क्या करते हैं?
    *args = variable positional args (tuple); **kwargs = variable keyword args (dict).
  • Q7. File handling में with क्यों?
    Context manager file को auto-close कर देता है—even on errors.
  • Q8. Exception handling का बेसिक pattern?
    try risky code, except error handle, else no-error path, finally cleanup.
  • Q9. Module import के common तरीके?
    import math, from math import sqrt, import math as m.
  • Q10. __name__ == "__main__" का मतलब?
    Module run होने पर entry-point guard—direct run पर main code; import होने पर skip।
  • Q11. NumPy arrays क्यों तेज़?
    Contiguous memory, vectorized C-level ops, broadcasting rules → loops से faster.
  • Q12. Slicing basics?
    seq[start:stop:step], negative indices allowed; e.g. s[::-1] reverses sequence.
  • Q13. Python में input/output का standard तरीका?
    input() string देता है; number चाहिए तो cast करें: int(input()).
  • Q14. Logical vs Bitwise operators?
    Logical: and, or, not (booleans); Bitwise: &, |, ^, ~, <<, >> (bits).
  • Q15. Common exam program patterns?
    factorial, prime check, Fibonacci, sum/avg, file copy, list ops, string reverse, matrix add (NumPy).
Python Example – Factorial (loop):

def fact(n):
    res = 1
    for i in range(1, n+1):
        res *= i
    return res

print(fact(5))  # 120
      
NumPy Example – Vectorized Sum:

import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)  # [5 7 9]