# Python Loops with CS50

**အရင်အပတ်ကတော့ conditions အကြောင်းပြောခဲ့ပါတယ်။ ဒီတစ်ပတ် week 2 မှာတော့ ပိုပြီးစိတ်၀င်စားစရာကောင်းတဲ့ Loop တွေအကြောင်းကို အဓိကပြောခဲ့ပြီး ကျန်တဲ့ list, dictionary တွေအကြောင်းကိုလည်း ဖြည့်ပြောသွားခဲ့ပါတယ်။**

**Loop ဆိုတာ ကိုယ်ထပ်ခါထပ်ခါ လုပ်ချင်တဲ့ code block ကို သတ်မှတ်ထားတဲ့အကြိမ်ရေအတိုင်း လုပ်ပေးတဲ့ control flow structure ဖြစ်ပါတယ်။ တူညီတဲ့ action တွေကို ထပ်ခါထပ်ခါလုပ်ဖို့ တူညီတဲ့ function တွေကို ကြိမ်ဖန်များစွာထပ်ရေးနေတာက program ကို ကြည့်ရတာရှုပ်ထွေးစေပါတယ်။**

**Loop ဆိုတဲ့နေရာမှာ အကြမ်းအားဖြင့် Loop နှစ်ခုရှိပါတယ်။ while loop နဲ့ for loop တို့ဖြစ်ပါတယ်။**

**while loop နဲ့ for loop ကိုသုံးတဲ့နေရာမှာ conditional တွေစစ်တုန်းကလိုပဲ သူ့ရဲ့သတ်မှတ်ထားတဲ့ indentation အတိုင်းရေးပေးရပါတယ်။ ဘယ် code block ကို loopပတ်မယ်၊ ဘယ် function တွေကိုတော့ loop အပြင်ဘက်မှာထားမယ်ဆိုတာ‌တွေက အလွန်အရေးကြီးပါတယ်။ Indentation မှားတာနဲ့ error တက်နိုင်ပါတယ်။ Default indentation အနေနဲ့ space (၄) ခုစာ ဒါမှမဟုတ် Tab တစ်ခုစာ အဖြစ် သတ်မှတ်ထားပါတယ်။**

```python
num = 0
while num < 3:
    print("hello")
    num+=1 

Output : hello
         hello
         hello
```

**အရင်ဆုံး loop တွေထဲမှာမှ ပထမဆုံးဖြစ်တဲ့ while loop အကြောင်းသင်ခဲ့ရပါတယ်။ While loop ဟာသူ့ရဲ့နောက်က condition မှန်နေသရွေ့ loop ပတ်ပါတယ်။ အဲ့တာကြောင့် အကြိမ်ရေဘယ်နှခေါက် loop ပတ်ရမယ်ဆိုတာ (iterations range) မသိတဲ့ အခြေအနေတွေမှာသုံးလေ့ရှိပါတယ်။ variable တစ်ခုက ဖော်ပြထားတဲ့ conditionနဲ့မှန်လားဆိုတာစစ်ပါတယ်။ မှန်တယ်ဆိုရင် မှန်တဲ့အခြေအနေအောက်မှာရေးထားတဲ့ code တွေကို run စေပါတယ်။ condition မှန်နေသ၍ loop ပတ်တာကြောင့် condition ကိုထိန်းတဲ့အခြေအနေတစ်ခုတော့ လိုအပ်ပါတယ်။ အဲ့တာမပါခဲ့ရင် infinite loop ပါဖြစ်သွားနိုင်တာကြောင့် ဂရုစိုက်သင့်ပါတယ်။ မမှန်ရင် ဆက်လုပ်ရမယ့်အလုပ်တွေကိုတော့ else ဆိုတဲ့ keyword ကိုသုံးပြီး ဖြည့်သွင်းရေးသားလို့လည်းရပါသေးတယ်။**

**while ပြီးရင်တော့ဒုတိယ loop ဖြစ်တဲ့ for loop ပဲဖြစ်ပါတယ်။ for loop ကတော့ တိကျတဲ့ range  တစ်ခု၊ string၊ list တို့နဲ့ တွဲသုံးပါတယ်။  သူကလည်း while loop လိုပဲ သတ်မှတ်ထားတဲ့ indentation နဲ့အတူတွဲရေးရပါတယ်။သူနဲ့တွဲသုံးတဲ့ function လဲရှိပါတယ် အဲ့တာကတော့ range() ပဲဖြစ်ပါတယ်။ အဲ့မှာဆိုရင်တော့ range ထဲ့မှာပတ်မယ့်အကြိမ်အရေအတွက်ကိုထည့်လိုက်ရုံပါပဲ။**

```python
for i in range (3):
    print(i)

Output : 0
         1
         2
```

