11 chhote steps. Har step pe ek hi nayi cheez. Beech-beech me khud try karo, phir jawab kholo.
Kuch bhi symbolic nahi. Sirf normal Python.
def f(x): if x > 10: print("BADA") else: print("CHHOTA")
f(50) → BADAf(3) → CHHOTABas ek cheez notice karo: 50 aur 3 ne alag-alag lines chalayi.
"Kaun si lines chali" — usko path kehte hain. Matlab raasta jo program ne liya. Is program me do paths hain.
BADA wale path pe kaun si values jaati hain? 11, 12, 13, ... — list khatam hi nahi hoti.
To infinite numbers likhne ki jagah, hum ek chhoti condition likh dete hain: x > 10. Ye ek line un saari values ko pakad leti hai.
Path constraint = "is raaste pe jaane ke liye input pe kya shart hai."
| Path | Path constraint |
|---|---|
| BADA | x > 10 |
| CHHOTA | x <= 10 |
CHHOTA me x <= 10 isliye aaya kyunki else ka matlab hi hai "jab x > 10 sach nahi hai" — yaani ulta.
Ye poore chapter ki sabse badi galti hai. Ek baar pakka kar lo.
if me hai | else me banega |
|---|---|
| < | >= |
| > | <= |
| <= | > |
| >= | < |
| == | != |
< ka ulta > nahi hota — >= hota hai. Kyunki "chhota nahi hai" ka matlab hai "ya to bada hai, ya barabar hai". Barabar wala case sab bhool jaate hain.
def g(y): if y < 5: print("A") else: print("B")
A aur B ke path constraints kya honge?
g(5) chala ke dekho: 5 < 5 jhooth hai → else chalega → B. Isliye B me 5 bhi shaamil hai, aur y > 5 likhna galat hoga.
if = ANDdef k(x): if x > 10: if x < 50: print("MILA")
x = 5 → pehla if fail. ❌x = 70 → pehla paar, dusra fail. ❌x = 30 → dono paar. ✅ MILATo MILA ka constraint hai dono conditions ek saath:
Raaste me jitne if aaye, unki saari conditions ∧ se jod do. Bas wahi path constraint hai.
| Symbol | Bolo | Matlab | Kab sach |
|---|---|---|---|
| ∧ | AND | dono chahiye | dono sach hone pe |
| ∨ | OR | koi ek chal jaayega | kisi ek ke sach hone pe |
Path constraint me hamesha AND hi aata hai, kabhi OR nahi. Kyunki ek path pe chalte waqt tumhe har if ko ek-ek karke paar karna hota hai — sab. Question ke chaaron options dekh lo, sab me sirf ∧ hai.
if x > 0: if x > 5: if x > 20: print("TOP")
def n(): a = input() # pehla number if a > 0: b = input() # DUSRA number if b > 0: print("DONO POSITIVE")
a > 0 ∧ a > 0 nahi likha — kyunki dusra input() ek naya number laata hai. Jaise ATM do baar PIN maange: dono baar alag cheez, chahe sawaal same ho.
Agar program 10 baar input maange to a, b, c, d… naam khatam ho jaayenge. Isliye naam dete hain r₀, r₁, r₂, r₃… — r matlab read, aur number matlab kaunsa-wala read. Ginti zero se shuru.
| Kaunsa input | Naam |
|---|---|
| pehla | r₀ |
| dusra | r₁ |
| teesra | r₂ |
| chautha | r₃ |
Teen baar input liya, teeno positive nikle. Constraint kya hoga?
10 baar chahiye to 10 if likhne padenge — pagal ho jaoge. To loop likh dete hain:
while True: r = input() if r <= 0: break # ← BAHAR nikal jao
Ye wahi kaam kar raha hai jo Step 06 wale nested if kar rahe the. Bas short me.
Nested if wala program 3 input ke baad apne aap khatam ho gaya tha. Loop apne aap nahi rukta — usko rokna padta hai, break se.
r ki value | r <= 0 | Kya hua |
|---|---|---|
| positive (7) | ❌ jhooth | break nahi chala → loop aage chalta hai |
| 0 ya negative (−3) | ✅ sach | break chal gaya → loop ruk gaya |
Loop aage chalne ke liye r > 0 chahiye. Loop rukne ke liye r <= 0.
Maan lo loop 3 baar chala, phir ruk gaya:
| Read | Kya hua | Constraint |
|---|---|---|
| r₀ | chala | r₀ > 0 |
| r₁ | chala | r₁ > 0 |
| r₂ | chala | r₂ > 0 |
| r₃ | ruk gaya | r₃ <= 0 |
Jitni baar loop chala, utne > 0. Aur phir aakhir me ek <= 0 jisne loop ko roka.
Loop 2 baar chala phir ruk gaya. Constraint kya hoga?
Loop 2 baar chala, par aakhri wala r₂ hai — r₁ nahi. Teeno case saath rakh ke dekho:
| Loop kitni baar | Constraint | > 0 waale | jisne roka |
|---|---|---|---|
| 1 | r₀>0 ∧ r₁≤0 | r₀ | r₁ |
| 2 | r₀>0 ∧ r₁>0 ∧ r₂≤0 | r₀, r₁ | r₂ |
| 3 | r₀>0 ∧ r₁>0 ∧ r₂>0 ∧ r₃≤0 | r₀, r₁, r₂ | r₃ |
> 0 waale r₀ aur r₁ → yaani 0 se 1 tak> 0 waale r₀, r₁, r₂ → yaani 0 se 2 takHar baar aakhri number ek kam. Aur rokne waala hamesha usse agla.
n daal doMaan lo loop n baar chala — n matlab koi bhi number: 2, 5, 100, kuch bhi. Upar wale pattern se seedha:
> 0 waale | r₀ se r₍ₙ₋₁₎ tak → i = 0 se n−1 |
| rokne waala | rₙ, constraint rₙ ≤ 0 |
Isko chhota likhne ke liye ek symbol use karte hain: ⋀
Iska matlab sirf itna hai: "i ko 0 se n−1 tak ghumao, har baar rᵢ > 0 likho, aur sabko AND se jod do."
Bilkul waise hi jaise 1+2+3+…+100 ki jagah Σ likhte hain. Nayi cheez kuch nahi — bas short form.
// Add positive inputs until a zero or negative integer is read. int sumUntilZero(int a) { int sum = a; while (true) { // constant — ye branch hai hi nahi x = sym_input(); // har baar naya: r₀, r₁, r₂ … if (x <= 0) { // ← ASLI branch break; } sum = sum + x; } return sum; }
"Choose the appropriate path constraint (PC) for the while loop with a sequence of n true outcomes followed by a false."
| Loop outcome | Code me kya hua | Constraint |
|---|---|---|
| true — aur chalo | x <= 0 jhooth → break skip | rᵢ > 0 |
| false — nikal jao | x <= 0 sach → break | rₙ ≤ 0 |
| Opt | Galti |
|---|---|
| B | a ko index bana diya — par a to sum ki starting value hai, ginti nahi. Upar se ≥ 0: 0 to loop rok deta hai, chalata nahi. |
| C | [0,n] matlab n+1 baar chala — ek zyada. Question ne n maanga tha. |
| D | Teen galtiyan ek saath: ginti zyada, ≥ 0 galat, aur < 0 jo 0 ko miss kar deta hai — jabki 0 break karta hai. |
1. Ginti 0 se shuru — n baar chala matlab index 0 se n−1.
2. Boundary: <= ka ulta > hai, >= nahi.
3. Jo variable kisi if me aaya hi nahi (jaise a), wo constraint me aa hi nahi sakta.