**ဒီမှာဆိုရင်သုံးခါ loop ပတ်မှာဲဖြစ်ပါတယ်။ range တွေက 0 ကနေ စလေ့ရှိပီး ကိုယ်ထည့်ထားတဲ့ ဂဏန်းထပ် ၁ ခါ လျော့ပြီး Loop ပတ်ပါတယ်။  ဥပမာ range(3) ဆိုရင် သူ့ထဲမှာပါမယ့် item တွေက 0,1,2 ပဲဖြစ်ပါတယ်။**

**Python မှာ underscore "\_" ကို anonymous variable လို့ခေါ်ပြီး သူကနောက်ဆုံးသုံးခဲ့ဖူးတဲ့ value ကို store လုပ်ပေးပါတယ်။တူညီတဲ့ stringတစ်ခုကို တစ်ခါမက‌ output ထွက်စေချင်ရင် အဲ့ string ကို ထွက်စေလိုတဲ့အကြိမ်အရေအတွက်နဲ့ မြှောက်လို့ရပါတယ်။ python မှာ အ‌မြှောက်သင်္ကေတကို( \* )နဲ့ဖော်ပြပါတယ်။ /n ကတော့ စာကြောင်းအသစ် ဖန်တီးချင်တဲ့နေရာမှာသုံးတဲ့ keyword ဖြစ်ပါတယ်။ loop တွေကို အခြေအနေစစ်ပြီး ဆက်အလုပ်လုပ်စေချင်တဲ့အခါ continue ကို သုံးပြီး ၊ loop ကို ရပ်စေချင်တဲ့ အခါမှာတော့ break ကိုသုံးပါတယ်။**

**List ဆိုတာ data type တွေ အတူတူ (သို့) data type တွေအမျိုးမျိုး ကို variable တစ်ခုထဲကို store လုပ် ပေးနိုင်တဲ့ python ရဲ့ data type တွေထဲကတစ်ခုဖြစ်ပါတယ်။ listကို  square brackets " \[ \] " နဲ့‌ရေးရပြီး duplicate(တူညီအရာတစ်ခု နှစ်ကြိမ်ထပ်) values လက်ခံပါတယ်။ listမှာ indexပါရှိပြီး 0 ကနေ စရေတွက်ပါတယ်။**

```python
students = ["Item1", "Item2","Item3"]
print(students)

Output : ['Item1', 'Item2','Item3']
```

**listရဲ့ထိပ်ဆုံးက itemကို အဲ့ listရဲ့ index\[0\] လို့ သတ်မှတ်ပါတယ်။ list က mutable(ပြောင်းလို့ရ)ဖြစ်တဲ့အတွက် itemတွေကို ဖြုတ်၊သွင်း၊ လဲလှယ်လို့ရပါတယ်။  item ကတော့အကန့်သတ်မရှိထည့်လို့ရပါတယ်။ len() ဆိုတဲ့ function ကတော့ list ထဲမှာရှိတဲ့ item ကိုရေတွက်ပေးတာပဲဖြစ်ပြီး len() ကို string နဲ့လည်းသုံးလို့ရပါတယ်။**

**Dictionary ကို curly brackets "{}" နဲ့ ‌‌ရေးရပြီး "key" : "value " ဆိုပြီး အတွဲလိုက်လေးရှိပါတယ်။  dictionary တွေရဲ့  index ကို key နဲ့သတ်မှတ်ပါတယ်။ duplicate ဖြစ်လို့မရတဲ့အတွက် key တွေတူလို့မရပါဘူး။ရှေ့က ‘item တွေက key ဖြစ်ပြီး နောက်က item တွေက value တွေဖြစ်ပါတယ်။ key ရှိပြီး value မရှိရင်တော့ None ဆိုပြီးရေးလို့ရပါတယ်။ for loop ကို dictionary မှာ ပတ်မယ်ဆိုရင် key တွေကိုပဲ loopပတ်သွားပါတယ်။ loop ထဲမှာ loop ထည့်ရေးတာကို nested loops လို့ခေါ်ပါတယ်။**

```python
dict = {"Hermione": "Gryffindor",
    "Harry": "Gryffindor",
    "Ron": "Gryffindor",
    "Draco": "Slytherin",
    "Dudley Dursley": None
    }
print(dict["Ron"])
print(dict["Dudley Dursley"])

Output : Gryffindor 
         None
```

**ဒီတစ်ခေါက် Week - 1 မှာကတော့ loop တွေနဲ့ list, dictionary တွေအကြောင်းကိုပြောခဲ့ပါတယ်၊၊ နောက်တစ်ပတ်မှာ ပိုကောင်းတဲ့အကြောင်းအရာတွေနဲ့ ပြန်ဆုံကြပါမယ်။**

**ဖတ်ရှုပေးလို့ ကျေးဇူးအများကြီးတင်ပါတယ်။**

---

***Weekend Warriors***
