0% found this document useful (0 votes)
715 views

Python Network Programming (Myanmar Version - I) by Khant Phyo

The document is an introduction to using Python for network engineering tasks. It aims to provide Python scripts and tools that can help automate network configuration and make tasks more efficient. The book covers basic Python concepts like variables, data types, operators, functions and classes that are relevant for network programming. It also includes examples of scripts for tasks like configuring VLANs, routing and interfacing with network devices.

Uploaded by

Hsu Lin Htet
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
715 views

Python Network Programming (Myanmar Version - I) by Khant Phyo

The document is an introduction to using Python for network engineering tasks. It aims to provide Python scripts and tools that can help automate network configuration and make tasks more efficient. The book covers basic Python concepts like variables, data types, operators, functions and classes that are relevant for network programming. It also includes examples of scripts for tasks like configuring VLANs, routing and interfacing with network devices.

Uploaded by

Hsu Lin Htet
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 203

http://crossnetmm.

com/

1
http://crossnetmm.com/

Table of contents
#Title# .Page

Intro!! 6

1.What is Program 6

1.1. How Computer Work 7

1.2. Basic Computer Work flow 10

1.4. The Language which Can spoke to the Computer 12

1.4.1 Print out Hello, world by Assembly language 13

1.4.2 Basic Knowledge of Assembly 14

1.4.3 Assembly Register 16

1.5 Compiler vs Interpreter 18

1.5.1 Print Hello, world With C Language 18

1.6 Compared HelloWorld in Different Language 20

2. Introduction to Python 21

2.1History of Python 21

2.2 Python Installation 21

2.3 What can we do with Python 24

2.4 What python is? 24

2.4.1 Python Interactive mode & Script Mode 25

2.5 Very first Program “Hello world” and its syntax, key-words 26

2.6 Python Key-words 29

2.7 single vs double quotes 31

2.8 Variable 31

2.8.1 Numbers 34

2
http://crossnetmm.com/

2.8.2 String 35

2.8.2.1 int() str() float() 37

2.8.3 Python Lists 37

2.8.4 Python Tuples 40

2.8.5 Python Dictionary 41

3. Python Operator 45

3.1 Arithmetic Operators 45

3.1.1 Addition ( + ) 46

3.1.2 Subtraction ( - ) 47

3.1.3 Multiplication ( * ) 47

*********** Python User Input *********** 48

*********** Python 2.7(division, Modulus, Exponentiation) *********** 51

*********** Python 3.7(division, Modulus, Exponentiation) *********** 52

3.2 python Comparison operator 53

3.3 Python assignment Operator 56

3.4 Python Membership Operator 58

3.5 Python Identity Operator 59

4. Python Decision maker 60

4.1 if statement 60

Python Indentation 62

4.2 Python if else statement 64

4.3 Python if .. elif .. else statement 66

4.4 Nested if statement 69

5. Python Loops 70

5.1 Python for loops 70

3
http://crossnetmm.com/

5.2 Python While loop 75

5.2.1 Infinite loop 77

5.2.2 Else statement with while loop 77

5.3 Nested Loop 78

5.4 Loop control statement 80

5.4.1 Break Statement 81

5.4.2 Continue Statement 82

5.4.3 Python Pass Statement 83

6. Python - Date & Time 83

6.1.1 Python Datetime, Date, Time 84

6.1.2 Date object to represent a date 85

*********** import vs from …. import *********** 85

*** >> Using from module import * << is not Best practice *** 88

6.2 Format date using strftime() 91

6.3 strptime() 93

6.4 Current time of time zone 94

** pip installation ** 94

6.5 Python sleep() 95

7. Python File I/0 (input/output) 96

7.1 Python File Handling 99

7.1.2 read file 99

7.1.2 Python file mode 101

7.1.3 Python write file 102

7.2 Python OS module 103

7.2.1 Renaming and deleting file 103

4
http://crossnetmm.com/

7.2.2 Python Directory Process 104

8. Python Error Handling 104

8.1 Python try ……… except 108

8.2 Python Try……except……else 116

8.3 Python try……except……else……Finally 118

9. Python - Function 122

9.1 User Defined Function 122

9.2. Python Function Argument 123

9.2.1 Required arguments 123

9.2.2. Keyword Argument 125

9.2.3. Default Argument 126

9.2.4. Python Arbitrary Arguments 126

9.2.5. lambda functions in Python 127

9.3 Python recursive function 128

10. Intro OSI 7 Layer 129

10.1.Physical Layer 131

10.2. Data Link Layer 131

10.3. Network Layer 133

10.4. Transport Layer 134

10.5. Session Layer 137

10.6. Presentation Layer 138

10.7. Application Layer 140

11. Cisco Lab basic 140

11.1 Cisco CLI Level 141

11.2 Login Lab 142

5
http://crossnetmm.com/

11.3 Intro to VLAN 143

11.4 VLAN lab 1 145

11.5 VLAN lab 2 146

12 Network Lab Setup 150

12.1 History of GNS3 151

12.2 Why window user Need Gns3VM 152

12.3 GNS3 install ( with Several ways) 153

12.3.1 linux user to get ppa support 154

12.3.2 install GNS3 with pip3 157

12.3.3 Common GNS3 error with pip 159

12.4. Get virtual machine 161

12.5 Get Gns3vm 164

12.6 Connect Gns3 with Gns3vm 165

12.7 Get cisco Device image file (IOS/IOU) 168

12.7.1 IOU license 172

12.8. Get Python Container & Ubuntu Docker image (GNS3 Appliance) 174

13. Python Telnet Script 180

14. Config vlan with for loop 185

*** Python For Network Engineer ***

Intro!!

6
http://crossnetmm.com/

အားလံးု ပဲ မဂၤလာပါဗ်ာ…. “Python For Network Engineer” ဆုိတ့ ဲ စာအုပ္ကို ေရးရတဲ့ ရည္ရြယ္ခ်
က္ကေတာ
့ Network Programming နဲ့ပါတ္သက္ျပီး ျမန္မာလိုေရးထားတဲ့ စာအုပ္မေတြ့ တာေျကာင့္ စျပီးေ
ရးျဖစ္သြားတာပါ။ Network သမားေတြ အေနနဲ့ router ေတြ switchေတြ configure ခ်တဲ့ေနရာမွာ
script/Program ေတြကိုသံုးျပီ ပိုျပီးျမန္ဆန္ေစဖို့ အမွားနည္းေစဖုိ့နဲ ့ ကိုယ့္အလုပ္အေနထား အရ ကိုယ္လုပ္ရ
မွာေတြန့ဲ ကိုက္ေအာင္ ကိ္ ယ
ု ကိုယ္တုိင္ ဖန္တီးနုိင္ေစဖုိ့ ရည္ရြယ္ပါတယ္။ Network Programming အတြက္
သံုးရမယ့္ Language အေနနဲ့ ကေန Python နဲ့ပဲ ေရးသားသြားမွာပါ။ Program ေရးတယ္ဆုိေပမယ့္ GUI အ
ပိုင္းေတြ Data Base အပိုငး္ ေတြ ပါ၀င္မွာ မဟုတ္ပါဘူး။Python basic concept ေတြ Function ေတြ Class
ေတြ Operator ေတြ Libruary ေတြ ကု္ သံ
ိ ုးျပီး Network ပိုင္းမွာ အသံုး၀င္မယ့္ ကိုယ္ပိုင္ Scriptေတြ
Toolsေတြ ကို ဖန္တီးေရးသားျပမွာပါ။

ဘာလိ့ လဲ
ု ဆုိေတာ
့ က် ြန္ေတာ
္ တု့ ိ network engineer ေတြ အေနနဲ့ programming
language တစ္ခုကို ေလ့လာျပီး network_config script ေတြေရးမယ္ဆိုရင္ Configuration ခ်
တာေတြ analysis လုပ္တာေတြ ျပီးေတာ
့ network တစ္ခုကို implementation လုပ္တ့ ေနရာမွ
ဲ ာ လြ
ယ္ကူလ် ွင္ျမန္ေစမွာ ျဖစ္ပါတယ္။။နမူနာ တစ္ခုေျပာရရင္ vlan ေတြ ထပ္ crete လုပ္မယ္ name ေ
တြေပးမယ္ ျပီးေတာ
့ route ေတြထပ္add မယ္ စတာေတြကို လူက္ ယ
ို ္ တုိင္ လုပ္မယ္ဆုိ comman ေ
တြကို တစ္ေျကာင္းခ်င္း တစ္လံုး၀င္ တစ္လံုးထြက္လိုက္ရုိက္ေနရမယ္။ အဲ့လို လုပ္မယ့္ အစား
program script တစ္ခု ေရးထားျပီး run လိုးက္မယ္ဆုိ အမွားနည္းမယ္ (typing error) ျပီးေတာ

နာရီ၀က္တစ္နာရီေလာက္ျကာမယ့္ အခ်ိန္က ၃မိနစ္ေလာက္နဲ ျ့ ပီးမယ္ ;-)

1.What is Program

Program ဆုိတာ set of instruction ပါပဲ။ ဘယ္လိုမ်ိဳးလဲ ဆုိေတာ


့ .. computer/ machine/
device လုပ္ရမယ့္ process ေတြကို အစီအစဥ္တက် ျဖစ္ေအာင္ step-by-step ေရးထားတဲ့ instruction
အစုအေ၀းျကီးပဲ ျဖစ္ပါတယ္.. ဥပမာအေနနဲ့ ေျပာရရင္ ျကက္ဥျပဳတ္မယ္ဆုိက် ပါစို ..

(1) မီးလာမလာ ျကည့္ပါ။


(2) မီးဖုိေခ်ာင္မာွ ျကက္ဥရွိမရွိ အရင္စစ္ပါ
(3) မရွိရင္ ပိုက္ဆံယူျပီး ဆုိင္မွာ အရင္သြား၀ယ္ပါ
(4) ေရထည့္ပါ။
(5) Boiler ကို ပလတ္ေပါက္တပ္ျပီး မီးဖြင့ပ
္ ါ
(6) ျကက္ဥ ကို ထည့္ထားပါ
(7) မိနစ္ ၃၀ ခန့္ ျကာရင္ အျပင္ထုတ္လိုက္ပါ
(8) အေအးခံျပီး စားလိ့ ရပါျပီ
ု ;-)

7
http://crossnetmm.com/

အေပၚက instruction ေတြအတုိင္း အစဥ္လိုက္ လုပ္သြားရင္ အဆင္ေျပေျပျပီးသြားပါလိမ့္မယ္ တစ္


ကယ္လိ့ ု အစီအစဥ္မက် ပဲ တစ္ခ်က္ေလာက္က် န္ခဲ့ ရင္ ဥပမာ No.5 အခ်က္က် န္ခရ
ဲ့ င္ ျကက္ဥျပဳတ္က စားရမွာမ
ဟုတ္ေတာ
့ ဘူး လူအေနနဲ့ကေတာ
့ ေမ့က် န္ရင္ က် န္မွန္းသိျပီး လုပ္လိုက္လိ့ ရေပမယ
ု ့္ Computer အေနနဲ့က်ေ
တာ
့ လူသားလိ့ မစဥ္
ု းစားနုိင္တ့ အတြ
ဲ က္ေျကာင့္ ေပးတဲ့Instruction အတိုင္း ျကက္ဥရွိမရွိျကည့္ ရွိရင္္ ထည့္ျပီး
ျပဳတ္ နာရီ၀က္ျကာရင္ အျပင္ကိုထုတ္ အဲ့လုိလုပ္သြားမွာ အစဥ္လိုက္ တစ္ေသြးမတိမ္း လိုက္လုပ္သြားမွာ ျဖစ္ပါ
တယ္။ (ေျပာရရင္ေတာ
့ ေမာင္ပံုကို ေခြးျကည့္ခုိင္းသလိုေပါ့ ) .. ။ အဲ့ေျကာင့္ computer ကို ခိုင္းမယ္ဆုိ အစီအ
စဥ္တက် တစ္ဆင့္ခ်င္း ခိုင္းရပါမယ္။

Program ေရးတဲ့ သူေတြကို Programmer လိ့ ေခၚျပီ


ု း Programming လုပ္တယ္လိ့ ု ေျပာက် ပါတယ္
Programming လုပ္မယ္ဆုိရင္ Computer ေတြကို ခိုငး္ ဖုိ့ instruction ေတြေရးဖုိ့ အတြက္ computer ေတြ
ဘယ္လုိ အလုပ္လုပ္လဲ ျပီးေတာ
့ ဘယ္လိုေျပာျပီး ခုိငး္ ရမလဲ ဆုိတာေတြကိုသိဖုိ့ နားလည္ဖုိ့လုိအပ္ပါတယ္။ ေျ
ပာခ်င္တာက ရွရွားျကီးနဲ့ အတူအလုပ္လုပ္မယ္ဆုိ ရွရွားလို တက္ရမယ္ တရုတ္ျကီးနဲ အ
့ လုပ္လုပ္မယ္ဆုိ တရု
တ္လိုတက္မွ ကိုယ္က သူနားလည္အာင္ ေျပာနုိင္မွ အဆင္ေျပမွာေပါ့ဗ်ာ့။ သူက ကိုယ့္ဘာသာ စကားတက္ေန
ရင္ေတာ
့ တစ္မ်ိဳးေပါ့။ computer/device ေတြ စက္ေတြကို ခိုင္းမယ္ဆုိလဲ အဲ့ေကာင္ေတြ နားလည္တဲ့
ဘာသာစကား(programming language) ကို သိမွ ခုိငး္ လိ့ ရမွ
ု ာေပါ့ဗ်ာ။

1.1. How Computer Work

Computer ျကီးကို နားလည္ဖုိ့ နဲ့နဲ ေလာက္ျကည့္လိုက္က် ရေအာင္ဗ်ာ သူမွာ ဘာေတြ ပါတယ္ ဘယ္
လိုလုပ္တယ္ဆုိတာ အျကမး္ဖ်င္းနားလည္ေနေတာ
့ Code ေရးရတာ ပိုအဆင္ေျပတာေပါ့ဗ်ာ

8
http://crossnetmm.com/

ပံုမာွ ဆုိ computer motherboard တစ္


လံုးမွာ ပါ၀င္တ့ ဲ အစိတ္အပိုင္းေတြကို ေဖာ္ျပထားပါတယ္။ အဲ့အစိတ္အပိုင္းေတြ အားလံုးကို အဓိကအားျဖင့္
North Bridge နဲ့ South Bridge လိ့ ု ေခၚတဲ့ IC cheap နွစ္ခု ကထိန္းခ်ဳပ္ပါတယ္။

9
http://crossnetmm.com/

အဲ့ Cheap နွစ္ခုကို ဘာလိ့ ု North နဲ S


့ outh ခြဲေခၚလဲဆုိေတာ
့ … သူတ့ ရဲ
ုိ ့ MotherBoard ေပၚမွာ တည္ရွိတ့ ဲ
location_Map အေနအထားေျကာင့္ပါ..North Bridge သည္ motherboard ရဲ့ North(အေပၚပိုင္း) မွာ၇ွိျ
ပီး South_Bridge သည္ Mother Board ရဲ့ South(ေအာက္ဘက္ျခမ္း)မွာ တည္ရွိပါတယ္ အစိတ္အပိုင္းေ
တြ အားလံုးကိုေသးငယ္တဲ့ wire လမ္းေျကာင္းေလးေတြန့ဲ ခ်ိတ္ဆက္ ထားပါတယ္။
သူတ့ ေတြ
ုိ တစ္ခုန့ဲ တစ္ခု ဘယ္လိ့ ု ဆက္သြယ္က် လဲဆုိေတာ
့ wires ေတြကေနတစ္ဆင့္ on/off
signal (power ေပးမယ္မေပးဘူး) ေတြအေနနဲ့ သြားပါတယ္ on(voltage ေပးရင္) ဆုိတာ One ျဖစ္ျပီး
off(voltage မေပးရင္) ကေတာ
့ Zero ပါ။ computer hardware ေတြသည္ on/off တစ္နည္းေျပာရရင္
0/1 ျဖစ္တ့ ဲ Binary Form ကိုပဲ နားလည္တာပါ။ dataေတြ control signal ေတြအားလံုးကို 0/1 binary
form အေနနဲ ပ
့ ိုေဆာင္ျပီး အခ်င္းခ်င္း ဆက္သြယ္အလုပ္ လုပ္က် ပါတယ္။ 0/1 on/off signal ေတြကို ၀ါယာျ
ကိုးေပၚမွာ အခ်ိန္အပိုင္းအျခား (Time Frame) တစ္ခု ျခားျပီး ပို့ေဆာင္ပါတယ္..

၀ါယာတစ္ပင္ကို 1bit (1 byte = 8 bit )လိ့ ယူ


ု ဆျပီး 1 bit မွာ ျဖစ္နုိင္ေျခ 2 ခုရွိပါတယ္ 0ျဖစ္ရင္ျဖစ္မ
ယ္ မျဖစ္ရင္ 1 ျဖစ္ပါမယ္။ ၀ါယာနွစ္ပင္ဆုိရင္ 2bit ျဖစ္ျပီးသူ မ
့ ွာ 00, 01, 10, 11 ဆုိတ့ ဲ ျဖစ္နုိင္ေျခေလးခုရွိပါ
တယ္။ 3bit ဆုိရင္ေတာ
့ 000, 001, 010, 011, 100, 101, 110, 111 ဆုိျပီး ျဖစ္နုိင္တ့ ဲ Form ေလးခုရွိပါတယ္
formular မေနနဲ့ ကေတာ
့ 2n ပဲျဖစ္ပါတယ္။ wire 1 ပင္ဆုိ 21 ျဖစ္တ့ အတြ
ဲ က္ possibility 2 ခုရွိပါတယ္ wire
3 ပင္ဆုိ 22 ျဖစ္တဲအတြက္ ျဖစ္နုိင္ေခ် 4 ခု ရွိပါတယ္။ 1byte မွာ 8bit ရွိပါတယ္။ Charater တစ္ခုကို 1byte
ယူပါတယ္ ဘယ္လိုမ်ိဳးလဲဆုိေတာ
့ keyboard ကေနa လု့ ိ ရိုက္ထည့္လုိက္ေပမယ့္ computer တစ္ကယ္တမ္း
နားလည္တာက a ဆုိျပီးနားမလည္ပါဘူး ASCII code ျဖစ္တ့ ဲ 0110 0001 ဆိုျပီး Binary Form အေနနဲ့
နားလည္တာပါ ဥပမာ လူသားေတြက hope လိ့ ေရးလိ
ု ုက္ ရင္လဲ computer နားလည္မွာက 0110 1000 0110
1111 0111 0000 0110 0101 ဆုိျပီးပဲ နားလည္တာပါ။

10
http://crossnetmm.com/

North Bridge ကို memory controller hub (MCH) လိ့ လဲ


ု ေခၚတယ္ဗ်ာ့.. North Bridge ဟာ
အဓိကအေနနဲ့ CPU, RAM, AGP(Accelerated Graphic Port) ေတြျကားမွာ communication ကုိတာ၀န္ယူလု
ပ္ေဆာင္ ပါတယ္။ ဥပမာအေနနဲ့ ေျပာရရင္ CPU ဟာ RAM ေပၚမွာရွိတ့ ဲ Data လို လုခ
ိ ် င္တယ္ဆုိက် ပါဆု့ ိ CPU နဲ့
RAM က တုိက္ရိက
ု ္ ခ်ိတ္ဆက္ထားျခင္းမရွိေလေတာ
့ ျကားမွာရွိတ့ ဲ North Bridge ကို CPU ကေနလွမ္းေျပာရတယ္
ဗ်ာ့ ဘယ္Address က data ေ
တြလုိခ်င္တယ္ဆုတ
ိ ာကိုေပါ့ အဲ့
ခ်ိန္က် မွ North Bridge ကေနျ
ပီ CPU လုိခ်င္တ့ ဲ data ကို
RAM ေပၚကေနလွမ္းယူျပီး
CPU ကို ပို့ေဆာင္ေပးပါတယ္။
South Bridge ကိုက် I/O
controller Hub(ICH) လိ့ လဲ
ု ေ
ခၚတယ္ဗ်ာ့။ သူကေတာ
့ အဓိက
အားျဖင့္ computer တစ္လံုးရဲ့
I/O functions ေတြျဖစ္တ့ ဲ
USB, audio, serial, the
system BIOS, the ISA bus, the interrupt controller and the IDE channels ေတြကို တာ၀န္ယူ ထိန္း
ခ်ဳပ္ပါတယ္..

1.2. Basic Computer Work flow

11
http://crossnetmm.com/

ေအာက္ကပံုမွာ ျကည့္လိုက္မယ္ဆုိရင္ Computer တစ္လံုးရဲ့ အေျခခံ Process Flow ကို ျမင္ရမွွာျဖစ္


ပါတယ္။ ပထမဆံးု Input Devices ေတြျဖစ္တ့ ဲ Keyboard, Mouse, Joy Stick, Light pen, Scanner,
Microphone, Bar Code Reader ေတြကေန input data ေတြ ၀င္လာပါမယ္။ Computer အေနနဲ့ input
device(Eg,. KeyBoard) ကေန၀င္လာတဲ့ input Dataေတြ Instruction ေတြကို RAM အရင္သိမ္းဆည္းျ
ပီး အဲ့RAM ကေနတစ္ဆင့္ KeyBoard ကရုိက္ထည့္သမွ ် ကိုလဲ Monitor မွာ ျမင္ေအာင္ တစ္ခါတည္း တုိက္
ရုိက္ျပေပးပါတယ္။

ျပီးေတာ
့ ၀င္လာတဲ့ instruction ေတြကိုေတာ
့ RAM ကေန တစ္ဆင့္ CPU(Central Processing
Unit ကို ပို့ေဆာင္ေပးပါတယ္။ တြကခ်က္တာ စတဲ့ processေတြ အတြက္ပါ။ CPU သည္ လူသားေတြရဲ့ ဦးေ
နွာက္နဲ့ တူပါတယ္ တြက္တာခ်က္တာေတြ computer မွာ ပါ၀င္တ့ ဲ အစိတ္အပုိင္းေတြ ရဲ့ operation မ်ားကို ထိ
န္းခ်ဳပ္တာေတြ စတာေတြကို (CPU ရဲ့ အဓိက တာ၀န္ေတြျဖစ္ပါတယ္ ) CPU ရဲ့ cache Memory ေပၚမွာ ထား
ပါတယ္။ cache memory သည္လဲပဲ RAM အမ်ိဳးအစား ထဲမွာပါပါတယ္ processing speed ပိုျမန္ခ်င္ေစဖုိ့ အ
တြက္ CPU နဲ့ အနီးဆံးု ေနရာမွာ ရွိေနတာပါ ။ သူ့သည္ RAM (Main Memory) နဲ့ CPU ျကားမွာ buffer
အေနနဲ့လဲ လုပ္ေဆာင္ေပးပါတယ္ .. CPU သည္ ၀င္လာတဲ့Data ေတြကို Instruction အရ execute လုပ္
လိုက္ပါတယ္.. CPU ကေန ရလာတဲ့ result ကို RAM ကေနတစ္ဆင့္ output devices ေတြျဖစ္တ့ ဲ
Monitor တု့ ိ Printer တု့ ိ ကေန ျပေပးပါတယ္။

12
http://crossnetmm.com/

RAM(Random Access Memory) ကို Main Memory လု့ လဲ


ိ ေခၚပါတယ္။ RAM သည္ ကြန္ပ်ဴတာ
run ေနစဥ္ အတြင္း လက္ရွိ ရွိေနတဲ့ အခ်က္အလက္ကိုျမန္ျမန္ဆန္ဆန္သိမ္းဆည္ ျမန္ျမန္ဆန္ဆန္ ထုတ္ျပနုိ
င္ေသာ
္ လဲ ယာယီပဲသိမ္းနုိင္ပါတယ္။ RAM ကို capacitor ေတြန့ဲ လုပ္ထားတာျဖစ္လ့ ို computer Power on
ထားခ်ိန္ electronic current စီးေနခ်ိန္မွာသာ ရွိေနတာပါ။ RAM မွာ Data ေတြကို ဘယ္လိုမွတ္လဲဆုိေတာ

RAM မွာရွိတ့ ဲ Capicator ေတြကို charged/discharged လုပ္တ့ ဲ ပံုစံန့ဲ မွတ္ပါတယ္။ charged ဆုိရင္ 1ျဖစ္ျ
ပီး discharged ဆုိရင္ေတာ
့ 0 ဆုိတ့ ဲ Binary Form နဲ့မွတ္ပါတယ္။ Computer ပိတ္လုိက္တာနဲ့ current မ
စီးေတာ
့ တဲ့ အတြက္ Capicitor ေတြ discharge ျဖစ္ျပီးေတာ
့ ေပ်ာက္သြားမွာပါ။ အဲ့လုိမျဖစ္ေစဖုိ့ ပိတ္လိုက္လဲ
မပ်က္ခ်င္ဘူးဆုိရင္ Secondary Memory လိ့ ု ေခၚတဲ့ Hard Disk ေပၚမွာ သြားျပီး SAVE ထားမွ ေနာင္တစ္
ခ်ိန္လိုတ့ ဲ အခါ ျပန္သံုးလိ့ ရမွ
ု ာပါ။ Hard Disk က် သတၱဳျပားေပၚမွာ သံလိုက္ရည္ပါးပါးေလး သုတ္ထားတဲ့ သံျ
ပားေပၚမွာ မွတ္ပါတယ္။ သံလိုက္သဘာ၀ ျဖစ္တ့ ဲ north(N) နဲ့ south(S) ကို 0 နဲ့ 1 အေနနဲ့ ယူဆျပီးမွတ္ပါ
တယ္။ ပါ၀ါပိတ္လိုက္လဲ သူ့ဆီမွာက် data ကေတာ
့ ရွိေနမွာပါ။ Hard Disk မွာ data ဖတ္တဲ့ ႏွဳန္းက RAM
ေလာက္မျမန္ပါဘူး။

1.4. The Language which Can spoke to the Computer

အေပၚမွာလဲ ေျပာခဲပ
့ ါတယ္ Computer ေတြဟာ Machine Code ေတြ ျဖစ္္တ့ ဲ 0 နဲ့ 1 ကိုသာနားလ
ည္က် တာပါ။ Human Language ျဖစ္တ့ ဲ character, integer ေတြ စကားေတြကို နားမလည္ပါဘူး အဲ့ေတာ

computer နားလည္ေအာင္ ေျပာေပးနုိင္မယ့္ Low Level Programming Language နဲ့ ျဖစ္ျဖစ္ High Level
Programming Language နဲ့ ျဖစ္ျဖစ္ ေရးသားျပီး ခုိင္းေစက် ရပါတယ္။

Low Level/High Level Programming Language ေတြရဲ့ Source code(Human Readable)ေတြ


ကေနMachine Code သိ့ ေျပာင္
ု းလဲေပးတဲ့ Translator 3 မ်ိဳးရွိပါတယ္..

13
http://crossnetmm.com/

(1) Assembler- Assembly language ကေနMachine code အျဖစ္သ့ ို ေျပာင္းလဲေပးပါတယ္

(2) Interpreter- သူကက် instruction ေတြကို တစ္ေျကာင္းျပီးမွ ေနာက္တစ္ေျကာင္း Machine


Code ေတြ အေနနဲ့ translate လုပ္ပါတယ္။

(3) Compiler- Compiler အေနနဲ့ သူက Program ျကီးတစ္ခုလံုး Source Code ျကီးတစ္ခုလံုးကို
Machine code အေနနဲ့ ေျပာင္းျပီးမွ RUN ပါတယ္။

(4) Low Level Language မွာဆုိ Lower Levelျဖစ္တ့ ဲ Hardware ဘက္ျခမ္းနဲ့ အရမ္းနီးကပ္ပါတယ္
Hardware ေတြရဲ့ အလုပ္လုပ္ပံုန့ဲ ဆင္ပါတယ္။ Code ေရးရာတြင္ CPU architecture ေပၚမူတည္ျ
ပီးေျပာင္းလဲပါတယ္။ Program ေရးရင္လဲ Hardware ေတြ လုပ္ေဆာင္ပံုအတုိင္း တစ္ခုခ်င္း ေရး
သားရပါတယ္။ ဥပမာအေနနဲ့ ေအာက္က code ကိုျကည့္ပါ။

1.4.1 Print out Hello, world by Assembly language

Low Level Langauage ျဖစ္တ့ ဲ Assembly နဲ့ “Hello World!” ဆိုတ့ ဲ စာသားေလးတစ္္ေျကာင္းထု
တ္ဖုိ့ ေရးထားတာပါ။

14
http://crossnetmm.com/

စမ္းျကည့္ခ်င္တ့ ဲ သူေတြကေတာ
့ အဲ့
စာသား(Source Code)ေတြကို copy ကူးျပီး Text Editor တစ္ခုန့ဲ Hello.asm ဆုိျပီး save ပါ။ Soure
Code သည္ Computer ရဲ့ architecture ေပၚမူတည္ျပီး ကြဲျပားပါလိမ့္မယ္။ ခုကေတာ
့ Linux OS, intel
64bit CPU အတြက္ပါ Assembly Language အတြက္ Netwide Assembler(NASM) လိ့ ေခၚတဲ
ု ့
Assembler နဲ့ “ $nasm -f elf64 -o Hello.o Hello.asm “ ဆိုတ့ command
ဲ ေလးနဲ့ Compile လုပ္လို
က္ရင္ dot.o(*.o) ဆိုတ့ Object
ဲ fileေလး ထြက္လာပါ လိမ့္မယ္။ ဒီေနရာမွာ တစ္ခ်က္မွတ္ရမွာက NASM
သည္ assembler ပါ Compiler မဟုတ္ဘူး assemply အတြက္ compile လုပ္ေပးတယ္ဆုိတာေလးပါ။ အဲ့ဖုိ
င္ေလးကို execute လုပ္ဖုိ့ အတြက္ Link ခ်ိတ္ေပးဖုိ့လိုပါတယ္။ “ $ld Hello.o -o hello “ ဆုိတ့ ဲ
command နဲ့ လင့္ခ်ိတ္ေပးလိုက္မွ ထြက္လာတဲ့ Output ျဖစ္တ့ ဲ hello ဆိုတ့ ဲ file ေလးသည္ executable ျဖ
စ္ပါတယ္။ ေအာက္က ပံုကို တစ္ခ်က္ျကည့္ေပးပါ။

အဲ့ hello ဆုိတ့ ဲ Excutable fileေလးကို RUN လိုက္မယ္ဆုိရင္ Hello ဆုိတ့ ဲ output ေလးထြက္
လာပါျပီ..

15
http://crossnetmm.com/

1.4.2 Basic Knowledge of Assembly

အဲ့လို Hello, world ဆုိတာေလး ထြက္ဖုိ့အတြက္ High Level Language ေလာက္မလြယ္ကူပါဘူး။


Assembly ဆိုတ့ ဲ Low Level Language မွာ Program တစ္ပုဒအ
္ တြက္ အပိုငး္ သံုးပိုင္းပါတယ္။ Data
section, Text section နဲ့ Bss Section တု့ ပဲ
ိ ျဖစ္ပါတယ္။

16
http://crossnetmm.com/

အေပၚကပံုေလးကို ကြ ် န္ေတာ
္ တစ္ခ်က္ရွင္းျပေပးပါ့မယ္..

.data section မွာဆုိရင္ complie လုပ္တ့ ဲ ေနရာမွာ လုိအပ္မယ့္ data ေတြကို အရင္ define လုပ္ေ
ပးထားရပါတယ္။

.text section ကေတာ


့ တစ္ကယ္ run မယ့္ code ေတြကုိ ေရးထားပါတယ္။

ခုဒီcode မွာ မပါတဲ .့ bss section ကေတာ


့ ေနာင္က် သံုးမယ့္ data အတြက္ memory ေပၚမွာ ျကိဳ ျပီး
ေနရာယူထားရမယ္ အေျခအေနမွာ သံုးပါတယ္။

ျပီးေတာ
့ text db “Hello, world!”,10 မွာဆုိ db(define bytes) ဆုိတာသည္ define raw byte
of data ပါ။ code မွာ ထည့္ရမယ့္ data ေပါ့။ ျပီးေတ့ာ “Hello, world!”,10 ကေတာ
့ ေရွ မ
့ ွာေျပာခဲတ
့ ့ ဲ bytes
of data ပါ ..Hello, world ရဲ ့ h တုိ ့ e တုိ l့ တု့ ိ ေကာင္ေတြက single byte အ ေနနဲ ့ တည္ရွိတာပါ။ ျပီးေ
တာ
့ ေနာက္က 10 ဆုိတာကက် ေတာ
့ newline ကို ေျပာတာပါ။ \n ေပ့ါ။ text ဆုိတာက hello world! ဆိုတ့ ဲ
data ကို memory မွာ သိမ္းရင္.. သိမ္းမယ့္ memory address ကို ညြန္းဆုိေပးမယ့္ေကာင္ပါ။ code ကို
compile လုပ္ရင္ text ေနရာမွာ memory location ကို replace လုပ္ျပီး run သြားမွာပါ။

17
http://crossnetmm.com/

.text section မွာ ရွိေနတဲ့ global _start ဆိုတာကေတာ


့ ေရးကို ေရးရမွာပါ။ အဲ့တာက် မွ ဘယ္
ကေနစျပီး execute လုပ္ရမယ္ကို သိမွာပါ။ global သည္ linker ကို သံုးျပီး run လိုက္တဲ့အခ်ိန္မွာ memory
address သိေစခ်င္တ့ ဲ lable ေတြနဲ ့ တြဲ ျပီး ေျကျငာေပးရတာပါ။

ေအာက္က_start ဆုိတာကက် ေတာ


့ program တုိင္း အတြက္ မပါမျဖစ္ပါပဲ။ program ေတြကို စျပီး
execute လုပ္မယ္ဆုိ _start ကေန စျပီး လုပ္ပါတယ္။ အကယ္လိ့ ု Linker သည္ _start ကို မေတြ့ ရင္
error တက္လာပါလိမ့္မယ္။

1.4.3 Assembly Register

ေအာက္ကcode ေလးေတြနဲ ့ register ေတြကို ဆက္ျပီး ေလ့လာျကည့္က် ရအာင္ ဗ်ာ ။

18
http://crossnetmm.com/

ခုလက္ ရွိ run ေနတဲ ့ PC သည္ linux OS, CPU သည္ 64 bit processor ျဖစ္ပါတယ္။ ခု
helloworld ထုတ္ဖုိ လ
့ ိုအပ္မယ့္ register ေတြကို အရင္ တစ္ခ်က္ ေလ့လာျကည့္က် ရေအာင္။
Rax ဆုိတ့ ဲ register ထဲကို value 1 ထည့္လိုက္ပါတယ္။ 1 ထည့္လုိက္ခ်င္းအားျဖင့္ sys_write လုပ္မယ္လို
့ေျပာလိုက္တာပါ။ rdi ကေတာ
့ file descriptor ျဖစ္ျပီးေတာ
့ 0 သည္ ipute, 1 သည္ output, 2 သည္
error ပါ။ ခု output ထုတ္မွာျဖစ္လ့ ို rdi ထဲ ကို MOV ကို သံုးျပီး 1 ထည့္လိုက္ပါ။ rsi (buffer) ကေတာ

location of string ကို ထည့္ေပးပါမယ္။ Hello, world! ရွိေနတဲ့ memory address သည္ text မွရွိတာမုိ ့
mov rsi, text ဆုိျပီး rsi ထဲ ကို ထည့္လုိက္ပါ။ rdx ကေတာ
့ data ရဲ ့ length ကို ထည့္ေပးရတာပါ။ ျပီးေ
တာ
့ syscall လိ့ ု ေရးပါတယ္။ linux ရဲ s့ yscall ကို assembly မွာ ယူလို ့ ရပါတယ္။ system call ID ကို
rax ထဲ မွာ ထည့္ပါတယ္။ ျပီးေတာ
့ rdi တု့ ိ rsi တု့ မွ
ိ ာ arguemnt ေတြ လိုက္ထည့္ပါတယ္။ အကုန္ျပီးသြားရင္
syscall ဆုိျပီး ေရးလိုက္ရင္ ေရွ က
့ ထည့္ခဲတ
့ ့ ဲ register value ေတြေပၚမူတည္ျပီး result ကို retrunျပန္ ေပး
ပါတယ္။

ေနာက္ေအာက္ကblock ျဖစ္တ့ ဲ mov rax, 60 ဆုိျပီး rax register ထဲ ကို 60 ထည့္လိုက္ပါတယ္။ 60


သည္ sys_exit ျဖစ္ပါတယ္။ အဲ့ေနာက္ rdi ကို 0 ေပးလိုက္ပါတယ္။ syscall ေခၚလိုက္တဲအခ်ိန္ က်
program သည္ ထြက္သြားပါလိ့မ္မယ္။ High Level programming မွာ ေတာ
့ compiler က တာ၀န္ယူေပမ
ယ့္ ခု assembly မွာေတ့ programmer က ေနျပီးေတာ
့ exit လုပ္ေပးရပါမယ္။ မပါခဲရ
့ င္ error တက္ပါတယ္
စမ္းျကည့္လိ့ ု ရပါတယ္။

ျပီးေတာ
့ Low Level Language ေတြမွာ compiler ေတြ interpeter ေတြ မလိုအပ္ပါဘူး တုိက္ရုိက္Run နုိင္
ပါတယ္။ High Level Language ဆိုတာက် user-friendly ပိုျဖစ္ပါတယ္ လူသားေတြအေနနဲ့ နားလည္လြယ္
တဲ့ Syntx ေတြ logic ေတြန့ဲ ေရးသားထားတဲ့ source code ကိုမွ Compiler ျဖစ္ျဖစ္ Interpeter ျဖစ္ျဖစ္
သံုးျပီး Computer နားလည္ေအာင္ Machine Code အေနနဲ့ ေျပာင္းလဲပါတယ္။

1.5 Compiler vs Interpreter

High Level Programming Language ကို အဓိကအေနနဲ န


့ ွစမ
္ ် ိုးခြဲထားလိ့ ရတယ
ု ္ ဗ်ာ့။ Compiled
Languages ရယ္ Scripting Languages ရယ္ ဆုိျပီး ရွိတယ္ဗ်ာ့။ Compiled Languages ဆိုတာ ဘာလဲဆုိေတာ
့ ..

19
http://crossnetmm.com/

Computer တစ္လံုး တစ္ကယ္တမ္းနားလည္တာက 0/1 (on/off) ေတြကိုပဲနားလည္တာဗ်ာ့ printf တိ့ ု


cin cout တု့ ိ အဲ့တာေတြကို နားလည္တာမဟုတ္ဘူး .. အဲ့ေတာ ့ ကိုယ္ေတြလုပ္ခ်င္ ခိုင္းခ်င္တ့ ဲ instruction ေတြကို
လူနားလည္တဲ့ code(Source Code) ေတြကေန computer machine နားလည္တဲ့ code(Machine Code) ေတြ
အျဖစ္ေျပာင္းဖုိ့ လုိလာျပီ.. အဲ့လို လူနားလည္တဲ့ character/set of instructions ေတြကေန computer နားလ
ည္တဲ့ 0/1 bits ေတြကို translate လုပ္ေပးဖုိ့ compiler ေတြန့ဲ compile လုပ္ရတယ္ဗ်ာ့... အဲ့လုိ set of
instrutcions တစ္ခုလံုးကို compile လုပ္လက ို ္ build လုပ္လိုက္မွ computer နားလည္တဲ့ machine code ေတြ
ထြက္လာျပီး computer ေတြက ဖတ္ျပီး execute လုပ္လ့ ို run လိ့ ရမွ ု ာ.. Compiled language ေတြက ဘယ္
language ေတြလဲ ဆုိေတာ ့ .. java,C, C++, C#, Visual Basic, Pascal, etc စတာေတြျဖစ္တယ္ ;-)

1.5.1 Print Hello, world With C Language


Eg.,
$vi helloworld.c
#include<stdio.h>
int main()
{
printf("Helloworld");
}
ေရးျပီး helloworld ဆိုတ့ ဲ နာမည္နဲ့ ထားလိုက္ပါ ျပီးေတာ

$gcc helloworld.c -o hello ဆုိျပီး gcc(Gnu C Compiler) နဲ့ program တစ္ခုလံုး ကို compile လုပ္ျပီး ထြက္
လာမယ့္ machine code ေတြန့ဲ file ကို -o နဲ့ output ကို hello ဆုိျပီး မွတ္ထားလိုက္ပါ.. ျပီးေတာ
့ အဲ့ machine
code ဖုိင္ကို execute လုပ္လက
ုိ ္ ပါ $chmod 777 hello && ./hello
Scripting Language ဆုိတာက က် ေတာ
့ ..
သူကက ် ေျပာရရင္ programျကီးတစ္ခုလံုး(set of instructions) တစ္ခလ
ု ံုးကို compile လုပ္ေပးစရာမလုိပဲ..
instruction တစ္ခုခ်င္းဆီကို
one by one(Statement by statement) execute လုပ္ေပးတယ္ဗ်ာ့.. ဘယ္လိုမ်ိုးလဲဆိုေတာ ့ scripting
language ေတြက interpreter သံုးျပီး program run ေနတုန္းမွာ statement တစ္ခုခ်င္းကို machine code အျ
ဖစ္ေျပာင္းျပီး တိက
ု ္ ရုိက္ တစ္ခ
္ ုခ်င္း တစ္လိုင္းခ်င္း execute လုပ္တယ္ဗ်ာ့ .. Scripting Language ေတြက ဘယ္ေ
ကာင္ေတြလဲဆုိေတာ ့ .. Python, Ruby on Rails, Java Script, PHP,etc စတာေတြျဖစ္တယ္
Eg,.
print("Helloworld") ဆိုတ့ ဲ code ေလးကို hello.py ဆိုတ့ ဲ နာမည္ေလးနဲ့ save ထားလိုက္မယ္.. ျပီးေတာ ့
$python hello.py ဆိုျပီးru ျကည့္လိုက္ရင္ Helloworld ဆုိျပီ ထြက္လာလိမ့္မယ္... သူ့မွာ compile language လို
compile လုပ္ေပးစရာမလိဘ ု ူး တုက
ိ ္ ရုိက္တန္း execute လုပ္ေပး run ေပးလိုက္ယံုပဲ.. ;-)

20
http://crossnetmm.com/

Scripting language ရယ္ compiled language မွာ ဘာကြာလဲဆုိေတာ


့ …

compiled language သည္ compile လုပ္ရတဲ့ အခ


ဲ ် ိန္လိုပါတယ္
scripting language ကေတာ
့ compile လုပ္စရာမလုိပါဘူး
compile လုပ္လ့ ို ထြက္လာတဲ့ machine code ကို computer ေတြမွာ ေနာက္တစ္ျကိမ္ ထပ္ run စရာမလုိသလို
source code ကိုလဲ ရွဲေပးစရာမလိုပါဘူး ဒီတုိငး္ ထြက္လာတဲ့ machine code ကို computer ေတြမွာ execute
လုပ္ျပီး run လိုက္ယံုပါပဲ
scripting language မွာ ေတာ
့ တစ္ျခားcomputer ေတြမွာ run မယ္ဆုိ source code ကိုရွဲ ေပးရပါတယ္..
looping ပါတ္တဲ့ program မွာဆုိ.. compiled language မွာ တစ္ျကိမ္ပဲ compile လုပ္တ့ ဲ အခ်ိန္ ျကာျပီး ေနာက္
အျကိမေ္ တြက ် machine code ကို ျမန္ျမန္ဆန္္ဆန္ run ေပးလိုက္ယံုပါပဲ... scripting language မွာေတာ
့ တစ္ျကိ
မ္run တိုင္း တစ္ေျကာင္းခ်င္းကို execute လုပ္ေပးရတဲ့အတြက္ ေရရွည္ျကည့္ရင္ အခ်ိန္ပိုျကာပါတယ္...
ဟုတ္ျပီး ခု Low Level Language ျဖစ္တ့ ဲ Assembly နဲ လ
့ ဲ hellworld ဆိုတဲ r့ esult ထုတ္ခဲတ
့ ယ္ ျ
ပီးေတာ
့ complied language ျဖစ္တဲ C
့ နဲ H
့ elloworld ထုတ္ခဲတ
့ ယ္.. Scripting Language ျဖစ္တဲ ့
python နဲ လ
့ ဲ HelloWorld ထုတ္ခဲတ
့ ယ္။ အဲ့ေတာ
့ နွုိငး္ ယွဥ္ ျကည့္ရေအာင္။ ;-)

1.6 Compared HelloWorld in Different Language

21
http://crossnetmm.com/

ခုျကည့္လိုက္ေတာ
့ python က လြယ္တယ္ဟုတ္? အဲ့ေျကာင့္ Network programming အတြက္.. သံုး
မယ့္ language ကို python အေနနဲ ့ ဆက္ျပီး ေျပာျပေပးသြားပါမယ္။ ကိုယ္ စိတ္ျကိဳက္ langauage သိရင္သံုး
လိ့ ရပါတယ
ု ္။ က် ြန္ေတာ
္ ကေတာ
့ python ေရးတာ ျကိဳက္တာမုိ ပ
့ ါ။ Programming Language တစ္ခု မွာ က
advantage disadvantage ေတြ ရွိက် ပါတယ္။ တစ္ခ်ို ့ က system ပုိငး္ မွာ ပိုေကာင္းတယ္ တစ္ခ်ိဳ က
့ web ပို
င္း တစ္ခ်ိဳ က
့ app ပိုင္း မွာ ပိုေကာင္းတယ္ေပါ့.. စသည္ျဖင့္ ရွိက် တာပဲ.. အဲ့ေတာ
့ ကိုယ္ကေတာ
့ Network
Programming မွာ Python ျကိုက္တယ္။။ ကဲ ဆက္လိုက္က် ရေအာင္ဗ်ာ ။

2. Introduction to Python

2.1History of Python

Python ကို 1980 ေလာက္က Guido Van Rossum ဆိုတဲ ပ


့ ုဂၢိဳလ္က စတင္ ဖန္တီးခဲ ပ
့ ါတယ္။
1991 ခုနွစ္ ေဖေဖာ္၀ါရီလမွာ Python 0.9.0 ကို first version အေနနဲ p
့ ublish ထုတ္ေပးခဲပ
့ ါတယ္။

22
http://crossnetmm.com/

Rossum က သူ create လုပ္ခတ


ဲ့ ့ ဲ Programming Language ကို Python လု့ ိ အမည္ေပးျဖစ္ခတ
ဲ့ ့ ဲ အေျကာင္း
ကေတာ
့ သူကသည္ Monty Python's Flying Circus(ဆပ္ကပ္) ကို အရမ္းျကိဳက္လိ့ ပါ။

ခုဆိုရင္ေတာ
့ Python Language သည္ လူသံုးမ်ားတဲ့ language တစ္ခုျဖစ္သလို ့ ၀ုိင္းျပီး develop လုပ္
contribute လုပ္က် တဲ့ python မွာ ဆုိင္ရာဆုိင္ရာ domain (eg, web, AI, machine learning, app) ေတြ
အတြက္ library ေတြလဲ ေပါပါတယ္။

2.2 Python Installation

https://www.python.org/downloads/ ကေနျပီးေတာ
့ python ကိုေဒါင္းျပီး window installer
ဖုိင္ကို install လုပ္ပါ။ Linux သံုးတဲ ့ သူေတြကေတာ
့ terminal ကေန တစ္ခါတည္း တန္းထည့္လိုက္လို ရ
့ ပါ
တယ္။

Ubuntu/Debian မွာဆုိ
#sudo apt-apt install python
#sudo apt-apt install python3

23
http://crossnetmm.com/

Or from repository ## sudo add-apt-repository ppa:deadsnakes/ppa

Or use the Source file ##


# For apt-based systems (like Debian, Ubuntu, and Mint)
$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-
dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
$ wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

$ tar xvf Python-3.6.5.tgz


$ cd Python-3.6.5

$ ./configure --enable-optimizations --with-ensurepip=install

$ make -j 8

$ sudo make altinstall

$ python3.6 -V

Fedora/CentOS မွာဆုိ

24
http://crossnetmm.com/

#yum install python

For python3.x
$ sudo yum update
$ sudo yum install yum-utils

$ sudo yum install https://centos7.iuscommunity.org/ius-release.rpm

$ sudo yum install python36u


$ sudo yum install python36u-pip

ဒါမွ မဟုတ္ တစ္ျခား Linux ေတြအတြက္ package manager ကေန သြင္းမရဘူးဆိုရင္ .. source code
ကေန တစ္ခါတည္း တန္းသြင္းလိ့ လဲ
ု ရပါတယ္။

OpenSUSE
$ sudu zypper install -t pattern devel_C_C++

$ wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

$ tar xvf Python-3.6.5.tgz


$ cd Python-3.6.5

$ ./configure --enable-optimizations --with-ensurepip=install

$ make -j 8

$ sudo make altinstall

$ python3.6 -V

For CentOS like linux system


$ wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

# For yum-based systems (like CentOS)


$ sudo yum -y groupinstall development
$ sudo yum -y install zlib-devel

$ tar xvf Python-3.6.5.tgz


$ cd Python-3.6.5

$ ./configure --enable-optimizations --with-ensurepip=install

$ make -j 8

25
http://crossnetmm.com/

$ sudo make altinstall

$ python3.6 -V

For Fedora မွာဆုိ


$ sudo dnf install python36

For Arch Linux မွာဆိုရင္


$ packman -S python

2.3 What can we do with Python

Python မွာ က version 2.7 ရယ္ 3.x ရွိတယ္ဆုိေတာ


့ .. နွစ္မ်ိဳး လံုးကို cover ျဖစ္ေအာင္ေတာ
့ ေရး
သြားမယ္ဗ်ာ ။။ ခု Python နဲ ့ ဘာေတြလုပ္လ့ ရတယ
ို ္ .. သူ n
့ ature/syntex ကဘယ္လို .. စသည္ ျဖင့္ေပါ့ ေ
လ့လာျကည့္က် ရေအာင္ဗ်ာ။

Python နဲ ့ ဘာေတြလုပ္လို ့ ရမလဲ ဆုိေတာ


့ ..
1. Web development (Flask & Django)
2. Machine learning (scikit-learn & TensorFlow )
3. Data visualization (Matplotlib)
4. Scripting (Simple Syntax, Easy to Learn & Quick to write/test)
5. Game developments
6. Desktop applications
7. Embedded applications

စတာေတြလုပ္လ့ ုိ ရပါတယ္။ စိတ္၀င္စားရင္ ေလ့လာျကည့္ပါ။ ခု ဒီစာအုပ္မွာေတာ


့ Python Basic ေျကာင္းပါမ
ယ္။ ျပီးေတာ
့ Network programming အတြက္ လုိအပ္တဲ t့ elnetlib, paramiko, နဲ တ
့ စ္ျခား additional
ေတြ ျဖစ္တဲ s့ ocket programming, Tk interface ေတြအေျကာင္း ပါ၀င္မွၾ ျဖစ္ပါတယ္။ netmiko နဲ ့
ansible ေတာ
့ မပါေသးပါဘူး။

2.4 What python is?

Python is interpreted အေရွ့ တုနး္ ကလဲ ေျပာခဲတ


့ ယ္။ ခုထပ္ျပီး ရွငး္ ခ်င္တာက သူကည္
compiled languge လု့ ိ source code ကို compile လုပ္တာမဟုတ္ပဲ.. Code ကို execute ျပီးဆုိတာနဲ ့ တ
စ္ျပိဳင္နက္ တစ္ခ်ိန္တည္းမွာ စျပီး အလုပ္လုပ္ပါတယ္။ ဥပမာ.. ေျပာရရင္..

26
http://crossnetmm.com/

Text editor တစ္ခုမွာ python code ျဖစ္တဲ ့print (‘Hello world’) ကို HelloWorld.py ဆုိတ့ ဲ
နာမည္နဲ ့ သိမ္းထားလိုက္ပါတယ္။ အဲ့ code ရွိေနတဲ f့ ile ကို python [file name] ဆုိျပီး execute လိုက္
တာနဲ့ H
့ ello world ဆိုတဲ ့ result ကို ခ်က္ခ်င္းရပါတယ္။ C, C++ တု့ လိ
ိ ု complie တစ္ခါလုပ္ျပီးမွာ run စရာ
မလိ့ ပါဘူ
ု း။

Python is Interactive ဆုိေတာ


့ .. Interactive ဆုိတ့ ဲ အဓိပၸါယ္ေလး တစ္ခ်က္ ျကည့္ ျကည့္က်

ရေအာင္။
ဘယ္လုိမ်ိဳးလဲဆုိတာက ဥပမာေလးတစ္ခုနဲ ရ
့ ွင္းျပမယ္..
Windows မွာဆို command prompt ။ Linux မွာဆုိ terminal မွာ python ဆုိျပီး ရိုက္လုိက္ပါ။

အဲ့လို ရိုက္လိုက္တာနဲ ့ >>> (Greater than Sign သံုးခု) ဆိုတ့ ဲ သေကၤတေလးကို ျမင္ရပါလိမ့္မယ္။ အဲ့ >>> ကို
chevron prompt လု့ ိ ေခၚတယ္။ သူက command line shell လိုပါပဲ.. user ကေနျပီးေတာ
့ input/
command တစ္ခုရိုက္လိုက္တာနဲ့ result/feedback ခ်က္ခ်င္းျပန္ရပါတယ္။ ခု အေပၚက >>> လေးကိုက user

27
http://crossnetmm.com/

ကေန လာျပီး တစ္ခုခု command/code တစ္ခု ၀င္လာမွာ ကို ေစာင့္ေနတဲ သ


့ ေဘာမ်ိဳးပါ။ ခု print (‘Hello
world’) လုိ ရ
့ ိုက္လိုက္တာနဲ ့ Hello world ဆုိျပီး result တန္းရပါတယ္။ အဲ့လိုမ်ိဳး အလုပ္ လုပ္ပံုကို
interactive လိုေခၚပါတယ္။

2.4.1 Python Interactive mode & Script Mode

ေျပာလက္စနဲ ့ တစ္ခု သိေစခ်င္တာက python ကို ပံုစံနွစ္မ်ိဳး နဲ ေ


့ ရးက် တယ္။
1. Interactive mode
သူက >>> မွာ တုိက္ရိုက္ ရိုက္လိုက္တဲ့ တစ္ေျကာင္းခ်င္းကို responds ျပန္ပါတယ္။ သူသည္
device ရဲ R
့ AM (memory) မွာ တင္ျပီး အလုပ္လုပ္ပါတယ္။ ပိတ္လိုက္ရင္ ဘာမွမက် န္ေတာ
့ ပဲ ေပ်ာ
က္သြားပါလိမ့္မယ္။ variable ေတြ methon ေတြ စမ္းတဲ့ အခ်ိန္မွာ အသံုးျပဳတာမ်ားပါတယ္။

2. Script mode
သူက် ကေတာ
့ text editor တစ္ခုနဲ ့ code ေတြ ေရးျပီးေတာ
့ file တစ္ခု အေနနဲ s့ aveျပီး ..
အဲ့ ဖုိင္ကိုမွ python အေနနဲ e
့ xecute လုပ္တာပါ။ save ထားတာမို့ file သည္ မဖ်က္မခ်င္း ရွိေနပါတ
ယ္။

Python is Object-Oriented Programming (OOP) တစ္ခုျဖစ္ပါတယ္။ ခုမွ စေလ့လာမယ္


Networker ေတြအေနနဲ o
့ op လိ့ ပဲ
ု သိထားပါဦး.. ေနာင္ေရးရင္နဲ ့ OOP ဆုိတာကို သိလာ မွာပါ။ စိတ္မပူပါနဲ
့။

Python works on different platforms သူသည္ OS ေပၚကို မမွီခုိပါဘူး.. ဘယ္ OS ေနေန


python ရွိရင္ အလုပ္ လုပ္ပါတယ္။ (Windows, Mac, android, Linux, Raspberry Pi, etc)

28
http://crossnetmm.com/

Python has simple syntax.. Python ရဲ s့ yntax တည္ေဆာက္ပံု ပံုစံ သည္ English စာလုိမ်ိဳး.. စာပို
ဒ္ေတြ စာသား အေနနဲ အ
့ လုပ္လုပ္ပါတယ္။ ျကည့္လိုက္ရင္ ရိုးရွငး္ တာကို ေတြ ရ
့ မွာပါ။ ျပိးေတာ
့ သူသည္
scripting language ျဖစ္တ့ အတြ
ဲ က္ program ေရးတဲ့ သူေတြကို တစ္ျခား language ေတြထက္ code နဲနဲ ေ
လးနဲ R
့ un ပါတယ္။

2.5 Very first Program “Hello world” and its syntax, key-words

ထံုးစံအတုိင္း programming Language တစ္ခု စေလ့လာရင္ output ကို Hello, world! ထုတ္တာ
ကေတာ
့ အေရွ မ
့ ွာ Example အေနနဲ ့ အျကိမ္ျကိမ္ သံုးျပခဲတ
့ ာဆုိေတာ
့ ..
>>>print (‘Hello, world!’) ဆုိတ့ ဲ Hello, world! ဆိုတ့ စာသားကိ
ဲ ု output result အေနနဲ ့ ထုတ္ျပ
တဲ့ python code ကိုေတာ
့ ရင္းနွီးေနက် မွာပါ။ ;-)

အဲ့ေတာ
့ ဟုတ္ျပီ .. print ဆုိတ့ ဲ keyword ေနာက္က ကိ္ ယ
ု ္ ထည့္ ခ်င္တ့ ဲ စာသားထည္ရင္
output ထြက္တာေတာ
့ သိျပီ.. အဲ့ေတာ
့ ေအာက္က command ေတြရိုက္ရင္ေကာ? Oupt ထြက္မ
လား..

printf(“Hello, world!”) *** C ***

system.out.println(“Hello, world!”); *** Java ***

29
http://crossnetmm.com/

echo “Hello World” *** Linux Bash shell ***

အဲ့လိုရိုက္လိုက္ရင္ invalid syntax, syntax error , Name [ ._. ] is not defined စသ


ည္ ျဖင့္ error ေတြ တက္ေနတာကို ေတြ ရ
့ မွာပါ။ အဲ့ဆုိ လူေတြ စကား ေျပာသလို ခိုင္း ျကည့္ ရင္ ..
ဘယ္လိ့ ု တုန္ ျ့ ပန္မလဲ?..

ေတြ့တဲ့အတုိင္းပါပဲ.. Python ရဲ s့ yntax မဟုတ္ရင္ သူ ့ key-word မဟုတ္ရင္ လက္မခံပါဘူး.. ျမင္


သာတဲ့ ဥပမာ ေလး တစ္ခုနဲ .့ . ျကည့္ ျကည့္က် ရေအာင္။။

က် ြန္ေတာ
္ တု့ ေတြ
ိ အိမ္မွာ ေခြးေလးေတြ ေျကာင္ေလးေတြ ေမြးတက္က် တယ္ဟုတ္ ? အိမ္မွာ ေမြးထား
တဲ့ ေခြးေလးပဲ ျဖစ္ျဖစ္ေပါ့.. နာမည္ေခၚရင္လာမယ္.. ထိုင္ဆုိထုိင္ ထဆုိထ..အဲ့ေလာက္ေတာ
့ နားလည္သိတက္
က် တယ္။ အဲ့တက္ပိုျပီး.. လူတစ္ေယာက္လိုမ်ိဳး စကားေတြ ထုိင္ေျပာရင္.. ဒီေကာင္ေလးေတြ နားလည္မွာ မဟု
တ္ပါဘူး.. အသည္းကြဲလ့ ို ရင္ဖြင့လ
္ ဲ.. သခင္မ်က္နွာ အေကာင္း ေဘးကေန ငိုင္ျပီးအေဖာ္ လုပ္ေပးေနတာပဲ ရွိတ

30
http://crossnetmm.com/

ယ္။ ဘီယာေသာက္လိုက္ ဆုိျပီး ဘီယာဘူး ခ်ီလာမွာ မဟုတ္သလို.. ခရီး သြားလိုက္ ဆုိျပီးေတာ


့ လဲ အျကံ ေပး
မွာမဟုတ္ပါဘူး.. သူမွနားမလည္တား.. :P

ထု့ နည
ိ ္ းတူ programming language သည္လဲ.. သူနားလည္တဲ့ ပံုစံ syntax ေတြ key-word ေတြ
ဆုိတာ ရွိပါတယ္။ Programming Language မတူရင္ syntax အနည္းနဲ့အမ်ား ပံုစံကြဲ နုိင္သလို ့.. Key-word
ေတြကလဲ တူမွာ မဟုတ္ပါဘူး.. တရုတ္ျကီး ကို japan စကားသြားေျပာရင္ တရုတ္ျကီးက နားလည္မွာ မဟုတ္
သလိ.ု . Python မွာ java/C code ေတြ လာေရးရင္လဲ python က နားလည္မွ မဟုတ္ပါဘူး.. ေျပာရရင္ က် ြန္ေ
တာ
္ တု့ ိ network device ေတြမွာဆုိလဲ .. cisco မွာ ရိုက္တဲ့ command ကို huawei မွာ ရိုက္ရင္ ရမွာ မဟုတ္
သလို .. Juniper command ေတြကိုလဲ mikrotik တုိ ့ nokia တု့ မွ
ိ ာ သြားရိုက္ရင္ ရမွာ မဟုတ္သလို ပါပဲ။

2.6 Python Key-words

Python ကို ေလ့လာမယ္ဆုိေတာ


့ သူ S
့ yntax ေတြ key-word ေတြနဲ ့ ရင္းနွီးျပီး သိေနမွ ရမယ္။
အဲ့ေတာ
့ ပထမဆံုး ဘာ key-word ေတြ ရွိလဲ ဆုိတာကို ေလ့လာျကည့္က် ရေအာင္..

Python prompt >>> ကေနhelp() ေခၚလိုက္ပါ။ အဲ့ေနာက္ keywords လိ့ ု ရိုက္လိုက္ရင္ python မွာ
သူ အ
့ တြက္ ရွိေနတဲ့ keywords ေတြကို ျပ ေပးပါလိမ့္မယ္။ print ဆုိတ့ ဲ keyword ကိုရင္းနွးီ ျပီးသားပါ။ if
ဆုိ condition စစ္တာ while ဆုိ while loop, for ဆုိ for looping အတြက္.. စသည္ျဖင့္ေပါ့.. ေနာင္ လာမယ့္
program ေတြက keyword ေတြ သံုးရင္းနဲ သ
့ ိလာမွာပါ။ ခု keyword ဘယ္လို ျကည့္ရတယ္။။ ဘယ္ေကာ
င္ ေတြကkeyword ေတြ ျဖစ္တယ္ဆုိတာ သိရင္ လံုေလာက္ျပီေလ။။။

31
http://crossnetmm.com/

ျကံုတုန္း တစ္လက္စတည္းေျပာခ်င္တာက.. အဲ့ help ေနာက္ကေန.. Keywords ဆုိတာတင္ မဟုတ္ဘူး.. ကို


ယ္သံုးခ်င္တ့ ဲ library ေတြရွိရင္.. အ့ ဲေကာင္ရဲ i့ nfo ေတြ description ေတြသခ်င္ရင္ help> [library name]
ထည့္ေပးယံုပါပဲ။

keywords ေတြသည္ reverse လုပ္ထားတာပါ။ အဲ့တာေျကာင့္ keyword ေတြကို သူတုိ န


့ ဲ ့ မသက္
ဆုိင္တဲ ေနရာ .. ေျပာရရင္ variable လုိေကာင္ေတြ ေနရာမွာ သံုးလိ့ ု မရပါဘူး.. print keyword သည္
Output ထုတ္ဖုိ့ အတြက္.. if ဆုိတ့ ဲ keyword သည္ condition ကို စစ္ဖုိ့အတြက္ စသည္ျဖင့္ေပါ့ေနာ္ ျကိဳျပီး
သတ္မွတ္ထားျပီးသားပါ။

Print ထုတ္တဲ့ ေနရာမွာ ခုမွာ စေလ့လာတဲ့ သူေတြဆုိ python2.7 နဲ P


့ ython3.x မွာဆုိ.. နည္းနည္း
သတိထားဖုိ့လ့ ို တာရွိပါတယ္။ အဲ့တာကေတာ
့ ..

Python2.7 မွာ က Print ထုတ္ခ်င္တ့ ဲ ေကာင္ကို print ဆုိတဲ k


့ eyword ေနာက္ကေန ‘ (single quote) OR
“ (double quote) နွစ္ခုျကားမွာပဲ ထားထား ‘ [output] ‘ .. လက္သည္းကြင္းရယ္() quotes ‘ ‘ ရယ္နဲ ့ အဖြ

32
http://crossnetmm.com/

င့္ အပိတ္ထားထား (‘ [output] ‘) .. အလုပ္လုပ္ပါတယ္ .. ေအာက္ကပံုကို ျကည့္လုိက္ရင္ ရွငး္ သြားပါလိမ့္မ


ယ္။ နွစ္နည္းလံုးနဲ ့ လုပ္ လုပ္ေနတာကို ေတြ့ရပါလိမ့္မယ္။

Python3.x မွာေတာ
့ Print ထုတ္ခ်င္တ့ ဲ ေကာင္ကို print ဆုိတဲ k
့ eyword ေနာက္ကေန လက္သည္းကြင္းရ
ယ္() quotes ‘ ‘ ရယ္နဲ ့ အဖြင့္ အပိတ္ တု့ ကိ
ိ ု ထားရပါမယ္။ (‘ [output] ‘) ဆုိတ့ ဲ ပံုစံန့ပ
ဲ ဲ .. အလုပ္လုပ္ပါတ
ယ္ single/double quotes ေတြခ်ည္းပဲ ဆုိအလုပ္မလုပ္ပါဘူး။ .. ေအာက္ကပံုကို ျကည့္လုိက္ရင္ ရွင္းသြားပါ
လိမ့္မယ္။

‘ [output] ‘ (‘ [output] ‘) ⇒ Python2.7 မွာ အကုန္လုပ္ လုပ္ပါတယ္။


(‘ [output] ‘) ⇒ ဒီတစ္မ်ိဳးပဲ Python 3.x မွာ အလုပ္လုပ္ပါတယ္။

2.7 single vs double quotes

https://docs.python.org/2.0/ref/strings.html
In plain English: String literals can be enclosed in matching single quotes (') or
double quotes ("). They can also be enclosed in matching groups of three single or double
quotes

33
http://crossnetmm.com/

အေပၚက လင့္မာွ ရွိတ့ ဲ document ကိုဖတ္ ျကည့္လိ္ က


ု ္ ပါ။ Python မွာက single quote နဲ D
့ ouble
quote သည္ အတူတူပါပဲ။ ကြာျခားခ်က္ မရွိပါဘူး ။

ဟုတ္ျပီ Hello, world! လဲ ထုတ္တက္ျပီး.. Keyword အေျကာင္းလဲ သိျပီဆုိေတာ


့ variable ေတြ
အေျကာင္း ဆက္က် စို ။့

2.8 Variable

Variable ဆိုတာက က် ြန္ေတာ


္ တု့ ေတြ
ိ ရဲ ့ program မွာလိ့ အပ္
ု တ့ ဲ data ေတြထည့္ဖုိ့ အတြက္ပါ။
programming မွာဆုိ variable တစ္ခု ေျကညာလုိက္တာနဲ ့ memory မွာ ေနရာ တစ္ေနရာယူလ္ က
ို ္ ပါတယ္။
အဲ့ memory address ရွိတ့ ဲ ေနရာမွာ.. က် ြန္ေတာ
္ တု့ ိ ထည့္ခ်င္တဲ .့ . variable အတြက္ data ေတြကို သြားျပီ သိ
မ္းဆည္းပါတယ္။

Python မွာက တစ္ျခား Programming Language ေတြနဲ ့ မတူတာက သူသည္ variable data
type ကိုေျကညာေပး စရာမလိုတာပါပဲ။ Example အေနနဲ ့ ေျပာရရင္ int Num ဆုိရင္ Num ဆိုတ့ ဲ variable
သည္ integer Type ျဖစ္ပါတယ္ ဆုိျပီး ေျကညာေပးထားတာပါ။ python မွာဆုိရင္ေတာ
့ type ကို ေျပာျပေ
ပးစရာ မလိုပါဘူး။ သူသည္ variable ထဲကို ထည့္တဲ့ data ေပၚ မူတည္ျပီး type ကို ခြဲျခားသိပါတယ္။ Num =
“MgMg” လို ေ
့ တြ ရ
့ င္ Python သည္ Num variable သည္ String value တစ္ခု ျဖစ္ေျကာင္း တန္းသိပါတ
ယ္။ အဲ့လိုပဲ Num = 5 လို ေ
့ တြ လ
့ ိုက္တာတဲ့ Num သည္ Integer Type ျဖစ္တယ္လိ့ ု တန္းျပီး သတ္မွတ္လို
က္ပါတယ္။ ေအာက္က ပံုေလးေတြကို တစ္ခ်က္ျကည့္လိုက္ရင္ ပိုနားလည္သြားပါလိမ့္မယ္။

ခုပံုမွာဆို Name = ‘Mg Mg’ / Age = 25 ဆုိျပီး Name နဲ ့ Age ဆိုတ့ ဲ variable ထဲကို ‘Mg Mg’
ရယ္ 25 ရယ္ ဆုိတ့ ဲ data ေတြ ထည့္လိုက္ပါတယ္။ အေပၚမွာတုန္းက python သည္ variable ထဲကို ထည့္
လိုက္တဲ့ data ေပၚ မူတည္ျပီး ခြဲျခားသိတယ္လို ့ ေျပာခဲတ
့ ယ္ေနာ္။ တစ္ကယ္ သိမသိ သိခ်င္ရင္ type() ဆုိတဲ
Function ကို အသံုးျပဳလိ့ ု ရပါတယ္။ type(Name) ဆိုျပီးရိုက္လိုက္ရင္ Name ဆိုတ့ ဲ variable ရဲ t့ ype ကို
output ထုတ္ပါလိ့ ု Python ကို ေျပာလိုက္တာပါ။ အဲ့တာက် အဲ့Name variable သည္ ဘာ Data Type အ

34
http://crossnetmm.com/

မ်ိဳး အစား ျဖစ္တယ္ဆုိတာကို result ထြက္လာပါတယ္။ အဲ့လိုပဲ Age သည္ ဘယ္လို type မ်ိဳးလဲ သိခ်င္ရင္
Type(Age) ဆုိျပီး ျကည့္လိုက္တာနဲ i့ nteger ျဖစ္တယ္ဆိုတာကို ေတြ ရ
့ မွာပါ။ Variable ေတြထဲက
data/value ထုတ္ခ်င္ရင္ေတာ
့ print ဆိုတ့ ဲ keyword ေနာက္ကေန variable ကို ထည့္ေပးလိုက္ယံု ပါပဲ။ ခု
အေပၚက ပံုမွာက interactive mode နဲ ့ ေရးသြားတာ .. အဲ့လိုမဟုတ္ပဲနဲ s့ critp တစ္ခု အေနနဲ ့ ေရးျကည့္
က် ရေအာင္။

အေပၚက code ေတြကို text editor တစ္ခု နဲ ေ


့ ရးျပီး နာမည္တစ္ခု (variable.py) ေပးျပီး save လိ္ ု
က္ပါ။ အဲ့ေနာက္ terminal မွာ python variable.py ဆုိျပီး run လိုက္ပါ။

35
http://crossnetmm.com/

အဲ့လို run လိ့ ရသလိ


ု ု ့ atom, Sublime text2/3, Pycharm တု့ိလို IDE ေတြနဲ r့ un လိ့ ု ရပါတယ္။

Python မွာ standard variable အမ်ိဳးအစား ၅မ်ိဳး ရွိပါတယ္။


· Numbers
· String
· List
· Tuple
· Dictionary

2.8.1 Numbers

36
http://crossnetmm.com/

Numbers data type သည္ Numeric တန္ဖုိးေတြကို သိမ္းဆည္းဖုိ့အတြက္ပါ။ Number Type ကို
အမ်ိဳးအစား 4 ခု ခြဲျခားသတ္မွတ္လို ရ
့ ပါတယ္။
1. int (ကိန္းျပည့္)
2. float (ဒသမကိန္း)
3. long
4. complex

2.8.2 String

String မွာက်ေတာ
့ alphabet ေတြ သိမ္းထားေပးတဲ ့ variable ပဲ ျဖစ္ပါတယ္။ string variable
မွာ သံုးလိ့ ရတဲ
ု ့ ဥပမာေလးေတြကို ျကည့္ ျကည့္က် ရေအာင္ဗ်ာ ..

37
http://crossnetmm.com/

String Concatenate

အကယ္လိ့ ု variable type မတူညီတ့ ဲ ေကာင္ေတြေပါင္းမယ္ဆုိ + တစ္ခု တည္းသံုးျပီး ေပါင္းလို မ


့ ရ
ပါဘူး error တက္ပါလိမ့္မယ္။

Price = ဆိုတ့ ဲ ေကာင္ထည့္ထားတဲ့ value ဆုိတ့ ဲ variable သည္ string type ျဖစ္ပါတယ္။ 10 ထည့္ထား
တဲ့ x သည္ integer variable ျဖစ္ပါတယ္။ အဲ့လို type မတူတာေတြကို ေပါင္းခ်င္တယ္ဆုိရင္ constructor
function လိုပါတယ္။ function သံုးခုရွိပါတယ္။ အဲ့တာေတြကေတာ

· int() # Chang to Integer
· str() # Change to String
· float() # Change to float တု့ ျဖစ္
ိ ပါတယ္။

38
http://crossnetmm.com/

အခု အေပၚက ပံုမာွ ဆုိ x သည္ integer ျဖစ္တ့ အတြ


ဲ က္ vlaue ဆိုတ့ ဲ string type variable နဲ ေ
့ ပါင္းမရေ
တာ
့ မ်ိဳးတူေအာင္ လုပ္မွ ရမွာျဖစ္ပါတယ္။ ဆိုေတာ
့ ကာ. str() ဆိုတ့ ဲ function ကို သံုးျပီးေတာ
့ x variable
ကို string အေနနဲ ရ
့ မွ print ထုတ္လိ့ ရမွ
ု ာပါ။

ဒါေပမယ့္ ေနာက္တစ္ခါခု ထပ္သိေစခ်င္တာက str() int() float() တု့ သည


ိ ္ variable ထဲက တန္ဖိုး
ကို ေျပာင္းလဲလိုက္တာမဟုတ္ပဲ.. အဲ့ထဲမွာ ရွိတ့ ဲ တန္ဖုိးကို retrun ျပန္ေပးတာပါ။ programming နဲနဲ ေလ့
လာဖူးတဲ့ သူေတြကေတာ
့ သိက် တယ္. Return ျပန္တယ္ဆုိတာကို.. သူက ခု အေၚက ဥပမာ မွာဆုိရင္ x = ‘5’
ဆုိျပီးေတာ
့ x ထဲ မွာ 5 ကို ‘(single quotes) သံုးျပီးေတာ
့ string အေနနဲ ့ ထည့္ထားတာပါ။ အဲ့တာကို
int(x) ဆုိျပီး လုပ္လိုက္ရင္ result အေနနဲ သ
့ ာ integer 5 ထြက္လာျပီးေတာ
့ x ထဲမွာေတာ
့ string ‘5’ အေ
နနဲ ပ
့ ဲ ရွိေနတာပါ။ အဲ့တာေျကာင့္ ျမင္သာေအာင္ .. int(x) လို လ
့ ုပ္လိုက္ရင္ return ျပန္လာမယ့္ result ကို =
(assign) ကိုသံုးျပီးေတာ
့ z ထဲကို ထည့္လိုက္ပါတယ္။ z သည္ integer value 5 ကို ထည့္ထားတဲ့ variable
မို့ type() နဲ ျ့ ကည့္ ရင္ int အေနနဲ ့ ျမင္ရမွာ ျဖစ္ျပီး x ကိုေတာ
့ str အေနနဲ ျ့ မင္ရမွာ ပဲ ျဖစ္ပါတယ္။

2.8.2.1 int() str() float()

int() str() float() တု့ ကိ


ိ ု သံုးျပီးေတာ
့ exercise ေလးေတြ လုပ္ျကည့္က် ရေအာင္ဗ်ာ။

int() function

x = int(1) # x will be 1
y = int(2.8) # y will be 2
z = int("3") # z will be 3

float() function

x = float(1) # x will be 1.0


y = float(2.8) # y will be 2.8

39
http://crossnetmm.com/

z = float("3") # z will be 3.0


w = float("4.2") # w will be 4.2

str() function

x = str("s1") # x will be 's1'


y = str(2) # y will be '2'
z = str(3.0) # z will be '3.0'

2.8.3 Python Lists

ခုေျပာမယ္ list ရယ္ ျပီးေတာ


့ tuple တု့ သည
ိ ္ array ရဲ အ
့ လုပ္ လုပ္ပံုန့ဲ ဆင္ပါတယ္။ list/tuple နဲ့
array ရဲ ့ အဓိက ကြာျခားခ်က္ကေတာ
့ array တစ္ခု သည္ တူညီတ့ ဲ data type ေတြကို ပဲ သိမ္းဆည္းနုိင္တာ
ပါ။ list/tuple မွာက် ေတာ
့ မတူညီတ့ ဲ data type (eg,. Str, int) ေတြကို အတူယွဥ္ တြဲျပီး သိမ္းဆည္းနုိင္
တာပါပဲ။။ ျပီးေတာ
့ Python မွာက array သည္ build-in မပါ ပါဘူး.. Array ကိုမွ သံုးခ်င္တယ္ဆုိရင္ေတာ

import array ဆုိျပီး array module ကို import လုပ္ေပးမွ သံုးလိ့ ရပါမယ
ု ္။

Lists ဆုိတာက python မွာ ေျပာရရင္ item ေတြကို sequence အေနနဲ ့ သိမ္းဆည္းေပးတဲ့ ေကာင္
ပါ။ ဥပမာ ေျပာရရင္ fruit ဆုိျပီး အသီးေတြကို စာရင္း လုပ္မယ္ဆုိက် ပါေတာ
့ .. နာမည္ တစ္ခုကို variable
တစ္ခုနဲ သ
့ ိမ္းမယ့္ အစား list ကိုသံုးလိ့ ရပါတယ
ု ္ ။ သူသည္ ေဒါင့္ကြင္းကိုသံုးပါတယ္။ item တစ္ခုနဲ ့ တစ္ခုကို
, (commas) နဲ ပ
့ ိုငး္ ျခားထားေပးပါတယ္။

Fruit = [‘apple’,’banana’,’avocado’,blackberry’,’muskmelon’,’orange’]

ခုဆုိရင္ fruit ဆိုတ့ ဲ list ထဲမွာ apple တု့ ိ banana တု့ ိ စတဲ့ ေကာင္ေတြကို item ေတြလ့ ို ေခၚျပီး နံပါတ္ေတြ
တပ္ျပီး သိမ္းထားပါတယ္။ print Fruit ဆုိျပီး ထုတ္လိုက္ရင္ေတာ
့ Fruit ထဲမွာ ရွိတ့ ဲ item ေတြအကုန္ ထြက္
လာပါလိမ့္မယ္။

Banana ဆုိတ့ ဲ item ကိုပဲ ယူခ်င္တယ္ဆုိရင္ သူ ရ


့ ဲ ့ location ကို [] ထဲထည္ေပးယံုပါပဲ။ list မွာ sequence
သည္ 0 က စတာမို a့ pple=1, banana=1 ျဖစ္ပါတယ္။

40
http://crossnetmm.com/

ကုိယ္က apple,banana,avocado ပဲ လိုခ်င္တာဆုိရင္ 0,1,2 ေနရာကေကာင္ေတြကို ယူမာွ ျဖစ္လ့ ို


print Fruit[0:3] လိ့ ု ေရးလိုက္ရင္ 0 to 2 မွာ ရွိတ့ ဲ Item ေတြ႕ို ထုတ္ေပးသြားမွာပဲ ျဖစ္ပါတယ္။
blackberry ေနာက္မွာ ရွိေနတဲ့ item ေတြကို အကုန္ ထုတ္ခ်င္တယ္ ဆုိရင္ေတာ
့ print Fruit[3:] လိ့ ု ေရးေ
ပးလိုက္ရင္ sequence 3 ကေနစျပီး ေနာက္က ေကာင္ေတြအကုန္ ကို ထုတ္ေပးသြားမွာပဲ ျဖစ္ပါတယ္။

အမ်ိဳးအစားတူတာေတြပဲ သိမ္းလိ့ ု ရတာ မဟုတ္ပါဘူး.. မတူတာေတြကိုလဲ ေပါင္းျပီး သိမ္းလိ့ ရပါတယ


ု ္။
Random_list ဆုိျပီး string ေတြနဲ i့ nteger ေတြကို ေရာျပီး သိမ္းလိုက္ပါတယ္။

print ထုတ္တာေတြဘာေတြကေတာ
့ အေပၚက Fruit တုန္းကထုတ္ခဲ့ သလို ထုတ္လိုက္ယံုပါပဲ။ list
ေတြကို + ေလးသံုးျပီး ေပါင္းလိ့ ု ရပါတယ္။ print ထုတ္တဲ့ ေနရာမွာ print Fruit + Random_list ဆုိျပီး ထု
တ္လိ့ ရသလိ
ု ့ ု.. ေပါင္းလိ့ ရလာတဲ
ု ့ result ကို print combine ဆုိတ့ ထဲ
ဲ ထည့္ျပီးမွ print combine ဆုိျပီးလဲ
ထုတ္လိ့ ရပါတယ
ု ္။

List အေျကင္း အျကမ္းဖ်င္းေတာ


့ သိသြားေလာက္ျပီလို ့ ယူဆပါတယ္။ အဲ့ေတာ
့ list ထဲကို data ေတြထည့္
တာ ထုတ္တာေတြ စမ္းျကည့္က် ရေအာင္ ;-)

41
http://crossnetmm.com/

ပထမဆံုး Marvel = ['Iron Man','Thor','Hulk'] ဆုိျပီး ထည့္လိုက္ပါတယ္။ list ထဲကို data တ


စ္ခု ထည့္မယ္ဆုိ append() ဆိုတ့ ဲ Method ကို သံုးပါတယ္။ Marvel.append('Spidey') #append at
END ဆုိျပီး ထည့္လိုက္တဲ့ အခါမွာ spidy သည္ Marvel list ရဲ ေ
့ နာက္ဆံုးမွာ ၀င္သြားပါတယ္။ extend()
ဆုိတ့ ဲ ေကာင္က် ေတာ
့ list တစ္ခု ထပ္ထည့္တဲ့သေဘာပါ။ Marvel.extend(['Wolverine','Black Bolt'])
#add other list at END ခုဆုိရင္ ေနာက္ဆံုးမွာ ['Wolverine','Black Bolt'] ဆုိတ့ ဲ list ကို ထည့္လိုက္
ပါတယ္။ print Marvel ဆုိျပီး ထုတ္ျကည္ပါ။

အဲ့လို ေနာက္ကေန ၀င္သြားတာမ်ိဳး မဟုတ္ပဲ.. ကိုယ္ထည့္ခ်င္တ့ ဲ Index ေနရာမွာ ထားမယ္ ဆုိ


insert() ကိုသံုးပါ။ Marvel.insert(1,'Captain America') #insert at index 1 ဆုိျပီး Cap ကုိ ‘Iron
Man’ ေနာက္က index 1 မွာထားလိုက္ပါ။ အဲ့ေနာက္ Print ထုတ္ျကည့္ပါ။

ျပန္ဖယ္ထုတ္ခ်င္တယ္ ဆုိရင္ေတာ
့ remove() Method ကို သံုးလိ့ ု ရပါတယ္။ ကိုယ္ထုတ္ခ်င္တ့ ဲ
ေကာင္ကို ေရးလိုက္ယံုပါပဲ။ Marvel.remove('Captain America') ဆုိရင္ captain america သည္
Marvel ဆုိတဲ l့ ist ထဲမွာ ရွိေတာ
့ မွာ မဟုတ္ပါဘူး.. print ထုတ္ျပီး စစ္ျကည့္ပါ။

အဲ့လို နာမည္နဲ့ list ထဲကေန ထုတ္ပစ္လိုက္လိ့ ု ရသလို index ID နဲ့လဲ ဖယ္ထုတ္လိုက္လိ့ ု ရပါတယ္။
Index ေနရာကို မသိရင္ အရင္ဆံုး index() ကို သံုးျပီး ျကည့္လိုက္ပါ။ Marvel.index('Black Bolt') လိ့ ု ရုိ
က္လိုက္ရင္ Black Bolt ရွိေနတဲ့ index = 5 ကို ရလာပါလိမ့္မယ္။ အဲ့ေနာက္ pop() ကို သံးု ျပီးေတာ
့ index 5
မွာ ရွိေနတဲ့ ေကာင္ကို ဖ်က္ပစ္လိုက္ပါ။ Marvel.pop(5) လိ့ ု ရိုက္ျပီး ရင္ black bote ပ်က္လား သိေအာင္
print ထုတ္ျကည့္ပါ။

42
http://crossnetmm.com/

2.8.4 Python Tuples

Tuple သည္ list နဲ့ အတူတူပါပဲ။။ အဓိက ကြဲျပားသြားတာက list သည္ ေထာင့္ကြင္း [] နဲ ေ
့ ဖာ္ျပ ေ
ရးသားျပီး tuple ကိုေတာ
့ ()လက္သည္းကြင္းနဲ့ ေရးပါတယ္။ ျပီးေတာ
့ list ထဲမွာရွိတ့ ဲ elements/items ေတြ
ကို ျပဳျပင္ေျပာင္းလဲလ့ ို ရျပီးေတာ
့ Tuple ကေတာ
့ မရပါဘူး.. အဲ့တာေျကာင့္ သူ က
့ ို read-only လိ့ ု ေျပာက် ပါ
တယ္။

ခုအေပၚပံုမွာဆုိ tuple ဆုိျပီး () နဲ တ


့ စ္ခု create လုပ္လိုက္ပါ။ list အတြက္ကိုေတာ
့ [] နဲ ့ create
လုပ္ပါ။ tuple ရယ္ list ရယ္ ဆုိတာက က် ြန္ေတာ
္ တု့ ေတြ
ိ ပဲ နားလည္တာပါ။ Python ကိုယ္တုိင္နားလည္တာ
ကေတာ
့ .. [] နဲ့ဆုိ ျပဳျပင္ေျပာင္းလဲ လိ့ ရတဲ
ု ့ list ျဖစ္ျပီးေတာ
့ () ဆုိရင္ေတာ
့ ျပင္လို ့ ျပဳလို ့ မရတဲ့ tuple ဆုိျပီး
သိတာပါ။

43
http://crossnetmm.com/

က် န္တ့ ဲ print ထုတ္တဲ ့ နည္းေတြကေတာ


့ အေပၚက အတုိင္းပါ အတူတူပါပဲ။

2.8.5 Python Dictionary

Dictionary မွာကေတာ
့ အေရွ က
့ ေျပာခဲတ
့ ့ ဲ lists တု့ ိ tuples တု့ ိ နဲ့မတူပါဘူး.. သူသည္ data ေတြ
ကို သိမး္ ဆည္းတဲ့ ေနရာမွာ key နဲ ့ value ကို တစ္တြဲ တြဲ ျပီး သိမး္ ဆည္းပါတယ္။ key နဲ့ value ကို : နဲ့ ျခား
ထားပါတယ္။ key ကို ‘ or “ နဲ့ ထည့္ေရးရပါမယ္။ value ကေတာ
့ string/int/float ေပၚမူတည္ျပီး ေရးယံုပါ
ပဲ။ ျပီးေတာ {} တြန္ က
့ ြင္း ကို အသံုးျပဳပါတယ္။

ခု အေပၚက ဥပမာ လိုမ်ိဳး thedict1 = { ဆုိျပီး တစ္ခါတည္း ေရးသြားလိ့ ု ရသလို .. thedict2 = {} ဆိုျ
ပီး အရင္ create လုပ္ ေနာက္မွ thedict [ ‘a’] = ‘Apple’ ဆုိျပီး key = a အတြက္ apple ဆိုတ့ ဲ value ထည့္ေ
ပးလိ့ လဲ
ု ရပါတယ္။

44
http://crossnetmm.com/

ဟုတ္ျပီ.. တစ္ျခား dictionary ကို create လုပ္တဲ ့ နည္းေလး ေတြကိုလဲ ျကည့္ ျကည့္က် ရေအာင္။
Dictionary ထဲက value သည္ list အေနနဲ လ
့ ဲ ထည့္လိ့ ရပါတယ
ု ္ ။ key 1 ထဲကို [2,4,6] ဆုိတ့ ဲ value ထည့္
ထားပါတယ္။ python2.7 မွာဆုိရင္ print dictionary1[1] ဆုိျပီး print ထုတ္ပါ။

python 3.x မွာဆုိ print(dictionary1[1]) ဆုိျပီးေတာ


့ print ထုတ္ပါ။

ခုေအာက္ေကာင္ကေတာ
့ python3.x မွာ ပဲ အဆင္ေျပတာပါ။
dict() ကို သံုးျပီး dictionary2 ထဲ ကို key+value ေတြကို ထည့္တာပါ။

Dictionary3 မွာက် ေတာ


့ (‘a’,’apple’) ဆုိျပီး key+value ကို တစ္ခုခ်င္း သီးျခားစီ ထည့္ပါတယ္။

သြင္းထားတဲ့ data ေတြကို ျပန္ထုတ္ျကည့္ က် ရေအာင္။။ print thedict1 / print thedict2 ဆုိျပီး ထုတ္ျ
ကည့္ပါ။ dictionary ကို unorder, changable ျဖစ္တယ္လိ့ ု ေျပာက် တယ္ဗ်ာ ့.. ဘာကို ေျပာခ်င္တာလဲ ဆုိေ
တာ
့ ခု ထည့္ထားတဲ့ data ေတြသည္ အဆင္လိုက္ျပန္ထြက္မလာတာကို unorder ျဖစ္တယ္လိ့ ု ေျပာပါတယ္။
ျပီးေတာ
့ changable ျဖစ္တယ္ဆုိတ့ ဲ အတုိငး္ tuple လို read-only မဟုတ္ပဲ.. ျပဳျပင္ေျပာင္းလဲ လိ့ ု ရပါတယ္။

45
http://crossnetmm.com/

Key ကို သူးံ ျပီးေတာ


့ သူနဲ ့ Match ျဖစ္ေနတဲ့ data value ကို ထုတ္ျကည့္က် ရေအာင္.. အရင္ေကာ
င္ေတြလ့ ို.. print pyDict[‘apple’] ဆုိျပီး ထုတ္လိုက္ပါ။ ဒီမွာ နဲနဲ ကြာျခားသြားတာက index နဲ့ မဟုတ္ပဲ ကို
ထုတ္ခ်င္တာကို key နဲ ည
့ ြန္းေပးရတာပါပဲ။ data value ကို ျပင္မယ္ modify လုပ္မယ္ဆုိရင္ ကိုယ္ ျပင္ခ်င္တ့ ဲ
ေကာင္ရဲ k
့ ey ကို ညြန္းေပးရမွာပါ။ pyDict[‘car’] = ‘ကား’ ဆုိရင္ car ဆုိတ့ ဲ Key အတြက္ value သည္ ေမာ္
တာကား မဟုတ္ေတာ
့ ပဲ ကားျဖစ္သြားပါတယ္။ ေျပာင္းသြားတာ ေသခ်ာေအာင္ print ထုတ္ ျကည့္ပါ။

print pyDict[‘car’] ဆုိျပီး ထုတ္လိုက္တဲ့ result နဲ ့ print pyDict.get(‘car’) ဆုိျပီး get() ကုိသံုး
လိုက္တဲ့ result သည္ pyDict မွာ တည္ရွိေနတဲ့ key အတြက္ေတာ
့ အတူတူပါပဲ.. အကယ္လိ့ ု မရွိတ့ ဲ key ရဲ ့
value ကိုထုတ္မယ္ ဆုိရင္ေတာ
့ ရလာတဲ့ result သည္ မတူညီေတာ
့ ပါဘူး။ get() နဲ့ ဆုိရင္ key မရွိတာ အ
တြက္ None ဆုိျပီး result return ျပန္လာျပီးေတာ
့ pyDict[‘Hello’] မွာက် ေတာ
့ key error တက္ပါတယ္။

46
http://crossnetmm.com/

ခုဆက္ျပီး ထပ္ျကည့္က် မွာက ဖ်က္ပစ္တာ.. ထပ္ထည့္တာ ေတြကို pop() update() clear() del တု့ ကိ
ိ ု သံုးျပီး
စမ္းျကည့္က် မွာပါ။

အေပၚကပံုမွာဆုိ dict123 ဆုိျပီး dictionary တစ္ခု တည္ေဆက္ထားပါတယ္။ print dict123 ဆုိျ


ပီး ထုတ္ျကည့္ပါ။ ခုက python 2.7 နဲ့ မုိ့ေနာ္.. Python3.x ဆုိရင္ print(dict123) လိ့ ု ေရးရမွာ မမေ
့ နဲေန့ာ္။
pop() ကိုသံုးျပီးေတာ
့ dict123.pop(‘hi’) ဆုိျပီး ‘hi’ ဆုိတ့ ဲ key နဲ့ သူ ရ
့ ဲ v့ alue Hello ကို ဖယ္ထုတ္ လိုက္ပါ
တယ္။ del ကလဲ အလုပ္ လုပ္ပံုဆင္ပါတယ္။ del dict123[‘ok’] ဆုိျပီး ‘ok’ နဲ့ ‘Good’ ကို ဖ်က္ပစ္လ္ က
ို ္ ပါတယ္။
ကြာသြားတာက pop() သည္ ဘယ္ value ဖယ္လိုက္တယ္ ဆုိတာကို ျပန္ ျပျပီး del ကေတာ ့ ဘာမွ ျပန္မျပပါ
ဘူး။ print dict123 ဆုိျပီးထုတ္ျကည့္ရင္ ‘run’:’Play’ ပဲ က် န္ေနတာကို ေတြ ရ
့ မွာပါ။

47
http://crossnetmm.com/

update() ကို သံးု ျပီးေတာ


့ key+value pair ကို ထည့္ျကည့္က် ရေအာင္။ အေပၚက ပံုမွာဆုိ dict123.update(
{'black':'white'} ) ဆုိျပီးေတာ
့ black (key) + white (value) အတြဲ ကို dict123 ထဲ ကို ထည့္လိုက္ပါတ
ယ္။ print dict123 ဆုိျပီး ျပန္ ထုတ္ျကည္ပါ။ pair ေတြကို တစ္ခုထက္ မက ထည့္လို ့ ရပါတယ္။
dict123.update( [ ('Name','AungAung') , ('who','why') ] ) မွာဆုိရင္ လက္သည္းကြင္းထဲ မွာ
( key , value ) ေတြ pair အလိုက္ မ်ားျကီး ထည့္လို ရ
့ ပါတယ္။ ၀င္သြားတာ သိခ်င္ရင္ print dict123 နဲ ထ
့ ု
တ္ျကည့္ပါ။

clear() ကdictionary ထဲက key+value pair ေတြ အကုန္လံုးကို ဖ်က္ပစ္လိုက္တာပဲ ျဖစ္ပါတယ္။


print ထုတ္ျကည့္ရင္ data မရွိတ့ ဲ { } ကိုပဲ ေတြ့ရမွာ ျဖစ္ပါတယ္။ del dict123 ဆိုတာကက် ေတာ
့ dict123
ဆုိတ့ ဲ ေကာင္ျကီးကိုပါ ဖ်က္ပစ္လိုက္တာပဲ ျဖစ္ပါတယ္။ ;-)

မွတ္ထားရမွာက။ Tuple သည္ ( ) List သည္ [ ] ခုေလ့လာေနတဲ့ Dictionary သည္ { }

3. Python Operator

Python ေတြ န
့ ုိင္မယ့္ operator ေတြကေတာ
့ ေအာက္ပါ အတုိင္းပဲ ျဖစ္ပါတယ္။

● Arithmetic Operators
● Comparison (Relational) Operators
● Assignment Operators
● Logical Operators
● Bitwise Operators
● Membership Operators
● Identity Operator

48
http://crossnetmm.com/

3.1 Arithmetic Operators

Arithmetic ကေတာ
့ သူ န
့ ာမည္အတုိင္းပဲ ေပါင္း ႏွဳတ္ ေျမွာက္ စား စတဲ့ .. သခ်ာၤတြက္ခ်က္ မွဳေတြကို
ျပဳလုပ္ေပးတာပဲ ျဖစ္ပါတယ္။

ေပါင္းနွဳတ္ေျမွာက္စား (+-*%)စတဲ့ သေကၤတေတြကို operator လိ့ ု


ေခၚျပီးေတာ
့ x, y စတဲ့ ေကာင္ေတြကိုေတာ
့ operands ေတြလ့ ို ေခၚ
ပါတယ္။
အျပင္စာေတြ advence level လိုက္ခ်င္လ့ ို.. စာေတြဖတ္ရင္ နားလ
ည္ေအာင္လ့ ို.. သံုးတက္တဲ့ အသံုးေလးေတြ ေခၚေလးေတြ ကို ျမင္ေ
အာင္ ေရးေပးထား တာပါ။ operator ဆုိတာဘာလဲ operand ဆုိ
တာဘာလဲ ဘယ္လို ေခၚလဲသိေစခ်င္လ့ ပါ။
ို

ဟုတ္ code ေလးေတြ ေရးျပီး လက္ေတြ စ


့ မ္း သပ္ျကည့္က် ရေအာင္။ ;-)

3.1.1 Addition ( + )

49
http://crossnetmm.com/

X = 10 ဆုိျပီးေတာ
့ variable x ထဲကို 10 ထည့္လိုက္ပါတယ္။ y ထဲ ကိုေတာ
့ 20 ထည့္ထားပါတယ္။ အဲ့ေနာ
က္ print x + y နဲ ့ x နဲ y
့ ေပါင္းျပီး ရလာတဲ့ resulte ကို ထုတ္ျပထားပါတယ္။

Addition operator ျဖစ္တ့ ဲ အပေါင္း ( + ) သည္ Integer ေတြေပါင္းရင္ေတာ


့ calculation လုပ္ေ
ပးျပီး str ေတြကို ေပါင္းရင္ေတာ
့ ဒီတုိင္းပဲ ခ်ိတ္ဆက္ျပီး ေပါင္းေရးလိုက္တာပါပဲ။ ေအာက္က ကုတ္ကို စမ္းျက
ည့္ပါ။

3.1.2 Subtraction ( - )

Python ကို ဒီတစ္ခါက် script အေနနဲ ့ ေရးျကည့္က် ရေအာင္.. editor တစ္ခုနဲ p


့ ython code ေတြ
ကို ေရးလိုက္ပါ။ ကိုယ္ျကိုက္တဲ့ နာမည္နဲ ့ save ပါ။ ခုဒီ ဥပမာမွာေတာ
့ sub.py ဆုိျပီး save ထားပါတယ္။

ျပီးေတာ
့ python sub.py ျပီး run လိုက္ရင္ အေျခ 15 ဆိုျပီး ရပါတယ္။

3.1.3 Multiplication ( * )

50
http://crossnetmm.com/

Multication ဆုိတ့ ဲ အတုိငး္ ေျမွာင္မွာေပါ့။ python မွာ အေျမွာက္အတြက္ *(start) သေကၤတ ကို
သံုးပါတယ္။ ေအာက္က code ေလးကို ေရးျပီး Multi.py ဆိုတ့ ဲ နာမည္ နဲ့ သိမ္းလိုက္ပါတယ္။ ကိုယ္စိတ္ ျကိဳ
က္နာမည္ေပးလို ရ
့ တယ္ေနာ္။

၃ ေျကာင္းေျမာက္ code ျဖစ္တ့ ဲ print (“The result is “ + str(x+y)) အေျကာ


္ းကို နဲနဲေလး စာျပ
န္ေႏြး ပါမယ္။ x နဲ y
့ သည္ int ျဖစ္တာမို သ
့ ူတ့ ကိ
ုိ ု ေပါင္းလို ့ ရလာတဲ့ result သည္လဲ int ပဲ ျဖစ္ပါတယ္။ အဲ့
တာေျကာင့္ print ကို သံးု ျပီး ထုတ္တဲ့ အခ်ိန္မွာ အမ်ိဳးအစား တူမွ အလုပ္ လုပ္တာမို ့ str() ကိုသံုးျပီး string
အေနနဲ ေ
့ ျပာင္းလိုက္ပါတယ္။ အလယ္က အေပါင္းေလးကေတာ
့ “The result is “ ဆုိတ့ ဲ string နဲ့ ေနာက္
က integer ကေန ျဖစ္လာတဲ့ string နွစ္ခုကို ေပါင္းျပီး print ထုတ္ ေပးတာပါ။

ေျမွာက္တဲ့ အခါမွာ int * int တင္မဟုတ္ပဲ int * str လဲ ေျမွာက္လိ့ ရပါတယ


ု ္ ။ ေအာက္က ကုတ္ေ
ကိုစမ္းျကည့္လိ့ ု ရပါတယ္။

ေနာက္ထပ္ အဆင့္ေလးနည္းနည္း ေလာက္ ထပ္တုိးျကည့္က် ရေအာင္။ ခု တု့ ေတြ


ိ ေရးေနတာေတြ
သည္ ျကိုတင္ သက္မွတ္ထားတဲ့ တန္ဖိုးေတြကေန တြက္ထုတ္ေနတာ။ ဆုိေတာ
့ အဲ့လို မဟုတ္ပဲ User ဆီကေ
န input (operand) ယူျပီး တြက္ ထုတ္ျကည့္က် ရေအာင္။

*********** Python User Input ***********

51
http://crossnetmm.com/

Python 2.7 မွာဆုိရင္ user ဆီကေန input ယူဖုိ့အတြက္ သံးု နုိင္တ့ ဲ function က နွစ္ခု ရွိတယ္။
input() နဲ ့raw_input() တုိ ပ
့ ဲျဖစ္ပါတယ္။ အဲ့နွစ္ေကာင္ဘယ္လို ကြာျခားလဲဆုိတာကို တစ္ခ်က္ျကည့္ ျက
ည့္က် ရေအာင္ ဗ်ာ။

abc = input(“Please enter your intput : “) လို ေ


့ ရးျပီး enter ေခါက္လိုက္တာနဲ့ Please enter your
input : ဆုိျပီးေတာ
့ ေပၚလာပါလိမ့္မယ္။
ဘာလို လ
့ ဲဆုိေတာ
့ python ရဲ i့ nterpreter သည္ line by line / statement by statement အလုပ္လုပ္
ပါတယ္။ ခုက interactive mode ဆုိေတာ
့ တစ္ေျကာင္းေရးရင္ တစ္ေျကာင္း လုပ္သြားတာကို ပိုျပီးျမင္သာပါ
တယ္။ script mode မွာက် ေတာ
့ python အေနနဲ့က code ေတြကို တစ္ခုခ်င္း အလုပ္လုပ္ (execute) လုပ္
သြားေသာ
္ လဲ.. output ကိုပဲ ျမင္ရတာေပါ့။
အုိေက ဆက္မယ္.. အဲ့လို ့ Please enter your input : ဆုိျပီး ေတာင္းေတာ
့ 123 လို ့ enter ေခါက္ျပီး input
အေနနဲ ့ ထည့္လိုက္ပါ။ အဲ့တာဆုိရင္ abc ဆုိတ့ ဲ variable ထဲကို user ကေနထည့္လိုက္တဲ့ input တစ္ခု ၀င္
သြားပါျပီ။ အဲ့ေကာင္သည္ int (integer) အေနနဲ ၀
့ င္တာလား str (string) အေနနဲ ့ ၀င္တာလား သိခ်င္ရင္
type() ကုိသံုးျပီး abc ကို စစ္ျကည့္ပါ။ int type ျဖစ္ေနတာကို ေတြ ရ
့ ပါမယ္။ အ၀ါေရာင္နဲ ့hight light လု
ပ္ေပးထားပါတယ္။ abc ထဲက data ကို ထုတ္ခ်င္ရင္ >>> (chevron) မွာ abc လိ့ ေရးျပီ
ု း enter ေခါက္လိုက္
ယံုပါပဲ။

ခု integer ထည့္လိုက္ေတာ
့ ျပန္ထြက္လာတာသည္လဲ interger ပါ။ string ထည့္ရင္ေကာ ဘာျပန္ထြက္
လာမလဲ စမ္းျကည့္ပါ။ abc = input(“Please enter your intput : “) လို ေ
့ ရးျပီး enter ေခါက္လိုက္တာနဲ ့
input ေတာင္းရင္ ‘123’ ဆုိျပီး single quote နဲ ့ ေရးလိုက္ပါက python သည္ အဲ့သည့္123 ကို string အေန
နဲ ထ
့ ည့္တယ္လိ့ ု ယူဆပါတယ္။ input() ကိုသံုးျပီး abc ထဲ ကို ထည့္လိုက္တဲ့ အခ်ိန္ မွာ ဘာအမ်ိဳး အစားလဲ သိ
ခ်င္ရင္ type() ကိုသံုးျပီး စစ္ျကည့္ပါက str (string) ျဖစ္ေနတာကို ေတြ ရ
့ မွာပါ။ abc ထဲ က data ကို ျပန္ထု
တ္ျကည့္ရင္လဲ ‘123’ ဆုိျပီး ထြက္လာတာကို ေတြ ရ
့ မွာပဲ ျဖစ္ပါတယ္။

52
http://crossnetmm.com/

Input() ကို စမ္းျပီးျပီ ဆုိေတာ


့ raw_input() ကို ဆက္ျပီး စမ္းျကည့္က် စို ။့ xyz = input(“Please
enter your intput : “) လို ရ
့ ုိက္ရင္ ့ Please enter your input : ဆုိျပီး user ဆီကေန input ေတာင္းပါလိ
မ့္မယ္။ အဲ့အခါက် 123 လို ့ ရိုက္ ျပီး enter ေခါက္လိုက္ရင္ variable xyz ထဲကို အဲ့data ၀င္သြားပါလိမ့္မယ္။
str လား int လား သိခ်င္ရင္ type() ျကည့္လိုက္တဲ့ အခါမွာေတာ
့ str အေနနဲ သ
့ ိမး္ ဆည္းတာကို ေတြ ရ
့ ပါ
တယ္။ xzy ထဲမွာ ရွိတ့ ဲ data ကို ျပန္ထုတ္ ျကည့္ရင္လဲ ‘123’ ဆုိျပီး string အေနနဲ ့ ပဲ ေတြ ရ
့ ပါတယ္။

ေနာက္တစ္ခါ ‘123’ ဆိုျပီး string အေနနဲ ့ input ထည့္လိုက္ပါတယ္။ type() နဲ ့ ျကည့္ရင္ string ျဖစ္တယ္
ဆုိတာကို ေတြ ရ
့ မွာပါ။ အဲ့တာအျပင္ သိမး္ တဲ့ အခ်ိန္မာွ သူသည္ ‘(single quotes) ေတြကိုပါ ထည့္သိမ္းပါ
တယ္။ အဲ့ဒါေျကာင့္ xyz ထဲ က data ကို ျပန္ထုတ္တဲ့ အခ်ိန္မာွ “ ‘ 123 ‘ “ဆုိျပီး ျမင္ရတာပါ။

Python2.7 အတြက္ user input Function ေတြ ျပီးသြားျပီ ဆုိေတာ


့ python3.x အတြက္ ဆက္ျပီး ေလ့လာျ
ကည့္ က် ရေအာင္။ ခု က် ြန္ေတာ
္ စက္ထဲမွာ ရွိတ့ ဲ Python3.7 နဲ စ
့ မ္းျပထားပါတယ္။

input() function ကို သံးု ျပီး input ေတာင္းတဲ့ အခ်ိန္မွာ integer အေနနဲ 1့ 23 ဆုိျပီး ထည့္လိုက္ပါတယ္။
type() function နဲ ျ့ ပန္ျပီး စစ္ျကည့္တဲ့ အခ်ိန္မွာ str အေနနဲ ပ
့ ဲ ေတြ ရ
့ ပါတယ္။ a ထဲ က data ကို ျပန္ထုတ္
ရင္ လဲ ‘123’ ဆုိျပီး ထြက္လာပါတယ္။

53
http://crossnetmm.com/

ဒီတစ္ခါမွာေတာ
့ ‘123’ ဆုိျပီး string အေနနဲ v့ ariable a ထဲကို user ကေန ရိုက္တဲ့ input ကို ထည့္လိုက္ပါ
တယ္။ type() နဲ့ ျကည့္ရင္ str ဆုိတာကိုပဲ ေတြ ရ
့ ပါတယ္။ a ထဲက data ကို ျပန္ထုတ္ျကည့္တဲ့ အခါမွေတာ
့ “
‘ 123 ‘ “ ဆိုျပီးေတာ
့ ‘(single quotes) ေတြကိုပါ ထည့္သိမ္းထားတာကို ေတြ ရ
့ ပါမယ္။

Input ယူတ့ ဲ နည္းေတြကို သိသြားျပီ ဆုိေတာ


့ Multiplication ကို ျပန္ စမ္းျကည့္က် ရ ေအာင္။

အေပၚက ကုတ္ေတြကို multi_input.py ဆုိတ့ ဲ နာမည္တဲ့ save လိုက္ပါ။ အဲ့ script ဖုိင္ကို python
multi_input.py ဆုိျပီး execute လုပ္လိုက္ပါ။ ေအာက္ပါ result အတိုင္း ရရွိလာပါလိမ့္မယ္။

အဲ့ဆုိ ေျမွာက္တာလဲ ျပီးျပီ ဆုိေတာ


့ ေနာက္ထပ္ က် န္ေနတဲ့ Division( / ), Modulus( % ),
Exponentiation( ** ), Floor division or quotient( // ) ေတြကို script နဲ ့ တစ္ခါတည္း ေရးျကည့္က်
ရေအာင္ ;-)

*********** Python 2.7(division, Modulus, Exponentiation) ***********

54
http://crossnetmm.com/

ေအာက္ ကုတ္ကို ထံုးစံ အတုိငး္ ေရးျပီး save ပါ။ က် ြန္ေတာ


္ ကေတာ
့ math.py ဆုိျပီး သိမ္းခဲပ
့ ါတယ္။

အဲ့ေနာက္ script ကို execute လုပ္လုိက္ေတာ


့ Num1 အတြက္ ၅ ေပးျပီ Num2 အတြက္ ၂ ထည့္ေ
ပးလိုက္ပါတယ္။

ရလာတဲ့ result သည္ Num1 (5) ကို Num2 (2) နဲ ့ စားလိုက္ရင္ division or quotient သည္ 2 ျဖစ္ျပီး
modulus သည္ 1 ျဖစ္ပါတယ္။ ျပီးေတာ
့ Num1 to the power Num 2 => 5 2 ျဖစ္တာမို့ 25 ျဖစ္ပါတယ္။
ဒါက Python 2.7 မွာ မို d
့ ivision နဲ ့ Floor division or quotient နဲ က
့ တူတာပါ။

55
http://crossnetmm.com/

*********** Python 3.7(division, Modulus, Exponentiation) ***********

Python 3.7 မွာဆုိရင္ quotient ကို . ဒသမကိန္း (float) နဲ ့ ျပတာမုိ ့ division နဲ မ


့ တူေတာ
့ ပါဘူး။
ျပီးေတာ
့ ေရးမယ့္ကုတ္မွာကလဲ နဲနဲေလး ကြဲျပားသြားပါတယ္။ input() သည္ Python 2.7 မွာ တုန္းက int သြ
င္းရင္ int အေနနဲ ့ သိမ္းျပီး str သြင္း str ၀င္ပါတယ္။ ခု Python 3.7 မွာက် ဘယ္ input ေနေန str အေနနဲ့
ပဲ သိမ္းပါတယ္။ အဲ့တာ ေျကာင့္ Math calculation ေတြလုပ္မယ္ဆုိ string ျဖစ္လ့ ို ကေတာ
့ ဘယ္လိုမွ အ
ဆင္မေျပပါဘူး.. int() ကို သံးု ျပီး ရလာတဲ့ input ကို str to int ေျပာင္းေပးရပါမယ္။ ေအာက္က ကုတ္ကို ျက
ည့္ပါ။

Math.py ဆုိတ့ ဲ နာမည္နဲ ပ


့ ဲ သိမး္ လိုက္တာမုိ .့ . Python3 math.py ဆုိျပီး run လိုက္ပါ။

ဟုတ္ျပီး ခုဆိုရင္ division သည္ float တန္ဖုိး ျဖစ္တ့ ဲ 2.5 ကို ေပးပါတယ္။ quotient ကေတာ
့ 2 ပါ။ အဲ့ေလာ
က္ဆုိ ရမယ္ လိ့ ု ေမွ်ာ္လင့္ပါတယ္။ တစ္ျခား ဂဏန္းေတြန့လ
ဲ ဲ စမ္းျကည့္ေစခ်င္ပါတယ္။ happy coding ;-)

3.2 python Comparison operator

56
http://crossnetmm.com/

Python မွာရွိတ့ ဲ variable/operand ေတြကို ႏွဳိင္းယွဥ္တ့ ဲ ေပးတဲ့ operator ေတြက ေအာက္ပါ။ အ


တုိုင္း ျဖစ္ပါတယ္။ သူတ့ ရဲ
ုိ ့ symbol သေကၤတေတြ အတုိင္း အလုပ္ လုပ္တာပါ။ ကုတ္ေလးေတြ ေရးျပီး စမ္းျက
ည့္က် ရေအာင္ ဗ်ာ။

ခု basic အေနနဲ ့ စမ္းမယ့္ OP 6 ခုကို စမ္းဖုိ့အတြက္ interactive mode မွာ စမ္းျကည့္က် ပါမယ္။ ထ
ည့္လိုက္တဲ ရ
့ လာတဲ့ input ေတြေပၚမူတည္ျပီး condition ကို စစ္ပါမယ္။ condition မွန္တယ္ ဆုိရင္ True
(boolean) ကို ရမွာ ျဖစ္ျပီး.. Condition မကိုက္ရင္ ေတာ
့ false ပါ။.. Comparison Opeator ဆုိတ့ ဲ အတိုင္း
operands ေတြကို compair(နွိဳင္းယွဥ္) လုပ္တာပါ။ လက္ေတြ့ ကုတ္ေတြ ေရးျကည့္ ရင္ မ်က္စိထဲ ပိုျမင္ပါလိ့မ္
မယ္။ စမ္းျကည့္က် စုိ ။့

X = 5, y = 5 ဆုိျပီး x နဲ ့ y ထဲကို 5 ေတြထည့္လုိက္ပါတယ္။ အဲေနာက္ x == y ဆုိျပီး x ထဲမွာရွိတ့ ဲ


value နဲ y
့ ထဲမွာရွိတ့ ဲ == ဆုိတ့ ဲ operator ကိုသံုးျပီးေတာ
့ ႏွိဳင္းယွဥ္ျကည့္ပါမယ္။ == ဆိုတာသည္ ညီလား ဆုိ
တာကို စစ္တာပါ။ x == y သည္ 5 == 5 ျဖစ္တာမို ့ condition ကိုက္ညီတ့ အတြ
ဲ က္ True ဆုိျပီး ရပါတယ္။

57
http://crossnetmm.com/

ဒီေနရာမွာ တစ္ခုမွတ္ရမွာသည္ == သည္ conditon ကိုစစ္တ့ ဲ operator ျဖစ္ျပီးေတာ


့ = သည္
assign လုပ္ေပးတဲ့ ေကာင္ပါ။။ အဲ့ေနာက္ x != y ဆုိျပီး condition ကို စစ္ျကည့္လိုက္ပါတယ္။ ဒီေနရာမွာ !
သည္ not ဆုိတ့ ဲ အဓိပၸါယ္ ျဖစ္တာမို ့ x is not equal y ? ဆုိျပီးေတာ
့ စစ္ျကည့္တဲ့ အခ်ိန္မွာ 5 != 5 သည္
ညီေနတာမုိ ့ condition မကိုက္ေတာ
့ ပဲ false ရပါတယ္။ တစ္ကယ္လိ့ ု != နဲ စ
့ စ္ျပီး True ရခ်င္တယ္ ဆုိရင္ေ
တာ
့ x, y ထဲကို မတူညီတ့ ဲ ဂဏန္းတန္ဖုိးေတြ ထည့္လိုက္ပါ။

equal နဲ ့ not equal ကိုေတာ


့ စမ္းျပီးသြားျပီးဆုိေတာ
့ Greater than / Less Than ကို ဆက္စမ္းျကည္က် စို

x = 10, y = 20 ထည့္ထားျပီး.. x > y လိ့ ု စမ္းလိုက္ရင္ ဘာအေျဖထြက္မလဲ ? x < y ဆုိရင္ေကာ? အေျဖကို စိ
တ္ထဲကေန မွနး္ ျကည့္ထားေနာ္.. ေအာက္မွာ ကုတ္ေလးေရးျပီး စမ္းျကည့္မယ္ ကိုယ္ထင္တာမွန္ မမွန္ေပါ့။

x ထဲမွာက ၁၀ ရွိတယ္ y ထဲမွာက ၂၀ ရွိတယ္။ x > y ( x က y ထက္ျကီးလား) ဆုိေတာ


့ condition မကိုက္
တဲ့ အတြက္ false ပါ။ x < y ဆုိရင္ေတာ
့ y ထဲက 20 သည္ x ထဲမွာရွိတ့ ဲ 10 ထက္ျကီးတာမို ့ condition မွန္
တဲ့ အတြက္ True ျဖစ္ပါတယ္။

ေနာက္တစ္ခါ >= (Greater than or equal) နဲ ့ <= (less than or equal) ကို စမ္းျကည့္က် ရေအာင္။ x >= y
မွာ condition စစ္တ့ ဲ အခ်ိန္က် x က y ထက္ ျကီးခဲရ
့ င္ပဲ ျဖစ္ျဖစ္ ညီခရ
ဲ့ င္ပဲ ျဖစ္ျဖစ္ True ရပါတယ္။ ဘာလိ့ လဲ

ဆိုေတာ
့ >= ရဲ အ
့ ဓိပၸါယ္ Greater than or equal ဆုိတ့ ဲ အတုိငး္ ျကီးတာ နဲ ့ ညီတာ တု့ ထဲ
ိ က condition တ
စ္ခုခု နဲ့ ကိုက္ခဲရ
့ င္ True ပါ။ ဆုိေတာ
့ x ထဲကို 20 ထည့္ျကည့္ရေအာင္.. Y ကို ေတာ
့ အရင္အတုိင္း 20 အေန
နဲ ပ
့ ဲ ထားခဲဲ့လိုက္ေပါ့။ အဲ့ဆုိ condition စစ္ ရင္ True ရရမယ္ေနာ္။

58
http://crossnetmm.com/

x ကို ၃၀ ေပးျကည့္မယ္ ဆုိရင္ True ဦးမွာလား.. ?

x = 30, x >= y ဆုိရင္လဲ True ပဲ ရပါတယ္။ x ထဲက 30 သည္ y ထဲက 20 ထက္ ျကီးတာမုိ .့ . True ပါ။

X <= y (less than or equal) နဲ ့ စစ္တ့ ဲ အခ်ိန္က် x ထဲက dataျဖစ္တ့ ဲ 30 သည္ y ရဲ 2


့ 0 နဲ့ နွိဳင္းယွဥ္တ့ ဲ အခါ
မွာေတာ
့ less than ဆုိတ့ ဲ conditon နဲ လ
့ ဲ မညီ.. Equal ညီလား ဆုိေတာ
့ လဲ တန္ဖးုိ ေတြက မတူတာမို ့
False ပဲ ရပါတယ္။ true ရေစခ်င္ရင္ တန္ဖုိး တူေအာင္ျဖစ္ျဖစ္ y တန္ဖုိးကို x ထက္ျကီးေအာင္ ျဖစ္ျဖစ္ လုပ္လို
က္ရင္ condition မွန္သြားမွ True ထြက္ပါတယ္။

3.3 Python assignment Operator

59
http://crossnetmm.com/

ဟုိုးအေရွ မ
့ ွာတုန္းက simple assignment operator ေလးတစ္ခုျဖစ္တ့ ဲ = (equal) အလုပ္ လုပ္ပံုကို
မွတ္မိတယ္ ဟုတ္? သူက i = 5 မွာဆုိရင္ ညာဘက္က 5 သည္ ဘယ္ဘက္က variable i ထဲကို assign လု
ပ္ေပးရမယ္ value တစ္ခုပဲျဖစ္ပါတယ္။ ေျပာခ်င္တာက ညာဘက္မွာရွိတာသည္ assign လုပ္မယ့္ေကာင္ ဘယ္
ဘက္ကေကာင္သည္ assign လုပ္ခံရမယ့္ေကာင္.. အလယ္က ေနရာကေတာ
့ assignment operator အတြ
က္ပဲ ျဖစ္ပါတယ္။

ခုဆက္ေလ့လာမယ့္ assignment operator ေတြကို compound assign operator ေတြလ့ ို ေျပာနုိ


င္ပါတယ္။ ဘာလိ့ လဲ
ု ဆုိေတာ
့ သူတ့ ပဲ
ို ပံုမွန္အတုိင္း data value ကို assign ေပးတာမ်ိဳးပဲ မဟုတ္ပဲ.. တစ္ျခား ေ
ကာင္ေတြရဲ ့ ဂုဏ္သတၱိ (ေပါင္းနွဳတ္ေျမွာက္စား စတာေတြ) ပါ၀င္ေပါင္းစပ္ေနလိ့ ပါ။
ု i += 8 ဆိုရင္ သူ့အလုပ္
လုပ္သြားတဲ့ ပံုစံသည္ i = i + 8 ပါ။ python interpreter သည္ ညာကေန ဘယ္ကို သြားတာမုိ ့ 8 နဲ i့ ထဲမွာ
ရွိတ့ ဲ တန္ဖုိးကို ေပါင္းျပီ i ထဲ ျပန္ထည့္လိုက္တာပါ။ ျမင္သာေအာင္ေျပာင္ရင္ program တစ္ခါ run ျပီးတုိင္း
တစ္တိုးခ်င္တာမ်ိဳးမွာဆို i = 0, i +=1; မွာဆုိရင္ i ထဲမွာက initial တန္ဖုိးသည္ 0 ပါ အဲ့တာကိုမွ တစ္ခါ run တုိ
င္း တစ္ေပါင္းခ်င္တာမုိ ့ i += 1 ( i = i + 1) လိ့ ု ေရးလိုက္တာပါ။ အကယ္လိ့ ု တစ္ခါ run ျပီးတုိင္း ၂ တုိးခ်င္တယ္
ဆုိရင္ေတာ
့ i += 2 ေပါ့။ user ဆီက input ေတာင္းမယ္.. ျပီးေတာ
့ operator ေတြ အကုန္ ပါေအာင္ script
ေလးေရးျကည့္က် ရေအာင္။

အေပၚက code ေတြကို run လိုက္ရင္ ေအာက္ပါ အတုိင္း result ထြက္ပါတယ္။ ဟုတ္ မဟုတ္ ကို
တစ္ဆင့္ခ်င္း ျပန္ ျကည့္ က် ရေအာင္။

60
http://crossnetmm.com/

Line 1 => ပထမဆံုး user ကေန ရတဲ့ 3 ကို x ထဲကို ထည္ပါတယ္။


Line 3 => x += 1 ဆုိတ့ အတြ
ဲ က္ x ထဲက 3 နဲ ့ 1 နဲ က
့ ိုေပါင္းျပီး x ထဲကိုျပန္ထည့္ပါတယ္။ ခုလက္ရွိ x ရဲ တ
့ န္
ဖုိးသည္ 4 ပါ။
Line 4 => x ထဲမွာ ခုလက္ရွိ ရွိေနတဲ့ တန္ဖိုးကို print ထုတ္ပါတယ္။ x သည္ int ျဖစ္ျပီး “ နဲ့ ေရးထားတာေ
တြသည္ string ျဖစ္တာမုိ ့ data type တူေအာင္ str() ကိုသံုးပါတယ္။
Line 6 => x **=2 (x = x ** 2) သည့္ X2 ျဖစ္တာမုိ ့ လက္ရွိx တန္ဖုိးက ၄ ဆိုေတာ
့ အေျဖက 16 ပါ။
Line 7 => x တန္ဖိုး ၁၆ ျဖစ္သြားတာကို print ထုတ္ေပးတာပါ။
Line 9 => x -= 1 ဆုိေတာ
့ x(၁၆) ထဲက ၁ နွဳတ္ျပီးတာ
့ x ထဲကိုျပန္ထည့္ေပးပါ။ လက္ရွိ x တန္ဖုိး ၁၅ ပါ။
Line 10 => ခုလက္ရွိ x (x -= 1 ေျကာင့္ ရလာတဲ့ x ) ကို print ထုတ္ပါ။
Line 12 => x *= 2 ဆုိေတာ
့ x(15) ကို 2 နဲ့ေျမွာက္. အေျဖ 30 ကို x ထဲ ျပန္ထည့္
Line 13 => x ကို ထုတ္ျပ
Line 15 => x /= 3 မွာ x(၃၀) ကို ၃နဲ စ
့ ားျပီး ရလာတဲ့ quotient(10) ကို x ထဲ ျပန္ထည့္
Line 16 => လက္ရွိ x တန္ဖုိးကို ထုတ္ပါ
Line 18 => x %= 3 ဆုိေတာ
့ x(10) ကို 3 နဲ့ စားျပီး ရလာတဲ့ အျကြင္း 1 ကို x ထဲ ထည့္ပါ။
Line 19 => ခု လက္ရွိ x ထဲမွာ ရွိေနတဲ့ data ကို print ထုတ္ပါ
Line 21 => x //=4 က က် ေတာ
့ x(1) ကို 3 နဲ့ စားေတာ
့ 0 ပဲရပါတယ္။ 0 ကို x ထဲ ထည့္ပါ။
Line 1 => x တန္ဖုိးကို Print ထုတ္ပါ။

အုိေက ဒီေလာက္ဆုိ သေဘာေပါက္ေလာက္ျပီလ့ ို ေမွ်ာ္လင့္ပါတယ္။

Logical Operator နဲ B
့ itwise Operator အေျကာင္းကို ေနာင္က် မွ ဆက္ရွင္းပါတယ္။ ခု လက္ရွိ အသံုးလို
မယ့္ Membership Operator နဲ I
့ dentity Operator အေျကာင္းကို အရင္ ေလ့လာပါမယ္။

3.4 Python Membership Operator

61
http://crossnetmm.com/

in ဆိုတ့ ဲ Membership Operator သည္ value တစ္ခု sequence ထဲ မွာ ရွိမရွိ စစ္ပါတယ္။ စစ္လ့ ို ရွိရင္
True မရွိရင္ False ထုတ္ေပးပါတယ္။ ဥပမာ ေျပာရရင္ chir in house ? စစ္မယ့္ ရွာခ်င္တ့ ဲ ေကာင္သည္
chir ျဖစ္ျပီးျပီးေတာ
့ ရွာရမယ့္ ေနရာသည္ house ျဖစ္ပါတယ္။ in ဆိုတ့ ဲ operatorျဖစ္တာမုိ ့ ရွိရင္ true ထြ
က္ လာပါလိမ့္မယ္။ logic အေနနဲ ့ ရွင္းျပတာပါ။.. ေအာက္ ကုတ္ေလးနဲ စ
့ မ္းျကည့္ပါ။

house ဆိုတ့ ဲ string variable ထဲမွာ ‘chir’ ပါမပါကို စစ္ပါတယ္။ ေတြ့တဲ့အတြက္ true ရပါတယ္။ in
operator သည္ ရွိတာကို စစ္တာမုိ့.. မပါတဲ့ ‘TV’ ဆိုတာကို ရွာရင္ေတာ
့ မရွိတ့ ဲ အတြက္ False ပါ။

မရွိတာကို စစ္ေစခ်င္ရင္ေတာ
့ not in Operator ကို သံုးပါတယ္။ အဲ့အခါက် ရင္ေတာ
့ မရွိခရ
ဲ့ င္ True
ရပါတယ္။

3.5 Python Identity Operator

62
http://crossnetmm.com/

Identity ဆိုတာက် .. သူသည္ condition ကို စစ္တာမဟုတ္ေတာ


့ ပဲ memory ေပၚက object တစ္
ခုရဲ ့ ID ကို ျကည့္တာပါ။ နဲနဲ ရွဳတ္သြားမယ္ထင္တယ္။။ code ေလးေတြနဲ ့ တစ္ခုခ်င္း ရွင္းျပ ေပးသြား ပါမယ္။

x = 5 ဆုိျပီးေတာ
့ x ထဲကို Integer 5 ထည့္လုိက္ပါတယ္။ အဲ့ေနာက္ memory ေပၚမွာ 5 ရွိေနတဲ့ identity
ကို id() ကို သံးု ျပီးေတာ
့ စစ္ျကည့္လိုက္ရင္ 2147535680L ဆုိျပီး ရပါတယ္။ အဲ့တာကို y = x နဲ x
့ ထဲကောင္
ကို y ထဲကို ထည့္လုိက္ပါတယ္။ အဲ့ေနာက္ id(y) ဆုိျပီးစစ္ရင္လဲ 2147535680L ဆိုတ့ ဲ ID ကိုပဲ ရပါတယ္။
ဒါဆုိ z = 5 ဆုိျပီး x ထဲကေန ထည့္တာမ်ိဳးမဟုတ္ပဲ int 5 ကို z ထဲထည့္ရင္လဲ 2147535680L ဆုိတ့ ဲ ေကာ
င္ပဲ ရပါတယ္။ ေျပာခ်င္တာက ID သည္ object တုိင္းအတြက္ (ခု ဥပမာမွာဆုိ 5) unique ျဖစ္ပါတယ္။

● The id() function returns identity of the object. This is an integer which is
unique for the given object and remains constant during its lifetime.

အဲ့ဆို Identity opeartor ေလးကို တစ္ခ်က္ ဆက္ျကည့္က် ရေအာင္။

63
http://crossnetmm.com/

x ထဲမွာလဲ 2 ရွိတယ္။ y ထဲမွာလဲ 2 ရွိတယ္။ x is y ဆိုျပီးေတာ


့ x ရဲ ့ identity နဲ y
့ ရဲ I
့ dentity တူလား စ
စ္ေတာ
့ True ဆုိျပီး အေျဖရပါတယ္။ 2 ဆိုတ့ ဲ ေကာင္ရဲ့ id သည္ x ထဲမွာပဲ ရွိရွိ y ထဲမွာပဲ ရွိရွိ သည္တစ္ခု ပဲမုိ့
အတူတူ ျဖစ္တာေျကာင့္ true ဆုိျပီး ရတာပါ။ y is z မွာက် 2 နဲ့ 3 မုိ ့ မတူတ့ ဲ အတြက္ false ရပါတယ္။ y is
not z က် ေတာ
့ မတူတာ ဟုတ္ မဟုတ္ စစ္တာမုိ .့ . မတူတ့ အတြ
ဲ က္ False ရပါတယ္။

4. Python Decision maker

Python ရဲ d
့ ecision maker မွာ ဘာေတြပါလဲဆုိေတာ
့ if, if .. else, if .. elif .. else, nested if
တုိ ပ
့ ါ၀င္ပါတယ္။ အဲ့ေကာင္ေတြကို တစ္ခုခ်င္း ေလ့လာျကည့္က် ရေအာင္။

4.1 if statement

x = input(“please enter number : “)


if (x > 5):
print (“x is greater than 5”)

if (x < 5):
print (“x is less than 5”)

print (“Program is finished”)

64
http://crossnetmm.com/

If သည္ သူ ေ
့ နာက္က condition မွန္မွ (true ရမွ) သူနဲ သ
့ က္ဆုိုင္တဲ (့ Block of code) statement ေတြ
ကို ဆက္ျပီး အလုပ္ လုပ္ပါတယ္။ condition မကိုက္ရင္ (False ရရင္) .. သက္ဆုိင္ရာ if ရဲ ့ statemnt
ေတြကိုေက် ္ ာသြြားျပီးေတာ
့ ေအာက္က ေကာင္ေတြကို ဆက္လုပ္ပါတယ္။

ခု အေပၚက ကုတ္ေလးမွာဆုိရင္ input တစ္ခုေတာင္းလိ္ က


ု ္ ပါတယ္။ အဲ့လိုေတာင္းလိုက္လိ့ ု ရလာတဲ့ ေ
ကာင္သည္ 5 ထက္ျကီးရင္ x is greate than 5 ဆုိျပီး resulte ထြက္လာပါလိမ့္မယ္။ 5 ထက္ ငယ္ရင္ x is
less than 5 ဆိုတ့ ဲ result ကို ရပါလိမ့္မယ္။ line 1 က input ေတာင္းတဲ့ ေကာင္ကေတာ
့ ရွငး္ ပါတယ္။ ေအာ
က္ if သည္ သူ ေ
့ နာက္က () ကြင္းစ ကြင္းပိတ္ ထဲက condition မွန္မွ True ျဖစ္မွ သူ ေအာက္ statement
ေတြက အလုပ္ လုပ္ပါတယ္။ if ရဲ ေ
့ နာက္မွာ : (full column) လိုက္ပါတယ္။ ျပီးေတာ
့ tap တစ္ခါ ခုန္ပါတယ္။
ျပီးမွ print ထုတ္ရမယ့္ေကာင္ကို ေရးပါတယ္။ ဘာလိ့ ု လဲဆုိေတာ
့ Python သည္ Indentation နဲ့ အလုပ္ လု
ပ္လ့ ပါပဲ
ို ။ ခု code ကို အရင္ run ျပီး စမ္းစစ္ျကည့္က် ပါစို .့ . ျပီးမွ indentation ကို ဆက္ျပီး ေလ့လာပါမယ္။

Program ကို run လိုက္တဲ့ အခ်ိန္မာွ ..


Line1 => input တစ္ခုေတာင္းလိ့ ု 10 ထည့္ေပးလိုက္ပါတယ္။ x ထဲကို int ေျပာင္းျပီး ထည့္လုိက္ပါတယ္။

65
http://crossnetmm.com/

Line2 => ရလာတဲ့ x(10) သည္ 5 ထက္ျကီးလား စစ္ပါတယ္။ int မို စ


့ စ္လ့ ရတာပါ။
ို str ဆို error တက္ပါ
လိမ့္မယ္။ x က ျကီးတာမုိ့ True ရတဲ့ အတြက္ Line3 => if ေအာက္ က statement သည္ အလုပ္လုပ္ျပီး
“x is greater than 5” ဆုိျပီး ထြက္လာပါလိမ့္မယ္။
Line5 => if(x < 5) ဆိုျပီး x က 5 ထက္ငယ္လား စစ္ပါတယ္။ ျကီးတာမုိ ့ condition မကိုက္တဲ့ အတြက္
false ရပါတယ္။ အဲ့ေျကာင့္ if(x<5) နဲ့ ဆုိင္တ့ ဲ statement ေတြကိုဆက္ မ run ေတာ
့ ပဲ ထြက္သြားပါတယ္။

ဟုတ္ျပီ input လဲ မေတာင္းေတာ


့ ဘူး.. X is less than 5 ဆုိတာ ထြက္ခ်င္ရင္ ဘယ္လိ့ ု လုပ္မလဲ.. လုပ္လ့ ို ရ
တာေတြထဲကမွ လြယ္တာကေတာ
့ if ေနာက္က condition ကို True / false တန္းေပးလိုက္တာပါပဲ။

# ကို Python ရဲ့ line of code ေတြကို မလုပ္ မလုပ္ေစခ်င္တာ run တဲ့ အခါမွ ထည့္မ Run ေစခ်င္တာမိ်ဳးအ
တြက္ လဲ သံုးပါတယ္။ If သည္ သူ ေ
့ နာက္ condition မွန္မွ အလုပ္လုပ္တာမုိ i့ f (True): နဲ့ သက္ဆုိင္တ့ ဲ ေ
ကာင္ပဲ အလုပ္ လုပ္လုိ ့ x is less than 5 ထြက္လာတာပါ။

Python Indentation

Python သည္ တစ္ျခား programming Language ေတြျဖစ္တ့ ဲ Java, C, C++, etc.. တုိ လ
့ ို ( { } )
တြန္ က
့ ြင္းစ တြန္ က
့ ြင္းပိတ္ ေတြ သံးု ျပီးေတာ
့ code block ကို မသတ္မွတ္ပါဘူး။ Block of code ဆုိတာက
Class ေတြ function ေတြေရးတဲ့အခါက် .. အဲ့ေကာင္ေတြနဲ သ
့ က္ဆုိင္တ့ ဲ code ေတြသည္ ဘယ္ကေန ဘယ္
ထိ ဆုိတာကို နယ္ေျမသတ္မွတ္ေပးဖုိ ့{ } ေတြကို သံုးရပါတယ္။ ခု ေအာက္ ပံု C Plus Plus မွာ if ကို သံးု ထား
ပံုပါ။

66
http://crossnetmm.com/

အေပၚက ကုတ္ေတြမွာဆုိ အရင္ဆံုး အလုပ္ လုပ္မယ့္ Main အတြက္ { } ပိတ္ပါတယ္။ အဲ့ထဲမွာမွ သူနဲ
့ သက္ဆုိင္တ့ ဲ code ေတြရွိတယ္ေပါ့။ if ( b > a ) ဆုိရင္လဲ condition မွန္ရင္ လုပ္မယ့္ ေကာင္သည္ { } ထဲ
မွာ ရွိေနတာပါ။ ေျပာခ်င္တာက condition မွန္ရင္ အလုပ္လုပ္မယ့္ ေကာင္သည္ { } ထဲမွာ ရွိေနတဲ့ code ေတြ
အကုန္ပါ။ c, C++, java, စတဲ့ ေကာင္ေတြမွာ tab ခုန္ space ျခားတာသည္ အျမင္လွေအာင္ ကုတ္ကို ရွင္းရွ
င္းျမင္ေအာင္ လုပ္ေပးတာပဲ ရွိတယ္။ space မျခား tab မခုန္လဲ မွန္ကန္စြာ အလုပ္ လုပ္ပါတယ္။ Python မွာ
က် ေတာ
့ { } ေတြ မသံုးေတာ
့ ပဲ white space ( space /tab ) နဲ ့ အလုပ္ လုပ္ပါတယ္။ Pytheon မွာ white
space (indentation) သည္ အရမ္း အေရးပါ ပါတယ္။ Python indentation ကို နားလည္ ေအာင္ ေအာက္
ကုတ္ေလးကို တစ္ခ်က္ ျကည့္က် စို ။့

ခု အေပၚက ကုတ္မွာဆုိ Line 1 ⇒ သည္ input ေတာင္လ့ ို ရလာတဲ့ data ကို variable ထဲ ကို ထည့္တာပါ။

67
http://crossnetmm.com/

Line 2 ⇒ မွာ if (x > 5 ) : ဆုိျပီး condition ကို စစ္ပါတယ္။ ရလာတဲ့ x ထဲက ေကာင္သည္ 5 ထက္ျကီးရင္
သူ ့ ေအာက္ သံုးေျကာင္း အလုပ္ လုပ္မွာပါ။ ဘာလို လ
့ ဲဆုိေတာ
့ သူတုိ ့ သည္ indentation Level တူေနတာ
မုိ ပ
့ ါ။ : ေနာက္ကေန လုပ္ခ်င္တ့ ဲ code ေတြကို indentation level (number of space) တူေအာင္ ထားေပးျ
ခင္းျဖင့္ same block of code ဆုိတာကို Python က နားလည္းပါတယ္။ { } ေတြ မလို ပါဘူး။ အကယ္လိ့ ု if
( ) ေနာက္က condition မွာခဲရ
့ င္ သူ ေ
့ နာက္က သူနဲ ့ သက္ဆုိင္ရာ ကုတ္ေတြကို မလုပ္ေတာ
့ ပဲ .. ေအာက္
ဆက္ ဆင္းသြားပါလိမ့္မယ္။ Line 7 ⇒ if (x <= 5): မွာ condition မွန္ရင္ indentation level တူတ့ ဲ ေအာ
က္ကသံုးေျကာင္းကို လုပ္ျပီး .. ေအာက္ဆက္ဆင္းသြားပါလိမ့္မယ္။ condition false ခဲရ
့ င္ေတာ
့ အဲ့ သူန့ဲ သ
က္ဆုိင္ရာ သံုးေျကာင္းကို မလုပ္ေတာ
့ ပဲ ေက် ္ ာသြားျပီးေတာ
့ ေအာက္က် န္ ေနတဲ့ အေျကာင္းေတြကို ဆက္ျပီး
အလုပ္ပ္ လုပ္ပါလိမ့္မယ္။

ဒီမွာဆုိရင္ေတာ
့ Line 12 ⇒ “** Program is finished **” ေပါ့။ ဒီေနာက္ဆံုးလိုငး္ သည္ if နဲ ့ condition
စစ္တ့ ဲ အထဲ မပါတာမုိ့ သူသည္ ဘယ္ေကာင္ လုပ္လုပ္ မလုပ္လုပ္ သူကေတာ
့ print ထုတ္မွာပါပဲ။

ခုေလာက္ဆုိ python ရဲ i့ ndentation ကို မ်က္စိလဲ သေဘာေလာက္ေတာ


့ ျမင္ျပီလို ့ ယံုပါတယ္။ ေနာင္
class ေတြ function ေတြက် indentation(white space) အေျကာင္းကို ပိုသိလာပါလိမ့္မယ္ဗ်ာ။။။

68
http://crossnetmm.com/

4.2 Python if else statement

Python ရဲ ့ if .. else statement မွာ if statement နဲ အ


့ ဓိက ကြာျခားတဲ့ အခ်က္ကေတာ
့ if သည္
condition မွန္ရင္ လုပ္မယ္ မမွန္ရင္ မလုပ္ဘူး ေက် ္ ာသြားတယ္။ if .. else က် ေတာ
့ စစ္တ့ ဲ condition မွာ မွန္
တယ္(True)ဆုိရင္ ဘာလုပ္မယ္ (if statement) မွားတယ္(False)ဆုိရင္ ဘာလုပ္မယ္ (else statement)
ဆုိတ့ ဲ ပံုစံပါ။

69
http://crossnetmm.com/

ခု ဘီယာ၀ယ္ဖုိ့ အသက္စစ္တ့ ဲ program ေလးတစ္ခု ေရးျကည့္က် ရေအာင္ ဗ်ာ။


User ဆီကေန အသက္ေမးမယ္။ အသက္ေပၚမူတည္ျပီး 18 နွစ္နဲ အ
့ ထက္ဆုိ beer ၀ယ္လိ့ ရမယ
ု ္ ။ 18 နွစ္ ေ
အာက္ဆုိရင္ေတာ
့ ဘီယာမေရာင္းဘူး အိမ္ျပန္ပါဆုိျပီး print ထုတ္မယ္ေပါ့ဗ်ာ ။့ ။ ေအာက္ကကုတ္ေလးကို စ
မ္းျကည့္က် ရေအာင္။

ေရးျပီး run လိုက္လိ့ ု အသက္ေမးရင္ ၁၈ လိ့ ု ထည့္လိုက္ရင္ if(Age >= 18) condition က true ျဖစ္တာမုိ့ သူ့
ေအာက္က code နွစ္ေျကာင္းအလုပ္လုပ္ပါတယ္။

အကယ္လိ့ ု 10 လို ့ ရုိက္လိုက္ရင္ ?

70
http://crossnetmm.com/

Age က 10 ျဖစ္တာမုိ ့ if(Age >= 18) ဆုိတ့ ဲ condition သည္ False ျဖစ္သြားပါတယ္။ အဲ့တာေျကာင့္ else
statement ေတြက လုပ္ လုပ္ပါတယ္။

** access control for User - Exercises**

4.3 Python if .. elif .. else statement

71
http://crossnetmm.com/

ခု if elif else အလုပ္လုပ္ပံုသည္ စစခ်င္း if ေနာက္က condition ကို စစ္ပါတယ္။ မွန္ရင္ if-
statement ကို run ျပီး if code block ကေနထြက္သြားပါတယ္။ false ျဖစ္ခရ
ဲ့ င္ အဲ့ေနာက္ ပထမ elif စစ္ပါ
တယ္။ မွန္ရင္ ပထမ elif- statement ကို run ျပီး if code block ကေနထြက္သြားပါတယ္။ false ျဖစ္ခရ
ဲ့ င္
အဲ့ေနာက္ ဒုတိယ elif စစ္ပါတယ္။ မွန္ရင္ ဒုတိယ elif- statement ကို run ျပီး if code block ကေနထြက္
သြားပါတယ္။ အဲ့လိုန့ဲ ေနာက္ဆံုးမွာေတာ
့ condition မစစ္ေတာ
့ ပဲ else ရဲ s့ tatement ကိုထုတ္ေပးပါတယ္။
စာဖတ္ရတာမွ နဲနဲ ရွဳတ္ေသးတယ္ ေအာက္က ကုတ္ေလးကို ဖတ္ျပီး ေရးျကည့္ run ျကည့္လိုက္ပါ။

72
http://crossnetmm.com/

ကုိယ္စစ္မယ္ c
့ ondition စစ္မယ့္ procedure ကို အစဥ္လိုက္ေရးသင့္တယ္။ ေျပာခ်င္တာက logic
ကို စနစ္က် ေစခ်င္တာပါ။ ခု ဒီ example မွာဆုိ ပထမဆံုး 10 နဲ ့ စစ္တယ္ ျပီးမွ 12 နဲ စ
့ စ္တယ္… အဲ့ေနာက္ 18,
22 အကုန္ စဥ္လိုက္စစ္သြားတာပါ။

ခုဆိုရင္ ေတာ
့ အဆင္ေျပေနိလမ့္မယ္။ အကယ္လိ့ ု x < 22 သည္ အစီအစဥ္ တက် (logic က် ) မဟုတ္ပဲ အေပၚ
ဆံုးေရာက္ေနမယ္ ဆုိရင္ ?

ပံုမွာ ျမင္တ့ အတု


ဲ ိင္းပဲ.. x <= 22 ဆိုတ့ ဲ condition နဲ့ ကိုက္ေနသမ်ွ သူ့ေအာက္ statement ကုိပဲ လုပ္ျပီး if ရဲ ့
block of code ကေနထြက္သြားပါတယ္။ ;-)

73
http://crossnetmm.com/

4.4 Nested if statement

Nested if ဆုိတာက ifေအာက္မွာမွ if condition ထပ္စစ္ထားတာပါ။ if code block (Green


Block) ေအာက္မွာ ေနာက္ထပ္ if code block (Red Block) ထပ္ရွိေနတာပါ။

ေယာကၤ
် ားေလးဆုိရင္ အသက္၁၈ ႏွစ္နဲ အ
့ ထက္ ျဖစ္ရင္ beer ၀ယ္လိ့ ရမယ
ု ္ ။ မိနး္ ကေလးဆုိရင္ေတာ
့ အသက္
၂၀ ေက် ္ ာမွ ၀ယ္လိ့ ရမယ
ု ္ ။ အဲ့အတြက္ေျကာင့္ user ဆီကေန Age နဲ G
့ ender ကို Input အေနနဲ ေ
့ တာင္းလို
က္ပါတယ္။ အဲ့တြက္ ပထမ if block သည္ အသက္ကို စစ္ျပီးမွ ေနာက္ if block သည္ Gender ကို စစ္ျပီး
အေျဖ result ျပန္ေပးပါတယ္။

Condition True ျဖစ္ရင္သာ output ျမင္ရတာပါ။ condition False ျဖစ္ရင္ေတာ


့ ဘာမွ ထြက္မလာပါဘူး..
အဲ့ေတာ
့ နဲနဲ ေလး ထပ္ျပင္ေရးျကည့္က် ရေအာင္။

74
http://crossnetmm.com/

အေပၚက execise ကုတ္မွာဆို if statement ေပၚမွာ if statement ေတြ ျကိမ္ျကိမ္ ထပ္ျပီး စစ္ထားတာပါ။
ဘာနဲ့တူလဲဆုိေတာ
့ filter ေတြ တစ္ခုျပီး တစ္ခု ခံေပးထားသလိုေပါ့။ ဥပမာ hall ခန္းထဲက လူတစ္ေယာက္
ကိုရွာမယ္ဆုိရင္ အရင္ဆံုး အသက္ ၂၀ ကေန ၄၀ ျကား လူေတြ ကို ျကည့္မယ္ေပါ့။ အဲ့ အသက္ ၂၀ - ၄၀ လူ
ထဲကမွ ၀တဲ့လူေတြကို ထပ္ျကည့္မယ္ေပါ့။.. အဲ့ လူစုထဲက က အက် ီအနီ ၀တ္ထားတဲ့ သူေတြကို ေရြးထုတ္မ
ယ္ေပါ့။ အဲ့ဆုိ ဒို ေ
့ တြရွာေနတဲ့ သူသည္ အသက္ ၂၀ နဲ ၄
့ ၀ ျကားက ခပ္၀၀ အက် ္ ီအနီး ၀တ္ထားတဲ့ သူေပါ့ .. အဲ့
လိုမ်ိဳးပဲ.. ခုလဲ အထပ္ထပ္ စစ္သြားတဲ့ သေဘာပါပဲ။။

ခု စစ္တ့ ပံ
ဲ ုစံက boy or girl >= 18 ေက် ္ ာမေက် ္ ာ အရင္စစ္.. ေက် ္ ာရင္ first priority သည္ male လား စစ္
male ဟုတ္တယ္ မွန္တယ္ဆိုရင္ print ထုတ္ .. မဟုတ္ရင္ အသက္ကို ထပ္စစ္ ၂၀ ေက် ္ ာလား ဆုိျပီးေတာ
့ .. ေ
က် ္ ာတယ္ ဆုိမွ female ျဖစ္မွ print ထုတ္ .. အဲ့ခ်က္ေတြန့ဲ မကိုက္ခဲရ
့ င္ beer ၀ယ္မရေျကာင္း ျပန္ေျပာ..

5. Python Loops

Python မွာ loop ပါတ္လို ရ


့ တဲ t့ ype ေတြကေတာ
့ ေအာက္ပါအတုိင္းပဲ ျဖစ္ပါတယ္။

● For Loop
● While Loop
● Nested loop

5.1 Python for loops

75
http://crossnetmm.com/

Python မွာ for loop သည္ sequence နဲ အ


့ လုပ္လုပ္ ပါတယ္။ ခုေအာက္မွာ နမူနာ code ရွိပါတယ္
ရိုက္ျပီး run ျကည့္ပါ။ Python သည္ simple English ေရးေနရသလိုပါပဲ.. ျပီးေတာ
့ သူ့ရဲ ့ indentation ေတြ
ကလဲ.. Paragraph ေတြလိုပါပဲ။။ ေရးရင္ သူ သ
့ ေဘာ သဘာ၀ ကို နားလည္လာပါလိမ့္မယ္။

Python မွာက string ထဲမွာ ရွိတ့ ဲ character ေတြကို sequence အေနနဲ သ


့ ိမ္းဆည္းပါတယ္။ for
character in ‘hello’: မွာ For loop အတြက္ variable သည္ character ဆုိတ့ ဲ ေကာင္။ အဲ့ေကာင္ထဲကို in
ဆုိတ့ ဲ keyword ေနာက္က ေကာင္ကို sequence အလုိက္ထည့္ေပးျပီး Loop ပါတ္သြားတာ.. Sequence ဆံုး
ရင္ for loop သည္ stop သြားပါလိမ့္မယ္။

ခု run လိုက္တဲ့ အခ်ိန္မာွ first word ျဖစ္တ့ ဲ h ကို character ဆုိတ့ ဲ variable ထဲ ထည့္ပါတယ္။ ျ
ပီးေတာ
့ print(character) ဆုိျပီး variable ထဲမွာရွိတဲ d
့ ata ကို print ထုတ္ပါတယ္။ ျပီးးေတာ
့ second
word ျဖစ္တ့ ဲ e ကို character ထဲ ထည့္ပါတယ္ အဲ့ေနာက္ print ထုတ္ပါတယ္။ အဲ့လိုနဲ l့ ast word ျဖစ္တ့ ဲ o
ကိုထုတ္ျပီးခ်ိန္မွာေတာ
့ ကုန္သြားျပီ ျဖစ္လ့ ို.. For loop သည္ stop သြားပါလိမ့္မယ္။ ေအာက္က flow chart
ေလးကိုျကည့္လိုက္ရင္ ရွင္းသြားပါလိမ့္မယ္။

76
http://crossnetmm.com/

ေနာက္ထပ္ Example တစ္ခု ကို ထပ္ စမ္းျကည့္ က် ရေအာင္။ ဒီတစ္ခါေတာ


့ list/array ေတြဘက္
ကို လွည့္ျပီး စမ္းျကည့္က် ရေအာင္။

ပထမဆံုး list တစ္ခု create လုပ္လိုက္ပါတယ္။ ျပီးေတာ


့ list ထဲ က ေကာင္ေတြကို for loop ပါတ္ျ
ပီး ထုတ္ခ်င္တာျဖစ္လ့ ို.. for x in mylist: လို ့ ေရးလိုက္ပါတယ္။ ဒီေနရာမွာ တစ္ခုမွတ္ထားရမွာက enter ေ
ခါက္လိုက္ရင္ . . . (အစက္သံုးစက္) ေပၚလာပါလိမ့္မယ္။ space တစ္ခ်က္ျဖစ္ျဖစ္ tab တစ္ခါ ျဖစ္ျဖစ္ ခုန္ေပး
ပါ။ python သည္ { } ထက္ white space (indentation) နဲ့ လုပ္တာမို့ပါ။ အဲ့လို ့ tab တစ္ခါ ခုန္လိုက္ခ်င္းျဖ
င္.့. For loop ရဲ b
့ lock of code နယ္ေျမကို သတ္မွတ္လိုက္တာပါ။ ခုေတာ
့ print ထုတ္မယ့္ code တစ္ေျ
ကာင္းပဲ ရွိတာမုိ ေ
့ ရးျပီး enter ေခါက္လိုက္ပါ။ အကယ္လိ့ ု တစ္ေျကာင္းမက တဲ့ code ေတြ for loop ထဲမွာ ေ
ရးရမယ္ ဆုိရင္ line of code တုိင္းကို same indentation level တူေအာင္ ထားေပးရပါမယ္။ same
indentation level ဆုိတာက space တစ္ခါ ဆုိ အကုန္ တစ္ခါပဲ ျခားတာ.. [tab] ခုန္ရင္လဲ အကုန္ အတူတူ

77
http://crossnetmm.com/

ခုန္တ့ ဲ range အတူတူ ထားတာကို ေခၚတာပါ။ တစ္ျခား programming Language (Like c++,java,etc) ေ
တြတုန္းက if တုိ ့ for loop တု့ ိ code block ကို ဘယ္က စလဲဆုိတာကို { နဲ့ သက္မွတ္ျပီး အပိတ္ကိုက် ေတာ

} နဲ့ သက္မွတ္ပါတယ္။ Python က် :(Full-column) ေနာက္က same white space ရွိေနတဲ့ range တူေနတဲ့
code ေတြသည္ code block ျဖစ္တယ္ လိ့ ု သတ္မွတ္ပါတယ္။.. ကဲ ေလရွည္ေနတာ နဲနဲ မ်ားသြားျပီ ျပန္ဆက္ျ
ကည့္ရေအာင္။ အဲ့လို Print ထုတ္လိုက္တာနဲ .့ . List ထဲက ေကာင္ေတြသည္ sequence အလုိက္ တစ္ခု ျပီး
တစ္ခု ထြက္လာပါလိမ့္မယ္။ ;-)

For loop အေျကာင္း ေျပာမယ္ဆုိတ့ ဲ .. သူနဲ e


့ xample အေနနဲ တ
့ ြဲ သံုးမယ့္ range() အေျကာင္းေလး အရင္
ေျပာပါရေစ။ range() function မွာ arguement သံုးခုပါ၀င္ပါတယ္။ သူ ရ
့ ဲ့ arguement သံုးခုကေတာ

range(start, stop[, step]) တု့ ပဲ
ိ ျဖစ္ပါတယ္။ start နဲ s့ tep သည္ optional အေနနဲ တ
့ ည္ရွိပါတယ္။ ထ
ည့္မေရးရင္ default အတုိင္း အလုပ္ လုပ္ပါတယ္။ default အေနနဲ က
့ start =0, step =1 တု့ ပဲ
ိ ျဖစ္ပါတ
ယ္။ stop ကေတာ
့ ထည့္ကို ေရးေပးရမွာပါ။ ေအာက္က ဥပမာ ေလးကို ျကည့္ပါ။

Range(5) လု့ ေရးလိ


ိ ုက္တာနဲ d
့ efault အတုိင္း start=0 ဇီးရိုးကေနစမယ္ .. ျပီးေတာ
့ sequent သည္
step=1 မုိ့ ၁ တုိးတိးု သြားပါမယ္။ အကယ္လိ့ ု start, stop, step ေတြ အျပည့္အစံု ရိုက္ရင္လဲ result က
အတူတူပါပဲ။

ဟုတ္ျပီး အဲ့ေတာ
့ execise အေနနဲ f့ or loop ပါတ္ျပီး print ထုတ္ျကည့္က် ရေအာင္။

78
http://crossnetmm.com/

range(5) ဆုိတ့ ဲ အတြက္ 0 to n-1 အထိ print ထုတ္သြားပါတယ္.. ပထမ 0 သည္ variable i ထဲ ကို ေရာ
က္တယ္။ print(i) ဆုိျပီၚ ထုတ္တယ္ အဲ့ေနာက္ ေနာက္တစ္ေျကာင္းဆင္းတယ္။ ဒုတိယ 1 သည္ i ထဲကိုေရာ
က္တယ္။ print ထုတ္တယ္။ ၄ ေရာက္ေတာ
့ sequence ကုန္သြားျပီမုိ ့ အဲ့ for loop ကေန ထြက္သြားပါတ
ယ္။ ပိုျပီး ျမင္သာေအာင္ C++ က for loop နဲ ့ နွိဳင္းယွဥ္ျကည့္ က် ရေအာင္။ C++ တု့ိက် ေတာ
့ ေက် ာင္းေတြမွာ
သင္ရတဲ့ အထဲ ပါေတာ
့ ပိုျမင္သာေအာင္ နွိဳင္းယွဥ္ျပတာေနာ္.. Exactly the same မဟုတ္ဘူးေနာ္..

C++ မွာက် ေတာ


့ i=0 ဆုိျပီးေတာ
့ i ကို zero က စမယ္ေျပာတယ္။ ဘယ္ခ်ိန္မွာ for loop ျပီးမလဲဆုိေ
တ ာ့ i<5 ဆုိေတာ
့ i=4 ထိအလုပ္ လုပ္ျပီး i=5 ျဖစ္တ့ ဲ အခ်ိန္မွာ stop မယ္။ loop ပါတ္ေနတာျဖစ္တ့ ဲ အတြက္
တစ္ျကိမ္ ပါတ္ျပီးတုိင္း i++ ဆုိတ့ ဲ အတြက္ i ကို 1 ပေါင္းေပါင္းျပီး တုိးသြားမယ္။

အဲ့လိုပဲ Python မွာက် ေတာ


့ i ဆုိတ့ ဲ variable ရွိတယ္။ variable ျဖစ္တ့ ဲ အတြက္ သူ ထ
့ ဲ ထည့္ရမယ့္
data ကို ဘယ္က ယူရမလဲ ဆုိတာကို in ဆုိတ့ ဲ keywork ေလးနဲ ့ range(5) ကို ညြန္ေပးထားတယ္။ range
(5) သည္ default value ေတြပါ ျမင္သာေအာင္ ထည့္ေရးရင္ range(0, 5, 1) ျဖစ္ပါတယ္။ 0 ကစမယ္ 1 ပေါ
င္းသြားမယ္.. 5 မေရာက္ခင္ထိ အလုပ္လုပ္မယ္။ 5 ေရာက္ရင္ (range က 0 to 4 ဆုိေတာ
့ ) for loop သည္
end သြားမယ္ေပါ့

ေနာက္ထပ္ execise ေလး တစ္ခု လုပ္ျကည့္ရေအာင္။ 0 to 9 ကိန္းဂဏန္းေလး ေတြထုတ္ေပးပါ။ အဲ့


အတြက္ code ေတြကေတာ
့ ..

79
http://crossnetmm.com/

အဲ့လို ထုတ္လိုက္ရင္ ထြက္ေတာ


့ ထြက္တယ္ ဒါေပမယ့္ ျကည့္ရတာ မလွဘူးဗ်ာ။။ ဘာလို လ
့ ဲ ဆုိေ
တ ာ့ python မွာက default သည္ print တစ္ခါထုတ္ျပီးတုိင္း တစ္ေျကာင္း ဆင္းသြားတာမို လ
့ ို ပ
့ ါ။ အဲ့ေတာ

print ထုတ္တဲ့ ေနရာ ကုတ္ေလး ထပ္ထည့္ေပးရလိမ့္မယ္။ print တစ္ခါထုတ္တုိင္း တစ္ေျကာင္းမဆင္းေအာ
င္။

*** Print without newline in Python 2.x ***

print(i) ေနာက္မွာ , ေကာ


္ မာေလး ခံ ေပးယံုပါပဲ။

80
http://crossnetmm.com/

*** Print without newline in Python 3.x ***

Python 3 မွာက် ေတာ


့ end = “ “ ဆုိျပီးေတာ
့ new line မဆင္းဘူး.. Space ျခားမွာ ျဖစ္တယ္လိ့ ု ေျပာ
လိုက္တာပါ။ အကယ္လို ,့ နဲ ျ့ ခားခ်င္ရင္ေတာ
့ end = ‘,’ ေပ့ါ။

ထပ္ျပီး ေတာ
့ ဘာစမ္းျကည့္ဦးမလဲဆုိေတာ
့ စံုကိန္းေတြ သတ္သတ္ထုတ္မယ္ မကိန္းေတြ သတ္သတ္ ထုတ္ျ
ကည့္မယ္။ ေအာက္ကုတ္ကို မျကည့္ပဲ စမ္းေရးျကည့္ပါ။

5.2 Python While loop

While loop မွာက် ေတာ


့ .. သူ ရ
့ ဲေ
့ နာက္မွာရွိတ့ ဲ test_expression ရဲ c့ ondition ကို အျကိမ္ တု္ င္
ိ း
ပါတယ္။ condition True ျဖစ္ေနသမွ်ကာလပါတ္လံုး While loop က Looping ပါတ္ေနမွာပါ။ condition
သည္ false ျဖစ္သြားျပီဆုိမွ loop ကေန ထြက္သြားမွာပါ။

English စာမွာ ရွိတ့ ဲ while ကို သံုးသလိုပါပဲ။ ေအာက္က sentence ေလးကို တစ္ခ်က္ ျကည့္ ျကည့္ပါ။
He read the book while waiting for the bus

81
http://crossnetmm.com/

ခုဒီမွာ ေရးထားတာဆုိရင္.. သူသည္ bus ကား ေစာင့္ဆုိင္းစဥ္တြင္ စာအုပ္ကိုဖတ္သည္။ ေျပာခ်င္တာက စာဖ


တ္ တ ယ္ ဘယ္ခ်ိန္ထိ ဖတ္လဲဆုိေတာ
့ while ေနာက္က bus ကား ကို ေစာင့္ ေနခ်ိန္ (waiting the bus)
အထိ။ while ေနာက္က conditon က False ျဖစ္သြားရင္.. တစ္နည္း bus ကားလာရင္ .. စာမဖတ္ေတာ
့ ဘူး..
(ကားေပၚေရာက္ရင္ သီခ်င္းနားေထာင္တာ.. ရွဳခင္းျကည့္တာတု့ ပဲ
ိ လုပ္မယ္ေပါ့။)

Simple while loop ေလး တစ္ခု ေရးျကည့္က် ရေအာင္။

Line1 => variable count ထဲကို 0 ထည့္လုိက္ပါတယ္။


Line2 => While loop စပါတ္ပါတယ္။ ေနာက္က condition အရ loop သည္ count 9 နဲ 9
့ ေအာက္ ငယ္ေ
နရင္ looping ပါတ္ေနဦးမွာပါ။ 9 ေက် ္ ာသြားတာနဲ ့ condition သည္ false ျဖစ္သြားတာမို ့while loop က ေ န
ထြက္သြားပါမယ္။

82
http://crossnetmm.com/

Line3 => Line 3 နဲ L


့ ine4 သည္ while loop ရဲ c့ ode block ထဲမွာရွိပါတယ္။ သူတ့ ုိ နွစ္ေျကာင္းသည္
same indentation level မွာရွိေနတာမို ပ
့ ါ။ print function နဲ t့ he count is ဆုိျပီး လက္ရွိ count တန္ဖိုး
ကို ထုတ္ေပးပါတယ္။ ခုလက္ရွိ count ထဲ က တန္ဖုိးသည္ 0 ပါ။
Line4 => count += 1 ဆုိတာ ေရွတ
့ ုန္းကလဲ ေျပာခဲတ
့ ယ္ မွတ္မိဦးမယ္လိ့ ု ထင္ပါတယ္။ count = count + 1
နဲ့ အတူတူပါပဲ။ အဲ့တာေျကာင့္ count(0) နဲ 1့ နဲ ေ
့ ပါင္းျပီး count ထဲ ကို ျပန္ထည့္လိုက္တာပါ။ ခု လက္ရွိ
count ထဲက data value သည္ 1 ပါ။
Line5 => count တန္ဖိုးသည္ 1 ပဲ ရွိမုိ ့ whie(count <= 9) ဆုိတ့ ဲ condition မွန္ေနေသးတာမုိ w
့ hile loop
ကေန မထြက္ေသးပါဘူး.. အဲ့ေျကာင့္ line3 ကို ျပန္သြားပါတယ္။
Line3 => လက္ရွိ count တန္ဖုိး ကို ထုတ္ပါတယ္။
Line4 => count += 1 ျဖစ္တ့ ဲ အတြက္ လက္ရွိcount(1) နဲ ့ 1 ကို ေပါင္းျပီး count ထဲကိုျပန္ထည့္လိုက္ပါတ
ယ္ ခုလက္ရွိ count တန္ဖုိးသည္ 2 ျဖစ္ပါတယ္။
While(count <= 9) ဆုိတ့ ဲ condition သည္ True ျဖစ္ေနသမ်ွ looping ပါတ္ေနတာကေန မထြက္ပါတယ္။
while code block ကိုပဲ condition စစ္ရင္း အျကိမ္ျကိမ္ ပါတ္ေနမွာပါ။
Line3 => လက္ရွိ count တန္ဖိုး(2) ကို print ထုတ္ပါတယ္။
Line4 => count ကို 1 တုိးပါတယ္။
အဲ့လိုနဲ c့ ount တန္ဖုိး သည္ 9 ကို ေရာက္သြားေတာ
့ print() နဲ ့ The count is 9 ကို ထုတ္ျပီးသြားခ်ိန္မွာ
count ကို ၁ ေပါင္းလိုက္ပါတယ္။ count တန္ဖုိး 10 ကို ေရာက္တဲ့ အခ်ိန္မာွ ေတ့ာ while ရဲ c့ onditon သည္ မ
ကုိက္ေတာ
့ တာေျကာင့္ Loop ကေန ထြက္သြားပါတယ္။
Line6 => While loop ကေနထြက္ေတာ
့ မွ line 6 ကိုေရာက္ျပီးေတာ
့ Bye!! ကို print ထုတ္ေပးပါတယ္။

5.2.1 Infinite loop

ခု num = 1 ဆုိျပီးေတာ
့ num ထဲ ကို 1 ထည့္လိုက္ပါတယ္။ while( num == 1) ဆုိျပီး ေတာ
့ loop စပါ
တ္ပါတယ္။ ျပီးေတာ
့ Enter your name ဆုိျပီးေတာ
့ user ဆီကေန input နာမည္တစ္ခုေတာင္းတယ္။ အဲ့ေ
နာ က္ hello ဆုိျပီး နာမည္ ကို ျပန္ထုတ္တယ္။ while loop ရဲ ့ num==1 ဆိုတ့ ဲ condition မွန္ေနသမွ် name ေ
တာင္းမယ္ ျပီးေတာ
့ Hello ဆုိျပီး ျပန္ထုတ္မယ္။ num ထဲက data ကို ေျပာင္းလဲေစမယ့္ code ထည့္မေရး
ထားတဲ့ အတြက္ while ေနာက္က condition သည္ True ပဲ ျဖစ္ေနမွာပါ။ အဲ့လိုနဲ ့ မျပီးဆံုးနုိင္တ့ ဲ Loop ျဖ
စ္ေနတာကို infinite loop လိ့ ု ေခၚပါတယ္။ loop ကို break ခ်င္တယ္ ရပ္ခ်င္တယ္ ဆုိရင္ေတာ
့ keyboard
က ေ န ctrl+C ကို နွိပ္ပါ။

83
http://crossnetmm.com/

5.2.2 Else statement with while loop

Python မွာ else ကုိ while တုို f့ or တုိ န


့ ဲတ
့ ြဲျပီး သံုးလို ရ
့ ပါတယ္။ for loop အတြက္ဆုိရင္ else က
ဘယ္ခ်ိန္မွာ အလုပ္ လုပ္လဲဆုိေတာ
့ for ရဲ့ sequcence ထဲက item ေတြကုန္သြားရင္ (တစ္နည္း for loop
ကေနထြက္သြားရင္) else ဆီကို ေရာက္ျပီး အလုပ္ လုပ္ါတယ္။

While အတြက္ဆုိရင္လဲ သူ ေ
့ နာက္က condition.. False ျဖစ္လို ့ Loop ကေနထြက္သြားခ်ိန္မွာ
else သည္ စျပီး အလုပ္ လုပ္ပါတယ္။ if else တုန္းကလိုပါပဲ။။ if က false ျဖစ္လ့ ို ထြက္ရင္ else ကို ေရာက္
မယ္ေလ။

Count ထဲကို 0 ထည့္တယ္။ whiel loop စပါတ္တယ္။ count < 5 ျဖစ္ေနသမွ် print (str(count) +
" is less than 5") ဆုိျပီး print ထုတ္တယ္။ count ကို while loop တစ္ခါပါတ္ျပီးတုိင္း တစ္ ေပါင္းေပါင္း
သြား တယ္။ count တန္ဖုိး 5 ျဖစ္သြားတဲ့ အခ်ိန္မွာ while ေနာက္က condition ျဖစ္တဲ c့ ount < 5 နဲ မ
့ ကို
က္ေတာ
့ တာမုိ ့ else ကို ေရာက္သြားျပီး 5 is not less than 5 ကို print ထုတ္ေပးလိုက္တယ္။

While ေနာက္က code block သည္ while ရဲ c့ ondition မွန္ေနသမွ် အျကိမ္ျကိမ္ အလုပ္ လုပ္ေနျ
ပီးေတာ
့ else ရဲ c့ ode block သည္ while ရဲ c့ ondition မွားသြားမွ တစ္ျကိမ္သာ အလုပ္ လုပ္ပါတယ္။ ေအာ
က္ က bye ဆုိျပီး print ထုတ္တဲ့ code ကေတာ
့ အကုန္ လံုးျပီး သြားမွ သူ့ဆီေရာက္လာမွ အလုပ္ လုပ္တာပါ။

5.3 Nested Loop

Nested loop ဆုိကေတာ


့ loop ေတြ ဆင့္ဆင့္ လုပ္ထားတာကို ေျပာတာပါ။

84
http://crossnetmm.com/

Nested Loop ပါတ္ျပီးေတာ


့ Multiplication Table ေလးတစ္ခု လုပ္ျကည့္က် ရေအာင္။

Line1 => For x in range(1,11): ဆိုတ့ ဲ အတြက္ x ထဲ ကို ၁ ထည့္ျပီး loop ကို စျပီး ပါတ္ပါတယ္။
Line2 => x ထဲ မွာ 1 ရွိေနတဲ့အတြက္ Multiplication of 1 ကို print ထုတ္ပါတယ္။
Line3 => for y in range(1,11): ျပီး loop ထပ္ပါတပါတယ္။ y ထဲကို 1 ထည့္ပါတယ္။
Line4 => z = x * y ျဖစ္တ့ ဲ x(1) နဲ y
့ (1) နဲ့ ကို ေျမွာက္ျပီး z(1) ထဲ ကို ထည့္ပါတယ္။
Line5 => print (str(x) + "*" +str(y) + "= " +str(z), end = " ") ဆိုတ့ အတြ
ဲ က္ 1*1= 1 ဆုိျပီး ေတာ

result ရပါတယ္။ Next sequent Item ျဖစ္တ့ ဲ 2 ကို y ထဲ ထည့္လုိက္ပါတယ္။ for loop အတြက္ item က်
န္ေနသးတာမို l့ oop ဆက္ပါတ္ပါတယ္။
Line4 => z = x * y ျဖစ္တ့ ဲ x(1) နဲ y
့ (2) နဲ့ ကို ေျမွာက္ျပီး z(2) ထဲ ကို ထည့္ပါတယ္။
Line5 => print (str(x) + "*" +str(y) + "= " +str(z), end = " ") ဆိုတ့ အတြ
ဲ က္ 1*2= 2 ဆုိျပီး ေတာ

result ရပါတယ္။ Next sequent Item ျဖစ္တ့ ဲ 3 ကို y ထဲ ထည့္လုိက္ပါတယ္။ for loop အတြက္ item က်
န္ေနသးတာမို l့ oop ဆက္ပါတ္ပါတယ္။
Line4 => z = x * y ျဖစ္တ့ ဲ x(1) နဲ y
့ (3) နဲ့ ကို ေျမွာက္ျပီး z(3) ထဲ ကို ထည့္ပါတယ္။
Line5 => print (str(x) + "*" +str(y) + "= " +str(z), end = " ") ဆိုတ့ အတြ
ဲ က္ 1*3= 3 ဆုိျပီး ေတာ

result ရပါတယ္။ Next sequent Item ျဖစ္တ့ ဲ 4 ကို y ထဲ ထည့္လုိက္ပါတယ္။ အဲ့လိုနဲ y
့ = 10 ထိ loop ပါ
တ္ျပီးေနာက္ item ကုန္သြားတာမုိ ဒ
့ ုတိယ for loop ကေန ထြက္ျပီးေတာ
့ အေပၚ for loop ကို ျပန္တက္ ပါ
တယ္။

Line1 => 1 ျပီးသြားေတာ


့ x ထဲ ကို 2 ထည့္ပါတယ္။
Line2 => x ထဲ မွာ 2 ရွိေနတဲ့အတြက္ Multiplication of 2 ကို print ထုတ္ပါတယ္။

85
http://crossnetmm.com/

Line3 => for y in range(1,11): ျပီး loop ထပ္ပါတပါတယ္။ y ထဲကို 1 ထည့္ပါတယ္။


Line4 => z = x * y ျဖစ္တ့ ဲ x(2) နဲ y
့ (1) နဲ့ ကို ေျမွာက္ျပီး z(2) ထဲ ကို ထည့္ပါတယ္။
Line5 => print (str(x) + "*" +str(y) + "= " +str(z), end = " ") ဆိုတ့ အတြ
ဲ က္ 2*1= 2 ဆုိျပီး ေတာ

result ရပါတယ္။ Next sequent Item ျဖစ္တ့ ဲ 2 ကို y ထဲ ထည့္လုိက္ပါတယ္။ for loop အတြက္ item က်
န္ေနသးတာမို l့ oop ဆက္ပါတ္ပါတယ္။
Line4 => z = x * y ျဖစ္တ့ ဲ x(2) နဲ y
့ (2) နဲ့ ကို ေျမွာက္ျပီး z(4) ထဲ ကို ထည့္ပါတယ္။
Line5 => print (str(x) + "*" +str(y) + "= " +str(z), end = " ") ဆိုတ့ အတြ
ဲ က္ 2*2= 4 ဆုိျပီး ေတာ

result ရပါတယ္။ Next sequent Item ျဖစ္တ့ ဲ 3 ကို y ထဲ ထည့္လုိက္ပါတယ္။ for loop အတြက္ item က်
န္ေနသးတာမို l့ oop ဆက္ပါတ္ပါတယ္။

အဲ့လိုနည္းနဲ့ .. range(1,11) ဆုိတ့ အတြ


ဲ ႕ ္ .. item သည္ 1 to 10 ရွိပါတယ္ for loop သည္ item မကုန္ မခ်င္း
ပါတ္ေနမွာပါ။ ပထမ for loop, x= 1 အတြက္ ဒုတိယ for loop သည္ y = 1 to 10 ထိ looping ကို item ကု
န္တ့ ဲ အထိ ပါတ္ပါတယ္။ ျပီးေတာ
့ ပထမ for loop မွာ ဒုတိယ item = 2 ကို x ထဲ ထည့္ျပီး ဒုတိယ for loop
ကိုပါတ္ပါတယ္။ အဲ့လို အဲ့လို နည္းနဲ ့ x =3 အတြက္ y = 1 to 10, x = 4 အတြက္ y = 1 to 10,...etc.. x=
10, y = 1 to 10 ထိ nested loop ပါတ္ျပီး အလီဇယားေလးကို ထုတ္ေပးပါတယ္။

ထြက္လာတဲ့ result သည္ သိပ္မလွတ့ အတြ


ဲ က္ code ကိုနဲနဲေလာက္ ျပင္ျကည့္က် ရေအာင္။

ျပန္ျပီးေတာ
့ run ျကည့္လိုက္ပါ။

86
http://crossnetmm.com/

5.4 Loop control statement

Loop ေတြ ပံုမွန္ အတုိင္း loop ေနတာ sequence အလိုက္သြားေနတာ ကို control လုပ္ဖုိ့ အတြက္နုိ
င္တဲ့statement 3 ခု ရွိပါတယ္။
● Break statement
● continue statement
● pass statement

5.4.1 Break Statement

Break သည္ loop တစ္ခုရဲ ပ


့ ံုမွန္ flow ကို terminate လုပ္ဖုိ့အတြက္ သံးု ပါတယ္။ ဥပမာ ေျပာရရင္
လူတစ္ေယက္ စာေရးေနတယ္.. အဲ့ခ်ိန္မွာ ဖုနး္ လာလိ့ ု (Break) ဖုနး္ ကိုင္လိုက္တယ္ဆုိရင္ စာေရးတယ္ဆိုတ့ ဲ
process flow သည္ ဖုန္းလာတာေျကာင့္ interup ၀င္ျပီး ရပ္သြားပါတယ္။ break သည္လဲ interup တစ္မ်ိဳး
ပါပဲ။ loop သည္ break statement ေျကာင့္ loop ကေနထြကသြားေပမယ့္ program ကေတာ
့ ဆက္ျပီး run
ပါတယ္။

For loop ပါတ္ထားပါတယ္။ current word is ဆုိျပီးေတာ


့ ‘python’ ကို တစ္လံုးခ်င္းျပ ေပးဖုိ့ပါ။

87
http://crossnetmm.com/

Break statement ကို If ကိုသံုးျပီးေတာ


့ h ကို ေရာက္ရင္ break လုပ္ ခုိငး္ ထားတာပါ။ေအာက္က
ကုတ္ နဲ c့ hart ကို ျကည့္ပါ။ p, y, t အထိပဲ ထြက္လာျပီးေတာ
့ h ကိုေရာက္တဲ့ အခ်ိန္က် break သြားတာကို
ေတြ့ရမွာပါ။

ေနာက္ထပ္ example တစ္ခုေလာက္ ထပ္ျကည့္က် ရေအာင္။ Quit လု့ ိ မရိုက္မခ်င္း inpute ၀င္လာ
တဲ့string ေတြရဲ l့ en ကို ေဖာ္ျပေပးမယ့္ .. program ေလး တစ္ခု ေရးျကည့္ပါ။

5.4.2 Continue Statement

88
http://crossnetmm.com/

Continue statement က က်ေ တ ာ့ Break လိုမ်ိဳး Loop ကေန ထြက္သြားမ်ိဳးမဟုတ္ပဲ.. Continue


ကိုေရာက္ရင္ skip လုပ္သြားတာမ်ိဳးပါ။ ဘယ္လိုမ်ိဳးလဲဆုိေတာ
့ အေပၚက example မွာ ျကည့္ရင္ ပံုမွန္ Loop ပါ
တ္ေနတဲ့ ထဲ ကို if (word == ‘h’): continue ဆိုတ့ ဲ code ေျကာင့္ word = h ကို ေရာက္တဲ့အခ်ိန္မွာ print
ထုတ္တဲ့ ဆီကိုမေရာက္ေတာ
့ ပဲ အေပၚက loop အစက ကို ျပန္ေရာက္သြားပါတယ္။ result ကို ျကည့္လိုက္ရင္
လဲ h အတြက္ မထုတ္ထားတာကို ေတြ့မွာပါ။

Break တုိ c့ ontinue တု့ သည


ိ ္ ပံုမွန္အတိုင္း ပါတ္ေနတဲ့ loop ကို ေသြဖယ္သြားေစခ်င္တာ interup
လုပ္ခ်င္တာမ်ိဳးမွာ သံးု တာပါ။ code ေရးရင္နဲ ့ အသံုးကို ပိုျပီး ျမင္လာပါလိမ့္မယ္

5.4.3 Python Pass Statement

pass statement က ေ တ ာ့ loop တု့ ိ break တိ့ နဲ


ု မ့ တူပါဘူး။ သူ က
့ ို Null Statement လိ့ လဲ
ု ေျပာ
က် ပါတယ္။ ဘာလု့ိလဲ ဆုိေတာ
့ pass သည္ သူ က
့ ို execute လုပ္တ့ ဲ အခ်ိန္မွာ ရမယ့္ result သည္ NOP (no
operation) ပါ။ ဆုိလိုတာက execute ေတာ
့ လုပ္လုိက္တယ္ ဘာမွ မျဖစ္သြားဘူးလိ့ ု ေျပာတာပါ။

89
http://crossnetmm.com/

ဘယ္လိုေနရာေတြမွာ သံုးလဲဆုိေတာ
့ ကိုယ္က Program တစ္ခုေရးေနတယ္ေပါ့။. အဲ့ခ်ိန္မွာ
တ functionာနစ္ခ်ိဳ ့ function ေတြ loop ေတြကို reserve လုပ္ထားခ်င္တယ္.. future purpose အတြက္
ထည့္ေရးမယ္ေပါ့ ဒီတုိင္း function/loop ပဲ ထားခဲရ
့ င္လဲ error တက္ပါတယ္။ အဲ့တြက္ေျကာင့္ ေအာက္က
လုပ္မယ့္ action ကို pass အေနနဲ ထ
့ ားခဲခ
့ ် င္းျဖင့္ program ကို error လဲ မတက္သလို ဘာ effect မွ မျဖ
စ္ေစေတာ
့ ပါဘူး။

6. Python - Date & Time

Network အတြက္ဆုိရင္ backup လုပ္တ့ ေနရာ..


ဲ Security protocol ေတြ enable တဲ့ေနရာ MS
လုပ္မယ့္ေနရာ ေတြမွာ ဆုိ ရင္ date&time သည္ အေရးျကီးပါတယ္။ အဲ့ေျကာင့္ ေလ့လာျကည့္ က် ရေအာင္
ဗ်ာ ။ Date and time အတြက္ ဆုိရင္ Python မွာ ရွိတ့ ဲ datetime ဆုိတ့ ဲ module ကို သံုးပါမယ္။ ပထမဆံုး
module ကို import လုပ္ပါ။ အဲ့လို import လုပ္တာက ဘာနဲ့ တူလဲဆိုေတာ
့ c++, c တု့ မွ
ိ ာ #include
<iostream> ဆုိျပီးေတာ
့ header ကို ေျကျငာ ေပးရသလိုမ်ိဳးပါပဲ။ အဲ့က် မွ သူန့ဲ သက္ဆုိင္တ့ ဲ cin/cout စတာေ
တြကို ေခၚသံုးလိ့ ု ရသြားတာပါ။

ပထမဆံုး datetime Module ကို import လုပ္ပါ။ import လုပ္တယ္ဆိုတာက အဲ့module ျကီး တစ္
ခုလံုးကို ခုကုိယ္ေရးေနတဲ့ ဒါမဟုတ္ run ေနတဲ့ program/script ထဲ ကို ထည့္လိုက္တာမဟုတ္ပါဘူး..
Pythone ေရ ငါအဲ့ဒီ moduel ေတြကိုေတာ
့ သံုးမယ္လိ့ ု ျကိဳေျပာထားတဲ့ ပံုစံပါ။ ေအာက္က screenshot ကို
တစ္ခ်က္ ျကည့္ ျကည့္လိုက္ပါ။

90
http://crossnetmm.com/

အဲ့လို import လုပ္ထားမွ module ထဲက ေကာင္ေတြကို သံုးလိ့ ု ရမွာပါ။ ခု က် ြန္ေတာ


္ တု့ ေတြ

လုပ္ခ်င္တာသည္ current date နဲ t့ ime ကို ထုတ္ခ်င္တာပါ။ print(datetime.datetime.today()) ဆုိတ့ ဲ


code သည္ datetime module ထဲက date time class ရဲ ့ today() ဆုိတဲ ့ Method ကိုေခၚသံုးျပီး print
ထုတ္လိုက္ပါတယ္။ ခုကလက္ရွိ date ( year, month, day) နဲ t့ ime (hr, min, sec) ကို ရရွိတ့ ဲ အခါ ျကည့္
လိုက္ရင္ time မွာ က micro sec အထိျပ ေနတာကို ေတြ့ရမွာပါ။ ေအာက္ဆံုးက ဒသမ ေတြနဲ ေ
့ ဖာ္ျပေပး
ထားပါတယ္။
print(datetime.datetime.today())ကို အျကိမ္ျကိမ္ ဆက္တုိက္ထုတ္ျကည့္ရင္ micro sec ေလးေတြ ေျပာ
င္းလဲ ေနတာကို ေတြ့ ရမွာပါ။

print(datetime.datetime.today()) ဆုိတ့ ဲ code အျပင္ print(datetime.datetime.now()) ကို


လဲ သံးု လို ရ
့ ပါတယ္။

6.1.1 Python Datetime, Date, Time

91
http://crossnetmm.com/

ရလာတဲ့ result မွာ date ေကာ time ေကာ အကုန္ ပါေနတာကို ေနတာကို ေတြ့ရပါတယ္။ date ကို
ပဲ ျကည့္ခ်င္တယ္ဆုိရင္ေတာ
့ ..

print(datetime.date.today()) ကို သံးု ျပီး ထုတ္လိ့ ရပါတယ


ု ္ ။ အဲ့လို print ထုတ္လိ့ လဲ
ု ရသလို
object တစ္ခု create လုပ္ျပီးေတာ
့ လဲ print ထုတ္လိ့ ရပါတယ
ု ္ ။ ခုခ်ိန္မွာေတာ
့ module ေတြ class ေတြ
function ေတြ object ဆိုတ့ ဲ စကားလံုးေတြကို စိမး္ ေနဦးမွာပါ.. Function ခန္း class ခန္း ေရာက္ရင္ေတာ

ရွင္းသြားပါလိမ့္မယ္။ စိတ္မပူပါနဲ ။့

current date ေတြ ထ


့ ည့္ထားမယ္ ့Mytime ဆုိတဲ ့ object ကို date class ထဲက today()
method ကို သံးု ျပီး ဖန္တီးလိုက္ပါတယ္။ print (“Current tiem is “ + str(Mytime)) ဆုိျပီးေတာ

mytime object ထဲမွာ ရွိတ့ တဲ
ဲ ့ date ကို ထုတ္ျပပါတယ္။

6.1.2 Date object to represent a date

အခုလို ့ လက္ရွိ ရွိေနတဲ့ date, time တင္မဟုတ္ပဲ ကိုယ့္စိတ္ျကိဳက္ data ထည့္ျပီးလဲ format က် ေ
အာင္ ျပန္ထုတ္လိ့ ရပါတယ
ု ္။

crossnet = datetime.date(2019, 4, 4) ဆုိျပီးေတာ


့ Argument သံုးခုေတာ
့ ထည့္ေပးရပါမယ္
year, month, day အတြက္ပါ။ ထည့္လိုက္တဲ့ date ကို ျပန္ထုတ္လိုက္တဲ့ အခါက် 2019-04-04 ဆုိျပီး
format တစ္က် ျပန္ရပါတယ္။ crossnet ဆိုတဲ v့ ariable သည္ date object ပဲ ျဖစ္ပါတယ္။ ခု က် ြန္ေတာ

တု့ ိ သံုးေနတဲ့ import အျပင္ ေနာက္ထပ္ သံုးလိ့ ရတဲ
ု ့ import ပံုစံေလးေတြ ရွိပါေသးတယ္။ တစ္ခ်က္ေလာက္
ေလ့လာျကည့္က် ရေေအာင္ဗ်ာ။

92
http://crossnetmm.com/

*********** import vs from …. import ***********

import [ module_name ] (example .. import sys ) ကိုေတာ


့ အေပၚက ကုတ္ေတြမွာ သံုးခဲပ
့ ါတ
ယ္။ ဒီ import လုပ္တ့ ဲ နည္းသည္ module ကို import လုပ္တာပါ (as per theory => sys module ရဲ ့
OBJECT ကို ခု လက္ရွိ program မွာ သံုးဖုိ s့ ys နာမည္ နဲ ့ bind (ေပါင္း) လိုက္တာပါ။) ဒီနည္းလမ္းသည္
sys ထဲမွာ ရွိတယ္ ဘယ္ေကာင္ကိုမွ direct access လုပ္ခြင့မ
္ ရွိပါဘူး။ အဲ့အတြက္ေျကာင့္ sys ထဲ မွာ ရွိတ့ ဲ ေ
ကာင္ကို လွမ္းျပီးေတာ
့ ေခၚသံုးမယ္ ဆုိရင္ ေရွက
့ ေန sys. (ကိုယ္သံုးမယ့္ေကာင္ ရဲ ့ module) ထည့္ေပးရပါတ
ယ္။ အဲ့တာေျကာင့္ version ကို ေခၚမယ္ဆုိရင္ sys ထဲမွာ ရွိတ့ ဲ ေကာင္ကို ေခၚတာျဖစ္လ့ ို .. Sys.version လိ့ ေ

ခၚလိုက္မွ ခုလက္ရွိ Python version ယ GCC version တု့ ကိ
ိ ု ျမင္ရတာပါ။

ေအာက္က ပုံေလးနဲ ရ
့ ွင္းျပထားတာကို ျကည့္လိုက္ရင္ ပိုရွင္းသြားပါလိမ့္မယ္။

93
http://crossnetmm.com/

ခုက် ြန္ေတာ
္ တု့ ေတြ
ိ မွာ ပါဆယ္ သံုးခုရွိတယ္ ဆုိက် ပါစို ့.. အဲ့ထဲမွာ လက္ေတာ
့ ရယ္ နာရူတုိရယ္ Iron
Man ရယ္ ရွိတယ္။ အထုတ္ထဲက ပစၥည္းကို ယူမယ္ဆုိရင္ အထုပ္ကို အရင္ဖြင့ျ္ ပီးမွ ယူလို ရ
့ တာပါ။ လက္ေ
တာ
့ ကို ယူမယ္ဆုိရင္ အဆင့္နွစ္ဆင့္ရွိပါတယ္။
1. လိေမၼာ္ေရာင္ box ကို ယူပါ
2. လိေမၼာ္ေရာင္ အထုပ္ကို ဖြင့ျ္ ပီး အထဲက laptop ကို ယူရသလိုမ်ိဳးပဲ..
Python import အတြက္ လက္ေတာ
့ ယူသလို အဆင့္နွစ္ဆင့္ နဲ့ ဥပမာ ျပန္ျပပါမယ္။
1. import sys ( sys ဆုိတဲ m
့ odule ကို import လုပ္ပါ)
2. Sys.version ( version ကိုယူသံုးမယ္ဆုိရင္ ( ခု အေပၚက example မွာဆုိ laptop ေပါ့..) ကိုယ္ ဘ
ယ္က ေကာင္ကို ယူမယ္ဆုိတာ တစ္ဆင့္ခံျပီး ေရးေပးရမယ္။ sys ဆိုတ့ ဲ module ထဲက version ကို
ယူမွာျဖစ္လ့ ို sys.version လုိ ေ
့ ရးရတာပါ။ version ရဲ r့ esult ကို ရလာပါလိမ့္မယ္

အဲ့လိုပဲ နာရူတုိကို ရဖို ယ


့ ူဖုိ ့ အတြက္ ဆုိရင္ ခရမ္းေရာင္ အထုပ္ကို အရင္ယူျပီး ဖြင့ရ
္ ပါမယ္ ျပီးမွ အရု
ပ္ကို ယူရတာပါ။ ထုိနည္းတူစြာပဲ.. time module ထဲက gmtime() ကုိုယူသံုးခ်င္တယ္ဆုိရင္ (import time
အတြက္ဆုိရင္) time.gmtime() လို ေ
့ ရးလိုက္မွ year 2019 ဆုိတုိ m
့ onth 4 တုိ စ
့ သည္ျဖင့္ ထြက္လာတာပါ။
ဒီတုိင္း gmtime() ပဲ ေရးလိုက္ရင္ေတာ
့ gmtime ကို မသိတ့ ဲ အေျကာင္း error တက္ပါလိမ့္မယ္။ ခရမ္းေရာင္
အထုပ္ကို မဖြင့ပ
္ ဲ နာရူတုိကို ယူလို မ
့ ရသလိုေပါ့ဗ်ာ။

94
http://crossnetmm.com/

ဟုတ္ျပီး ခု import ကို သံးု တာရဲ ့ ေကာင္းတာ မေကာင္းမယ္ ထင္တာေလးေတြကို နွိဳင္းယွဥ္ျကည့္ က်


ရေအာင္။

** import [ module ] **

Import ဆုိျပီး ေနာက္က module ပဲ ေရးထားတဲ့ အတြက္ အဲ့ module ေအာက္က ေကာင္ေတြကို ေ
ခၚသံုးလို ရ
့ တယ္။

ဒါေပမယ့္ တစ္ခုခုဆုိ module.[something] ဆုိျပီး ေရးေနရတာက စာေရးရတာ code ရွည္တယ္ေပါ့


ဗ်ာ .့ . အဲ့လိုမ်ိဳးအတြက္ ေျဖရွင္းလိ့ ရမယ
ု ့္ နည္းတစ္ခုေတာ
့ ရွိတယ္ဗ်ာ ့.. အဲ့ေကာင္က ေ တ ာ့ as ကို သံးု ရမွာပါ။

import datetime as dt ဆုိတ့ ဲ code မွာ as သည္ ဘာကိုလုပ္ေပးတာလဲ ဆုိေတာ


့ datetime ဆို
တဲ့module ကို ေခၚမယ္ ညြန္းဆုိမယ္ ဆုိရင္ dt အအေနနဲ ့ သက္မွတ္တယ္လို ့.. ေျပာလိုက္တာပါ။ ပံုမွန္ဆုိရ
င္datetime.datetime.today() လို ေ
့ ခၚျပီး current date & time ကို ျကည့္ရမွာ ျဖစ္ေပမယ့္ as ေျကာင့္မုိ
့datetime module ေနရာမွာ dt လို သ
့ ံုးလို ရ
့ သြားပါတယ္။ ကိ္ ယ
ု ့္ သေကၤတနဲ ့ ကိုယ္ တုိတုိေရးလို ့ ရတာေပါ့။

** from module import [ ] **

ကိ္ ယ
ု ့္ သံုးခ်င္တ့ ဲ item ကို ပဲ ယူတာျဖစ္လ့ ို သံးု မယ့္ item ေတြကို control လုပ္နုိင္တယ္။
သူက code ေခၚသံုးတဲ့ အခ်ိန္က် ေရးရတာသက္သာတယ္။ အေရွက
့ box အထုပ္ ဥပမာ နဲ ့ ျပန္ေျပာရရ
င္from module import [ ] သည္ box ကို ဖြင္ ေ
့ ပးထားတာနဲ တူပါတယ္။ ဒီတုိင္း ယူသံုးလိုက္ယံုပါပဲ။

95
http://crossnetmm.com/

from sys import version ဆုိတ့ အတြ


ဲ က္ sys ဆိုတ့ ဲ module ထဲက version ကို import လုပ္ထားတာပါ။
အဲ့အတြက္ေျကာင့္ version လို ေ
့ ခၚလိုက္တာနဲ ့ error မတက္ပဲ .. ခုလက္ရွိ version ကို ျပေပးပါတယ္။

ဒါေပမယ့္ item အသစ္တစ္ခု သံုးခ်င္တုိင္း import လုပ္ေပးေနရတာကေတာ


့ အလုပ္ ရွဳတ္ပါတယ္။
import ထပ္လုပ္မေပးရင္ define လုပ္ေပးထားပါဘူး ဆုိျပီးေတာ
့ error တက္လာပါလိမ့္မယ္။

From sys import platform ဆုိျပီး sys moduel ထဲ က platform ကို import လုပ္လိုက္မွ သံုးလိ့ ု
ရသြားတာပါ။ ခု က် ြန္ေတာ
္ python သံုးေနတဲ့ platform သည္ cygwin ျဖစ္တာမို ့ cygwin ဆုိျပီး result ထြ
က္လာတာပါ။

import [ module ] တုန္းက် က module name ကို ေရွ ဆ


့ းံု မွာ .(dot) ထည့္ျပီး ေရးသံးု ရပါ တယ္။
from [module] import [ . . ] က် ေတာ
့ ဘယ္ module က ေကာင္ကို import လုပ္ပါတယ္ လိ့ ု ေျကျငာထား
တာျဖစ္လ့ ုိ.. ေရွ မွာ့ module နာမည္ထည့္စရာ မလုိေတာ
့ ပဲ direct access ရတာပါ။

*** >> Using from module import * << is not Best practice ***

Import * ကို ျဖစ္နုိင္ရင္ မသံးု ေစခ်င္ပါဘူး. Module ကို ယူတာမဟုတ္ပဲ.. Module ထဲက ရွိသမွ်
item ေတြအကုန္ကို ခုလက္ရွိ runေန / ေရးေန တဲ ထ
့ ဲ ကို ဆြဲသြင္းလိုက္တာပါ။ ခုထိေတာ
့ ေတြးျကည့္ရင္ အ
ဆင္ေျပ ေနသလိုပဲ ေနာ္။ ဒါေပမယ့္ သူက နာမည္တူတာေတြရွိရင္ overwrite တဲ ျ့ ပသနာရွိပါတယ္။

96
http://crossnetmm.com/

Module ထဲက ေကာင္တင္ နာမည္တူနုိင္ယံုတင္ မကေသးပါဘူး .. ကိုယ့္ variable နဲ ့ နာမည္တူခရ


ဲ့ င္ ျပသနာ
ရွိနုိင္ပါတယ္။ ေအာက္က ဥပမာ ကို ျကည့္ပါ။

platform = ‘parrotsec’
from sys import *
အေပၚက နွစ္ေျကာင္းမွာဆုိ platform ထဲကို ‘parrotsec’ ဆိုတဲ ့ string ထည့္ထားပါတယ္။ ေနာက္ျပီး sys
module မွာရွိတ့ ဲ ေကာင္ေတြ အားလံုးကိုလဲ import လုပ္ထားပါတယ္။ sys ထဲ က platform လဲ အပါ အ၀င္
ေပါ့။ အဲ့တာဆုိ >>> မွာ platform လို ေ
့ ခၚလိုက္ရင္ ဘယ္ေကာင္ရဲ ့result ထြက္လာမလဲ ဆုိေတာ
့ ‘cygwin’
ဆုိျပီးေတာ
့ ရပါတယ္။ sys module ထဲ က ေကာင္ကို ေခၚသံုးလိုက္တာပဲ ျဖစ္ပါတယ္။ from sys import *
သည္ platform = ‘parrotsec’ ကို overwrite လုပ္လိုက္တဲ သေဘာမ်ိဳး ျဖစ္သြားလိ့ ပါ။

97
http://crossnetmm.com/

ေနာက္တစ္ခါ platform = ‘parrotsec’ လိ့ ု ေရျပီး ျပန္ထုတ္ျကည့္ရင္ေတာ


့ platform =
‘parrotsec’ က ျပန္ျပီး overwrite ျဖစ္သြားတာမုိ p
့ arrotsec ဆုိတဲ အ
့ ေျဖရပါတယ္။

IMPORT အေျကာင္းေတာ
္ ေတာ
္ ေလး သိသြားျပီဆုိေတာ
့ datetime ဘက္ျပန္လွည့္က် ရေအာင္။

ခု လက္ရွိ ရွိေနတဲ့ year, month, day ေတြကို တစ္ခုခ်င္း ထုတ္ျကည့္က် ရေအာင္။

Line1 => datetime ဆုိတ့ ဲ module ထဲက date class ကို import လုပ္လိုက္ပါတယ္။
Line3 => # သေကၤတနဲ c့ omment ေပးတာပါ။ PYTHON သည္ CODE အေနနဲ ထ
့ ည့္ျပီး မ run ပါဘူး။
Line4 => date object အတြက္ today နာမည္ နဲ v့ ariable တစ္ခုကို သံုးျပီး တည္ေဆာက္လိုက္ပါတယ္။
today ထဲမွာ ခုလက္ရွိ year, month, date တု့ ိ ပါ၀င္ပါတယ္။
Line6 => today.year ဆုိျပီေတာ
့ ခုလက္ရွိ ခုနွစ္ကို ထုတ္ပါတယ္။
Line7 => today.month ဆုိျပီေတာ
့ ခုလက္ရွိ လ ကို ထုတ္ပါတယ္။
Line8 => today.day ဆုိျပီေတာ
့ ခုလက္ရွိ ေန ရ
့ က္ ကို ထုတ္ပါတယ္။
Today ေနာက္က ဘာမွမပါဘူးဆုိရင္ေတာ
့ [ print(today) ] ခုလက္ရွိ နွစ္ လ ရက္ အကုန္ကို ထုတ္ျပပါလိမ့္
မယ္။

Text editor တစ္ခုနဲ s့ ave ျပီး python နဲ ့ run လိုက္ရင္ ေအာက္ပါအတုိင္း result ထြက္ပါလိမ့္မယ္။

အကယ္လိ့ ု.. ခုလက္ရွိ အခ်ိန္ကုိပဲ ထုတ္ခ်င္တယ္ဆုိရင္ေတာ ့ print(datetime.now().time()) ပါ

98
http://crossnetmm.com/

လက္ရွိ ေရာက္ေနတဲ့ ခုနွစ္ လ ရက္ ကိုလဲ print(datetime.now().date()) ဆုိျပီး ထုတ္လို ရ


့ ပါတယ္။ ေအာ
က္ က screenshot ကို ျကည့္ပါ။

6.2 Format date using strftime()

strftime() Method သည္ date ေတြ time ေတြကို string အေနနဲ ့ ျပန္ထုတ္ေပးတဲ့ေကာင္ပါ။
ေအာက္က ကုတ္ေတြကို ကိုယ့္စိတ္ျကိဳက္နာမည္ တစ္ခုနဲ ့save ပါ။ က် ြန္ေတာ
္ ကေတာ
့ kp.txt ဆုိျပီးေတာ
့ သိ
မ္းခဲပ
့ ါတယ္။

Line1 => က datetime module ထဲက datetime class ကို import လုပ္လိုက္တာပါ။

99
http://crossnetmm.com/

Line3 => datetime အတြက္ object တစ္ကို တည္ေဆာက္လိုက္ပါတယ္။ now ဆုိတ့ ဲ variable သည္ ခု
လက္ရွိ date နဲ t့ ime ပါ၀င္ေနတဲ့ datetime object တစ္ခုပါ။

Line5 => strftime() method ကိုသံုးျပီးေတာ


့ သူ မ
့ ွာရွိတ့ ဲ format code ေတြနဲ .့ . ကိုယ္ေပၚေစခ်င္တ့ ဲ
format နဲ .့ . Date, time ကို ေဖာ္ျပလို ရ
့ ပါတယ္။

strftime() ရဲ f့ ormat code ေတြသည္ အမ်ားျကီး စုေပါင္း စပ္ေပါင္းျပီးေတာ


့ ကိုယ့္စိတ္ျကိဳက္ ျပေစခ်င္တ့ ဲ
အစီအစဥ္ လိုက္ အတိုင္းေရးေပးနုိင္ပါတယ္။

Kp.txt ကို python အေနနဲ ့ run လိုက္ရင္ ေအာက္ပါအတုိင္း result ရပါလိမ့္မယ္။

100
http://crossnetmm.com/

ခုသံုးျဖစ္ခတ
ဲ့ ့ ဲ format code ေလးေတြပါ။

● %Y - year [0001,..., 2018, 2019,..., 9999]


● %m - month [01, 02, ..., 11, 12]
● %d - day [01, 02, ..., 30, 31]
● %H - hour [00, 01, ..., 22, 23
● %M - month [00, 01, ..., 58, 59]
● %S - second [00, 01, ..., 58, 59]
● %p - Locale’s AM or PM.[AM, PM]
● %b - Abbreviated month name [Jan, Feb, ..., Dec]

6.3 strptime()

strftime() တုန္းက datetime ကို string အေနနဲ ့ ေျပာင္းခဲတ


့ ာပါ။ ခု strptime() က က်ေ တ ာ့
string ကို datetime အေနနဲ ့ ျပန္ေျပာင္းေပးတာပဲ ျဖစ္ပါတယ္။ Line no.1 က ေ တ ာ့ datetime module
ထဲက datetime ကို import လုပ္တာပါ။

Line no.3 မွာ datetime ေျပာင္းမယ့္ string တစ္ခု ကို date_string ဆိုတ့ ဲ variable ထဲ ကို ထည့္ထားပါ
တယ္။ line5 မွာ date_string ထဲမွာ ရွိတ့ ဲ string ကို Print ထုတ္ျပထားပါတယ္။ Line6 က က် ေတာ
့ မွာ
က်ေ တ ာ့ date_string က ဘာ data type ျဖစ္တယ္ဆိုတာကို သိေအာင္ print ထုတ္ျပထားပါတယ္။

Line no 8 မွာ strptime() ကိုသံုးျပီးေတာ


့ date_string ကို format code ေတြသံုးျပီး datetime
အျဖစ္ ျပန္ေျပာင္းလိ္ က
ု ္ ပါတယ္။ date_object variable ထဲ ကို ထည့္ပါတယ္။ strptime() မွာ ေရွက
့ ေကာ
င္သည္ data string ျဖစ္ျပီးေတာ
့ .. ေနာက္ကေကာင္သည္ format code ျဖစ္ပါတယ္။ line 10 က
date_object ထဲမွာ ရွိေနတဲ့ ေဒတာကို ထုတ္ျပတာျဖစ္ျပီးေတာ
့ line 11 သည္ date_object သည္ ဘာ
typeျဖစ္တယ္ဆုိတာကို ထုတ္ျပတာပါ။

101
http://crossnetmm.com/

6.4 Current time of time zone

မတူညီတ့ ဲ ေနရာေဒသက နုိင္ငံေတြရဲ ့ real time (လက္ရွိ အခ်ိန္) ကို သိဖုိ့ဆုိရင္ ေတာ
့ pytz
ဆုိတ့ ဲ module ကို သံုးျပီးေတာ
့ ထုတ္လို ရ ့ ပါတယ္။ ဒါေပမယ့္ ဒီေနရာမွ တစ္ခုရွိတာက pytz
module သည္ built-in ပါမလာပါဘူး။ အဲ့ေတာ ့ သူ က
့ ို ထပ္သြင္းမွ ရမွာပါ။ အလြယ္ဆံုးနည္းကေတာ ့
pip ကို အသံုးျပဳ ျပီးေတာ
့ ထည့္ လိုက္တာပါပဲ။ Python3.4 ေနာက္ပုိင္း version ေတြမွာေတာ ့ pip
သည္ install လုပ္ျပီးသားပါ။ python 2.7 လို အရင္တုန္းက version ေတြကေတာ ့ pip ကို ထပ္ထ
ည့္ ေပးရပါတယ္။

** pip installation **

https://bootstrap.pypa.io/get-pip.py ကေနျပီးေတာ ့ python script ေလးကို ေဒါင္းျပီး run


လိုက္ရင္ ရပါျပီး။ အေသးစိတ္ သိခ်င္ရင္ေတာ
့ .. ေအာက္ပါလင့္ကေနတစ္ဆင့္ ဖတ္ျကည္ပါ။

https://www.makeuseof.com/tag/install-pip-for-python/

ဟုတ္ျပီး pip ကို သြင္းျပီး သြားျပီးေနာက္.. Pip ကိုသံုးျပီးေတာ


့ python module/package ေတြကို
install လုပ္ပါမယ္။ ဘာမွမခက္ပါဘူး.. pip install [module name] ပါ

102
http://crossnetmm.com/

Linux အတြက္ကေတာ
့ apt-get install python-pip, apt-get install python3-pip ပါ။

pytz ဆုိတ့ ဲ ေကာင္သြင္းျပီးေနာက္မွေတာ


့ timezone ေတြရဲ ့ current time ကို သိရဖုိ c့ ode ေတြေရးက် စို .့ .

Line 1 => datetime module ထဲက datetime class ကို import လုပ္ပါတယ္။
Line 2 => pytz module ကို import လုပ္ပါတယ္။
Line 4 => pytz.timezone() အတြက္ object ကို tz_NY ဆိုတ့ ဲ variable ကို သံုးျပီး တည္ေဆာက္ လိုက္
ပါတယ္။

Line 5 => ဒီေနရာမွာ datetime.now() နဲ d


့ atetime.today() နွစ္ခုထဲက now() ကို ဘာလို သ
့ ံုးလဲဆုိေတာ

today သည္ keyword argument ကို လက္မခံနုိင္ပါဘူး.. Now က ေ တ ာ့ keyword argument ေတြကို လ
က္ခံပါတယ္။ default အရ datetime.now(tz = none) ျဖစ္တာမုိ .့ . datetime.today() နဲ r့ esult ခ်င္း
သြားတူေနတာပါ။ ခု now() timezone သတ္မွတ္လိ္ က
ု ္ တာပါ။ variable datetime_NY ထဲမွာ NewYork နဲ
့ ပါတ္သက္တဲ d
့ ate,time information ေတြ ထည့္လိုက္ပါတယ္။
Line 6 => strftime() ကို သံုးျပီးေတာ
့ NewYork time ကို print ထုတ္လိုက္ပါတယ္။
Line 8 to 10 သည္လဲ ထုိနည္းတူစြာ အလုပ္လုပ္ပါတယ္။ result ကို ေအာက္က screenshot မွာ ျကည့္
ပါ။

6.5 Python sleep()

Python ရဲ s့ leep() function ကို program အျကီးျကီးေတြ run တဲ့ အခါ processing လုပ္ရတာမ်ား
လိ့ ..ု က်န္ေန တဲ့ code ေတြကို ဆက္မ run ပဲ ခန နားျပီးမွ ဆက္ run ခ်င္တာမ်ိဳးပဲ ျဖစ္ျဖစ္

103
http://crossnetmm.com/

device(router/swtich) ေတြမွာ show command ေတြ config ေတြခ်ရင္ 1sec 2sec ေလာက္ ေစာင့္တာ
မ်ိဳးပဲ ျဖစ္ျဖစ္ စတဲ့ code ကို ဆက္မသြားပဲ ခန wait ေစခ်င္တာမ်ိဳးေတြမွာ sleep ကို သံုးပါတယ္။

အေပၚက example ကုတ္အရဆုိရင္ sleep ကို သံုးဖုိ့အတြက္ time module ကို import လုပ္ထားပါ
တယ္။ printed immediately ကို program စစခ်င္း run တဲ့အခ်ိန္မွာ print ထုတ္ပါတယ္။
time.sleep(2.4) ဆိုတ့ ဲ code ကိုေရာက္တဲ့အခ်ိန္မွာ python သည္ 2.4 sec ေလာက္ ခန ရပ္သြားပါတယ္။ ျ
ပီးမွ ေအာက္က် န္ေနတဲ့ codeျဖစ္တဲ ့ print(“Printed after 2.4 seconds.”) ကို execute လုပ္ပါတယ္။

ေနာက္တစ္ခါ 1sec ျခားတစ္ခါ အခ်ိန္ကိုေပးေနမယ္ ့ နာရီဆန္ဆန္ script တစ္ခုေလာက္ while loop


ကို သံုးျပီး ေရးျကည့္က် ရေအာင္။

Line no.1 => time module ကို import လုပ္ပါတယ္။ Line no.3 while ရဲ ့ condition ေနရာ
မွာTrue ျဖစ္ေနတာမို ့ infinite loop ပါတ္ေနပါလိမ့္မယ္။ Line no.4 => localtime ဆိုတ့ ဲ variable ထဲ ကုိ
time ထဲ localtime() ကို ေခၚျပီးေတာ
့ ခုလက္ရွိ ရွိေနတဲ့ အခ်ိန္ data ကို ထည့္လိ္ က
ု ္ ပါတယ္။ datetime
module သံုးလဲရတယ္ေနာ္။ import ထပ္လုပ္ရတာပဲ ရွိမွာ။ line no.5 time ရဲ့ strftime () ကုိသံုးျပီး
localtime ထဲက data ကို format ခ်ပါတယ္။ ရလာတဲ့ ေကာင္ကို result ဆုိတ့ ဲ variable ထဲ ကို ထည့္ပါတ
ယ္။ line no.6 format တစ္က် နဲ ရ
့ လာတဲ့ အခ်ိန္ကို print ထုတ္ပါတယ္။ line no.7 တစ္စကၠန့န
္ ားျပီး
while ရဲ c့ ondition သည္ True ပဲ ျဖစ္ေနတာမုိ .့ . loop ဆက္ပါတ္ေနပါေတာ
့ တယ္။

7. Python File I/0 (input/output)

104
http://crossnetmm.com/

က် ြန္ေတာ
္ တု့ ိ Network သမားေတြအေနနဲ ့ ကေတာ
့ က် ြန္ေတာ
္ တု့ ေတြ
ိ ရဲ ့data ကို file ေတြထဲကို
ထည့္တာ.. ဒါမွမဟုတ္.. File ထဲမွာ store လုပ္ထားတဲ့ data ကိုျပန္ယူဖုိ အ
့ တြက္ စသည္ျဖင့္ သံုးက် ပါတယ္၊
File handling က Web application သမားေတြအတြက္လဲ အေရးျကီးပါတယ္။ ကဲ စလိုက္က် ရေအာင္ ဗ်ာ။

Python မွာ input လုပ္တာသည္ raw_input() ရယ္ input() ရွိတယ္. အေရွမ


့ ွာလဲ အျကိမ္ျကိမ္ သံုးခဲေ
့ တာ

အထူးတစ္လည္ထပ္မရွင္းေတာ
့ ဘူး.. ျပီးေတာ
့ output ထုတ္ရင္ print() ကိုသံုးျပီး ထုတ္ခဲက
့ ် တယ္။ print
ကေတာ
့ နဲနဲ ေလး ျဖည့္ေျပာခ်င္တာရွိတယ္။

ခုေအာက္က screenshot သည္ str.format() method ကုိ အသံုးျပဳထားတာပါ။ အဲ့ဒီမွာ သတိထား


ရမယ့္ အခ်က္နွစ္ခ်က္ရွိပါတယ္။ { } နဲ .့ forat( ) ထဲက data ေတြပါ။ .format သည္ tuple လိုမ်ိဳး index ေတြ
နဲ ့ အလုပ္လုပ္ျပီးေတာ
့ အဲ ့inde ေတြကို ေနရာခ်ဖုိ ့ { } နဲ ့ သက္မွတ္ထားပါတယ္။ line no.1 မွာဆုိ.. { } နွစ္ခု
ပါတဲ့ အတြက္ default သည္ ပထမ { } သည္ Index 0 ဒုတိယ ဆုိ index 1 ဆုိျပီးေတာ
့ 1 ေပါင္း ေပါင္း
သြားပါတယ္။ အဲ့အတြက္ I love movies and books ဆိုတ့ ဲ result ကို ရမွာပါ။
Line no.4 မွာက် ေတာ
့ { } ေတြထဲမွာ index No. ေတြပါထည့္ထားေပးလိ့ ု.. {0} မွာ Index.0 က
movie ကိုထည့္ျပီးေတာ
့ {1} မွာေတာ
့ Index.1 မွာရွိေနတဲ ့ books ကို ထည့္ျပီး print ထုတ္လိုက္မွာပါ။

Line no.7 မွာ ရွိတ့ ဲ example code က ေ တ ာ့ index No ေတြကို စိတ္ျကိဳက္ေရးျပီး ထုတ္လိ့ ရတယ
ု ္
ဆုိတာကို ျပထားတာပါ။ index 1 ကို အရင္ထုတ္ျပီးမွ index0 ကို ထုတ္ေပးထားတာပါ။

အဲ့တာအျပင္ keyword argument ေတြကို သံးု ျပီးေတာ


့ လဲ print ထုတ္မယ့္ string ကို format ခ်
ေပးလိ့ ရပါတယ
ု ္ ။ ခုေအာက္က example မွာဆို {name}ရယ္ {greeting}ရယ္ ရွိပါတယ္။ အဲ့အတြက္ .format
မွာ name အတြက္က Dear လို ပ
့ ဲ ေရးေပးထားျပီး Greeting အတြက္က GoodNight ဆုိျပီး keyword အတြ
က္ သက္ဆုိင္ရာ data ေတြ ထည့္ေပးထားပါတယ္။

Python ကေနျပီးေတာ
့ print() လိုက္တဲ့အခ်ိန္မွာ hello ေနာက္က { name } ကိုေတြ ေ
့ တာ

keyword name မွာ ရွိတ့ ဲ data ျဖစ္တ့ ဲ dear ကို ထုတ္ယူလိုက္ပါတယ္။ အဲ့ေနာက္ {greeting} မွာရွိတ့ ဲ data
ျဖစ္တ့ ဲ GoodNight ကို လဲ ထုတ္ယူလိုက္ျပီး အကုန္စုေပါင္းျပီး format က် က် print ထုတ္ျပပါတယ္။

105
http://crossnetmm.com/

ကိုယ္ေပၚေစခ်င္တ့ ဲ data ေတြကို .format()ထဲ မွာေရး .. ျပီးေတာ


့ ထုတ္မယ့္အခ်ိန္က် ေပၚေစခ်င္တ့ ဲ
data ိကု { } သံုးျပီးေတာ
့ format ရိုက္ပါ။

ခုအေပၚမွာ ေျပာခဲတ
့ ့ ဲ နည္းလမ္းကို သံုးလို ရ
့ သလို C programming မွာ တုန္းကလို % operator ကို
သံုးျပီးေတာ
့ လဲ print ထုတ္မယ့္ string ကို format ခ် လိ့ ရပါတယ
ု ္။

Name ဆိုတ့ ဲ variable ထဲ ကို ‘John’ ဆိုတ့ ဲ string value တစ္ခု ထည့္ထားပါတယ္။ print ထုတ္
လိုက္တဲ့ အခ်ိန္မွာ %s ဆိုတာသည္ string variable မွာ ရွိတ့ ဲ data ကို ထုတ္ရမယ့္ ေနရာကို ညြန္းဆုိထား
တာပါ။ အဲ့တာေျကာင့္ Hello, ေနာက္မွာ John ဆုိျပီး ထြကလာတာပါ။

ပိုျပီး နားလည္သြားေအာင္ ေနာက္ထပ္ example တစ္ခုနဲ ထ


့ ပ္ စမ္းျကည့္က် ရေအာင္။ ခုဒီ ဥပမာ မွာ
ဆုိရင္ %s နဲ %
့ d ဆိုတာရွိတယ္.. %s သည္ string variable ထဲ ရွိတ့ ဲ data (MgMg)ကို ထုတ္မယ့္ ေနရာျဖ
စ္ျပီး ေတာ
့ %d သည္ decimal integer (ဒီေနရာမွာေတာ
့ 27 )ကိုထုတ္မယ့္ ေနရာကို သတ္မွတ္ေပးထားတာ
ပဲ ျဖစ္ပါတယ္။ ထုတ္ရမယ့္ ေနရာျပီးေတာ
့ ထုတ္မယ့္ေကာင္ေတြကို % ေနာက္ကေန ေရးေပးထားပါတယ္။ ေ
အာက္ကကုတ္ေလးကို run ျကည့္လုိက္ပါ။

ခုေအာက္က list က ေ တ ာ့ % operator ေတြနဲ ့ သူတုိ ရ


့ ဲအ
့ သံုးေတြပဲ ျဖစ္ပါတယ္။

106
http://crossnetmm.com/

အေရွ မ
့ ာွ တုန္းက detail မေျပာခဲရ
့ ေတာ
့ .. အဲ့တာေလးကို သိေစခ်င္လို ပ
့ ါ။ ကဲ အဓိက အေျကာင္း
အရာ ျဖစ္တ့ ဲ file ေတြ ဖြင့တ
္ ာပိတ္ထား data အသြင္း အထုတ္ လုပ္တာ။။ ဖ်က္ပစ္တာ စတာေတြကို ေလ့လာ
က် စို ။့

7.1 Python File Handling

ဟုတ္ျပီ file ဆုိတာ ဘာလဲဆုိေတာ


့ non-volatile memory (eg,.Hard disk) ေပၚမွာ နာမည္ေပးျပီး
data ေတြ သိုေလွာင္ သိမး္ ဆည္း ထားတဲ့ ေကာင္ေတြကို ဖုိင္ လို ေ
့ ခၚပါတယ္။ အရင္ဆံုး file တစ္ဖုိင္ကို
handle လုပ္မယ္ဆုိ သိသင့္တဲ ့ function သည္ open() ပဲ ျဖစ္ပါတယ္။ read မွာပဲျဖစ္ျဖစ္ write မွာပဲ ျဖစ္ျဖ
စ္ အရင္ေတာ
့ open ရမွာပဲေလ။ open မွာ parameter နွစ္ခု ပါ ပါတယ္။ open လုပ္မယ့္ filename ရယ္ ဘ
ယ္လို mode နဲ ဖ
့ ြင့မ ့ ဲ ့ syntax သည္ open("filename", "mode")ပဲ ျဖစ္ပါတယ္။
္ လဲ ဆုိတာပါ။ သူ ရ
mode က ေ တ ာ့ read မွာလား write မွာလား.. စသည္ျဖင့္ အလုပ္ လုပ္မယ္ ့ mode ကို ေရးေပးရတာပါ။ အ
ကယ္လို .့ filename ပဲ ေရးထားတယ္ဆုိရင္ default mode သည္ ‘rt’ ျဖစ္ပါတယ္။ ‘r’ သည္ read ကို ကိ္ ယ
ု ္
စားျပဳျပီး ‘t’ သည္ text ဖုိင္ကို ကိုယ္စားျပဳပါတယ္။

myfile = open("demofile.txt") ဆုိျပီးေတာ


့ open() function ေနာက္မွ ဖြင့မ
္ ယ္ ဖုိင္ နာမည္ေလး
ေရးေပးလိုက္ပါတယ္။ open() ကို ေခၚလိုက္တဲ့ အခ်ိန္မာွ myfile ဆိုျပီးေတာ
့ return ျပန္လာမယ့္ ေကာင္အ
တြက္ object တစ္ခု တည္ေဆာက္လိုက္ပါတယ္။ အဲ့ေနာက္ အဲ့ဖုိင္ထဲမွာ ဘာေတြရွိလဲ သိဖုိ အ
့ တြက္ read()
method ကို သံးု ျပီးေတာ
့ ဖတ္ျကည့္ပါမယ္။ အေပၚမွာလဲ ေျပာခဲတ
့ ယ္ေနာ္ .. Mode ေျပာမထားရင္ default

107
http://crossnetmm.com/

mode သည္ ‘rt’ ျဖစ္တာဖုိ .့ . ဖတ္လိ့ ရပါတယ


ု ္ ။ တစ္ခုမွတ္ ထားရမွာက open() လုပ္ျပီးရင္ေတာ
့ best
pritice အေနနဲ ့ ျပန္ပိတ္ခဲဖ
့ ုိ လ
့ ိုတယ္ေနာ္.. close() function ကို သံုးျပီး ပိတ္ခဲပ
့ ါ။

7.1.2 read file

print(myfile.read()) ဆုိျပီးေတာ
့ read() method ကို သံးု ျပီး ဖတ္လိ့ ရလာတာေတြ
ု ကို user ျမင္
ရေအာင္ print ထုတ္ျပပါတယ္။

read() နဲ ဖ
့ တ္လိုက္တဲ့ အခ်ိန္မွာ kp.txt ထဲမွာ ရွိသမွ် အကုန္ ထြက္လာပါတယ္။ အဲ့လိုမဟုတ္ပဲ ကို
ယ္ဖတ္ခ်င္သေလာက္ စာလံုးအေရးအတြက္နဲ ပ
့ ဲ ျဖစ္ျဖစ္ တစ္ေျကာင္းခ်င္းပဲ ျဖစ္ျဖစ္လဲ ဖတ္လို ရ
့ ပါတယ္။
read(5) ဆုိရင္ေတာ
့ 5 သည္ ဖတ္မယ့္ စာလံုးအေရအတြက္ ၅ လံုး ဖတ္မယ္လို ့ ေျပာတာပါ။ အကယ္လိ့ ု 10
ဆုိရင္ စာလံုးေရ ၁၀ လံုး ထိ ဖတ္ျပီး print ထုတ္ေပးသြားမွာပဲ ျဖစ္ပါတယ္။

readline() ကေတာ
့ တစ္ေျကာင္းခ်င္းစီ ဖတ္ျပီးေတာ
့ print ထုတ္ေပးတဲ ပ
့ ံုစံပါ။ readline() တစ္ခါ
ဆုိ ပထမတစ္ေျကာင္းဖတ္တယ္.. ေနာက္တစ္ခါ readline() ဆုိ ေနာက္ ဒုတိယ တစ္ေျကာင္း ဖတ္တယ္ .. အဲ့
လိုမ်ိဳးနဲ .့ . တစ္ေျကာင္းခ်င္ ဖတ္သြားပါတယ္။

ဒါမွမဟုတ္ for loop ပါတ္ျပီးေတာ


့ လဲ text ဖုိင္ထဲမွာ ရွိသမွ် လိုင္းေတြကို တစ္ေျကာင္းခ်င္း မကုန္ မခ်
င္းloop ပါတ္ျပီး ထုတ္သြားလိ့ ု ရပါတယ္။

108
http://crossnetmm.com/

ခုအေပၚက ဖုိင္ေတြ အားလံုးသည္ same directory/folder ထဲမွာ ရွိေနတာပါ။ တစ္ျခား


different ထဲမွာ ရွိေနတယ္ ဆုိရင္ေတာ
့ အဲ့ေကာင္ေတြရဲ ့Path လမ္းေျကာင္းကို ထည့္ေရးေပးဖုိ့ လုိပါတယ္။
python 2.7 မွာက ပံုမွန္ path လမ္းေျကာင္းိကု ေရးရင္ ရေပးမယ့္ 3.7 မွာက် ေတာ
့ \ (single slash) ေတြေန
ရာမွာ double slash ( \\ ) နဲ ့ ေရးေပးရပါတယ္။ ေအာက္ က screen shot ကို ေလ့လာ ျကည့္ပါ။ C: drive
ေ အ ာ က္ က Users ေအာက္က ekhaphyေ အ ာ က္ က Dowloads ဆုိတ့ ဲ folder/directory ထဲက
differentpathfile.txt ေလးကို လွမ္းျပီးေတာ
့ open() လိုက္တာပါ။

ဖုိင္ေတြ ဖြင့ထ
္ ားလား ပိတ္ထားလား.. ျပီးေတာ
့ ဘာ mode နဲ အ
့ လုပ္လုပ္ ေနလဲ file name စသည္ ျ
ဖင္ .့ . စစ္ခ်င္ရင္ေတာ
့ .. နာမည္စစ္မယ္ဆုိ fileobject.name() ။ ဖြင္တာ ပိတ္တာ စစ္မယ္ဆုိ
fileobject.closed ။ mode ကို စစ္မယ္ဆုိ fileobject.mode() ။ စသည္ျဖင့္ print ထုတ္ျကည့္နုိင္ပါတယ္။

ဘာလို အ
့ ့ လိ
ဲ ုေတြစစ္လဲ ဆုိေတာ
့ ကိုယ့္ script အရ ဖြင့တ
္ ့ ဲ mode ေတြ file ပိတ္ျပီးျပီလား ဖြင့ထ
္ ား
တုန္းလား.. စသည္ျဖင့္ စစ္ဖုိ့လိုလာရင္ စစ္လို ရ
့ ေအာင္ပါ။

စစခ်င္းမွာ တုန္းကလဲ ေျပာခဲတ


့ ယ္ေနာ္ .. ဖုိင္ေတြကို ဖြင့ျ္ ပီးရင္ ျပန္ပိတ္ဖုိ ့.. ပိတ္တာကေတာ
့ လြယ္ပါ
တယ္။ syntax က fileobject.close() ပါ။

109
http://crossnetmm.com/

ေအာက္က ဇယားကေတာ
့ python ရဲ ့ file mode ေတြနဲ ့ သူတ့ ရဲ
ုိ လ
့ ုပ္ေဆာင္ခ်က္ေတြပါ။

7.1.2 Python file mode

Mode Description

'r' Open a file for reading. (default)

'w' Open a file for writing. Creates a new file if it does not exist or
truncates the file if it exists.

'x' Open a file for exclusive creation. If the file already exists, the
operation fails.

'a' Open for appending at the end of the file without truncating it.
Creates a new file if it does not exist.

't' Open in text mode. (default)

'b' Open in binary mode.

'+' Open a file for updating (reading and writing)

7.1.3 Python write file

write() method က က်ေ တ ာ့ open လုပ္ထားတဲ့ file မွာ data string ေတြ သြားေရးေပးမယ့္ ေ
ကာင္ပဲ ျဖစ္ပါတယ္။ ဒီေနရာမွာ တစ္ခုမွတ္ ထားရမွာက file သည္ text ဖုိင္ သာ မကပဲ binary file လဲ ျဖ
စ္ေနနုိင္တာပါပဲ။ write() ရဲ s့ yntax သည္ fileobject.write(string) ပဲ ျဖစ္ပါတယ္။

110
http://crossnetmm.com/

ခုဒီ အေပၚက ဥပမာမွာ ဆုိရင္ kp.txt ဖုိင္ အတြက္ write mode နဲ ့ myfile ဆိုတ့ ဲ object တစ္ခု
တည္ေဆာက္လိုက္ပါတယ္။ အဲ့ေနာက္ write() ထဲ မွာ ထည့္ေရးမယ့္ စာသားေတြကို ေရးပါတယ္။ write()
မွာ \n ကို သံးု ျပီး တစ္ေျကာင္း ခ်င္းဆီ ျဖစ္ေအာင္ ေရးထားပါတယ္။ code ေတြကို execute လုပ္ျပီးေနာက္
kp.txt ဖုိင္ ကို ဖြင့ျ္ ကည့္လိုက္ရင္ ေအာက္ပါ အတုိင္း ေတြ ရ
့ မွာပဲ ျဖစ္ပါတယ္။

ခုဒီေအာက္က example မွာက် ေတာ


့ this is the line 1, this is the line 2 ……to……this is the
line 10 ထိ ထုတ္ေအာင္ range() ကို သံုးျပီးေတာ
့ loop ပါတ္ျပီး write ထားတာပါ။

Result ကိုသြားျကည့္တဲ့ အခ်ိန္မွာ ဘယ္ေလာက္ အျကိမ္ျကိမ္ run run .. this is the line 1, this
is the line 2 ……to……this is the line 10 ဆုိတ့ ဲ ေကာင္သည္ မေျပာင္လဲ ပဲ ရွိေနမွာပါ။ ေျပာခ်င္တာပါ..
Overwrite ျဖစ္ေနေတာ
့ ထပ္ မတုးိ တာကို ေျပာတာပါ။ w+ နဲ ေ
့ ရးရင္ .. သူသည္ file နာမည္ (kp.txt) နဲ ရ
့ ွိ
ရင္ အဲ့ ဖုိင္ကို ဖြင့ျ္ ပီး သြား write ပါတယ္။ မရွိရင္ create လုပ္ျပီး write လုပ္ပါတယ္။

111
http://crossnetmm.com/

အဲ့လို overwrite မျဖစ္ေစခ်င္ရင္ ဖုိင္ကို append mode နဲ ဖ


့ ုိင္ကို ဖြင့မ
္ ွ ရပါမယ္။ f=
open("kp.txt","a+") ဆုိျပီးေတာ
့ w ေနရာမွာ a ကို ေျပာင္းထားျကည့္ျပီး နွစ္ျကိမ္ ေလာက္ run ျကည့္ပါ။
overwrite မျဖစ္ေတာ
့ ပဲ.. ထပ္ ထပ္ တုးိ ျပီး ေရးသြားတာကို ေတြ ရ
့ မွာပါ။

7.2 Python OS module

Python ရဲ O
့ S module မွာရွိတ့ ဲ method ေတြသည္ file-processing လုပ္ရာမွာ အေထာက္အကူ ျ
ပဳပါတယ္။ ဘယ္လိုမ်ိဳးေတြလဲဆုိေတာ
့ ဖုိင္ေတြ ဖ်က္တာ နာမည္ေျပာင္းတာ directory တည္ေဆာက္တာ စ
တဲ့ နည္းလမ္းမ်ိဳးေတြြပဲ ျဖစ္ပါတယ္။ ဆက္ျပီး ေလ့လာျကည့္က် ရေအာင္ဗ်ာ ။

7.2.1 Renaming and deleting file

rename() method သည္ သူ န


့ ာမည္ အတုိင္းပဲ နာမည္ေျပာင္းေပးမွာပါ။ သူ ့syntax က ေ တ ာ့
os.rename(current_file_name, new_file_name) ပဲ ျဖစ္ပါတယ္။ လက္ရွိ ေျပာင္းမယ့္ file ကို အေရွ က
့ ေရး ေျပာ
င္းခ်င္တ့ ဲ နာမည္ကို ေနာက္က ေရးလိုက္ယံုပါပဲ။ os module ကိုေတာ
့ import လုပ္ေပးရမယ္ေနာ္. အဲ့တာမွ os
ထဲက method ေတြကို သံးု လု့ိ ရမွာပါ။

Remove() Method

112
http://crossnetmm.com/

remove() method ကေတာ


့ ဖုိင္ေတြကို ဖ်က္ပစ္တ့ ဲ ေနရာမွာသံုးတာပါ။ သူ ့syntax က ေ တ ာ့
os.remove(file_name) ပါ .. ဖ်က္မယ့္ေကာင္ကို remove() မွာ ေရးေပးလိုက္ယံုပါပဲ။

7.2.2 Python Directory Process

mkdir()
mkdir() method ကို လက္ရွိ directory မွာ directory တစ္ခု ထပ္ေဆာက္ဖုိ့အတြက္ သံုးပါတယ္။
mkdir ဆုိတာသည္ make directory ပါ။ သူ ့ syntax ကေတာ ့ os.mkdir("newdir")ပဲျဖစ္ပါတယ္။

chdir()
chdir() method က် ေတာ
့ ခုလက္ရွိ ရွိေနတဲ့ directory ကေန တစ္ျခား directory ကို သြားခ်င္ ေျ
ပာင္းခ်င္တ့ ဲ အခါမ်ိဳးမွာ သံးု ပါတယ္။ သူ ့ syntax က ေ တ ာ့ os.chdir("newdir")ပဲျဖစ္ပါတယ္။ သူသည္
different path လမ္း ေျကာင္းမွာ ရွိတ့ ဲ directory ေတြကို သြားေရာက္နုိင္ပါတယ္။
os.chdir("/home/newdir")

rmdir()
rmdir() ဆုိတာသည္ remove directory ပါ။ သူသည္ မလိုေတာ
့ တဲ ့ ဖ်က္ေစခ်င္တ့ ဲ directory ေ
တြကို ဖ်က္တဲ့ ေနရာမွာ သံးု ပါတယ္။ သူ s့ yntax က ေ တ ာ့ os.rmdir('dirname')ပဲျဖစ္ပါတယ္။

8. Python Error Handling

Python ရဲ i့ nterpreter ကေနျပီးေတာ


့ error ေတြ ေတြ ရ
့ င္ exception ကို raises လုပ္ပါတယ္။
Python ရဲ r့ untime မွာ ျဖစ္တ့ ဲ error ေတြကို exception ေတြလို ေ
့ ခၚပါတယ္။ ျဖစ္တ့ ဲ error အမ်ိဳးအစားေ
ပၚ မူတည္ျပီးေတာ
့ Python မွာ built-in exception ေတြ ရွိပါတယ္။ ဥပမာ ေျပာရင္ ကိန္းတစ္ခုကို zero နဲ ့
သြားစားတာမ်ိဳးဆုိ ZeroDivisionError, မရွိတ့ ဲ file တစ္ခုကို သြားဖြင့လ
္ ိုက္မ်ိဳးမွာဆုိရင္
FileNotFoundError, မရွိေသးတဲ့ module ကို import လုပ္မိရင္ ImportError စသည္ျဖင့္.. အေျကာင္းအ
ရာေပၚမူတည္ျပီး error မ်ိဳးစံုတက္က် ပါတယ္။

အဲ့လို runtime error ေတြ ျဖစ္လာတာနဲ ့ Python သည္ exception object ကို create လုပ္ပါတ
ယ္။ အဲ့ error exception ကို handle မလုပ္ခရ
ဲ့ င္ Python သည္ traceback လုပ္လ့ ရေအာင္
ို ဘယ္ေနရာ
မွာ ဘယ္လိုျဖစ္တယ္ ဘာေျကာင့္ျဖစ္တယ္ဆုိတာကို print ထုတ္ေပးပါတယ္။

113
http://crossnetmm.com/

Example အေနနဲ ့ 1/0 ဆုိျပီးေတာ


့ 1 ကို 0 နဲ ့ စားခိုိငး္ ပါတယ္။ 1 ကို 0 နဲ စ
့ ားလိ့ ု မရဘူးဆုိ PYthon
အေနနဲ ့ သိတာျဖစ္တ့ အတြ
ဲ က္ exception သည္ error ေပၚမူတည္ျပီး ထြက္လာတာမုိ့လ့ ို
ZeroDivisionError ဆုိတ့ ဲ exception ကို ေအာက္ပါ အတုိင္း ျမင္ေတြ့နိုင္ပါတယ္။ line 1 ဆုိတာကေတာ
့ ခု
မွ python ကို စဖြင့ဖ
္ ြင့ခ
္ ် င္း ေရးလိုက္တာမုိ ့ Line 1 ျဖစ္တာပါ။ enter ေခါက္ျပီးမွ ေရးျကည့္လို ့ error တ က္
ရင္ enter နွစ္ခါေခါက္ျပီး သံးု ေျကာင္းေျမွာက္မွာ ေရးတဲ့ code က error တက္ရင္ line 3 ဆိုျပီး ျမင္ရမွာပဲ ျ
ဖစ္ပါတယ္။

Python မွာ built-in အေနနဲ ့ ရွိေနတဲ e


့ xception အမ်ိဳးအစားေတြကို ေအာက္ပါတိုငိ္း ေတြ့ျမင္နုိင္ပါ
တယ္။ exception ေတြနဲ သ
့ ူတ့ ကိ
ုိ ု ျဖစ္ေစတဲ .့ . error ေတြပဲ ျဖစ္ပါတယ္။

Exception Cause of Error

AssertionError Raised when assert statement fails.

AttributeError Raised when attribute assignment or reference fails.

114
http://crossnetmm.com/

EOFError Raised when the input() functions hits end-of-file


condition.

FloatingPointError Raised when a floating point operation fails.

GeneratorExit Raise when a generator's close() method is called.

ImportError Raised when the imported module is not found.

IndexError Raised when index of a sequence is out of range.

KeyError Raised when a key is not found in a dictionary.

KeyboardInterrupt Raised when the user hits interrupt key (Ctrl+c or


delete).

MemoryError Raised when an operation runs out of memory.

NameError Raised when a variable is not found in local or global


scope.

NotImplementedErr Raised by abstract methods.


or

OSError Raised when system operation causes system related


error.

OverflowError Raised when result of an arithmetic operation is too


large to be represented.

ReferenceError Raised when a weak reference proxy is used to


access a garbage collected referent.

RuntimeError Raised when an error does not fall under any other
category.

115
http://crossnetmm.com/

StopIteration Raised by next() function to indicate that there is no


further item to be returned by iterator.

SyntaxError Raised by parser when syntax error is encountered.

IndentationError Raised when there is incorrect indentation.

TabError Raised when indentation consists of inconsistent tabs


and spaces.

SystemError Raised when interpreter detects internal error.

SystemExit Raised by sys.exit() function.

TypeError Raised when a function or operation is applied to an


object of incorrect type.

UnboundLocalError Raised when a reference is made to a local variable in


a function or method, but no value has been bound to
that variable.

UnicodeError Raised when a Unicode-related encoding or decoding


error occurs.

UnicodeEncodeError Raised when a Unicode-related error occurs during


encoding.

UnicodeDecodeErro Raised when a Unicode-related error occurs during


r decoding.

UnicodeTranslateEr Raised when a Unicode-related error occurs during


ror translating.

116
http://crossnetmm.com/

ValueError Raised when a function gets argument of correct


type but improper value.

ZeroDivisionError Raised when second operand of division or modulo


operation is zero.

8.1 Python try ……… except

အေပၚမွာ ဆုိခသ
ဲ့ လို ပဲ.. Error ရွိရင္ exception ရွိတာမို .့ . ျဖစ္လာတဲ့ exception ကို handle မလု
ပ္ရင္ ခုလက္ရွိ run ေနတဲ p
့ rocess သည္ error ဘာေျကာင့္ျဖစ္တ့ ဲ ဆိုတ့ ဲ error message ကို ျမင္ရျပီးေ
တာ ့ stop ျဖစ္သြားပါတယ္။ ေျပာရရင္ေတာ
့ crash ျဖစ္သြားတာေပါ့ဗ်ာ .့ .

အဲ့တာေျကာင့္ error ျဖစ္နုိင္တ့ ဲ ေနရာေတြကို exception ကို handle လုပ္သင့္ပါတယ္။ exception


ကို handle လုပ္မယ္ဆုိ ပထမဆံုး try ……… except block နဲ ့ simple code ေလး စေရးျပီး ေလ့လာသင္
ယူ ျကည့္က် ရေအာင္ဗ်ာ။

အေရွ က
့ example တစ္ခုျဖစ္တ့ ဲ 0 (Zero) နဲ စ
့ ားလို ရ
့ လာတဲ့ exception ကို ျပန္စမ္ျကည့္ က် ရေ
အာင္။
sys module ကို import လုပ္ပါ။ line no.7 မွာရွိတဲ ့ sys.exc_info() က sys module ရွိမွ သံးု လိ့ ု ရ
မွာပါ။ try: block သည္ တစ္ကယ္ run မယ့္ code ေတြ ထားမယ့္ေနရာပါ။ except: block က က်ေ တ ာ့ try
block က ေ န error တက္လာမွ ျဖစ္တာလဲ e
့ xception ကို handle လုပ္ဖုိ့အတြက္ run မွာပါ။ try: block
မွာ error မတက္ခဲရ
့ င္ except: သည္ ဘာမွမလုပ္ေတာ
့ ပဲ ေက် ္ ာသြားပါတယ္။

ခု try: block မွာက result = 50/0 ဆုိတ့ ဲ အတြက္ 50 ကို 0 (Zero) နဲ စ


့ ားတဲ့ အတြက္ error တ
က္ပါလိမ့္မယ္။ ပံုမွန္ကုတ္ဆုိရင္ေတာ
့ error တက္ျပီး crash ျဖစ္သြားမွာပါ။ ခုက try: ..... except: ကုိ သံးု ျ

117
http://crossnetmm.com/

ပီးေတာ
့ exception ကို handling လုပ္တာမို .့ . Crash မျဖစ္ေတာ
့ ပဲ.. except : block ကို ေရာက္သြားပါတ
ယ္။
print(“Oops!”, sys.exc_info(),”occurred.”) ဆိုတ့ ဲ code အရ .. sys.exc_info() သည္ ခုလက္
ရွိ handle လုပ္ေနတဲ့ exception နဲ ပ
့ ါတ္သက္တဲ့ information 3 ခုကို tuples အေနနဲ ့ ေဖာ္ျပေပးပါတ
ယ္။ (<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero'), <traceback object
at 0x007E2030>) ဆုိတ့ ဲ error နဲ ပ
့ ါတ္သက္တဲ့ info ၃ခု ထုတ္ေပးပါတယ္။

အဲ့လို error info သံုးခုထဲကမွ ကိုယ္ျကိဳက္နွစ္ရာကို လဲ စိတ္ျကိဳက္ထုတ္လို ့ ရပါတယ္။ ေအာက္က


ကုတ္ကို ျကည့္ပါ။

ခုအေပၚက example ကုတ္မွာက် ေတာ


့ sys.exc_info()[0], [1] စသည္ျဖင့္ ေရးျပီးေတာ
့ tuple ထဲ
မွာ ရွိေနတဲ့ 3 ခုကို index အလိုက္ထုတ္သြားတာပါ။

Except can Handle more than one exception?

ခု except: သည္ Error တစ္ခုထက္မက ထြက္လာင္ေကာ အလုပ္လုပ္လား စမ္းျကည့္က် ရေအာင္။ ေအာက္


ကကုတ္ေလးကို editor တစ္ခုခု နဲ ေ
့ ရးျပီး save လိုက္ပါ။

118
http://crossnetmm.com/

Line no.3 မွာ data မတူတာေတြကို random list ဆုိျပီး create လုပ္ထားပါတယ္။ line no.8 က formula
မွာ input အေနနဲ ထ
့ ည့္ဖုိ့အတြက္ပါ။

List ထဲက data ေတြ တစ္ခုျပီး တစ္ခု ထည့္ ထည့္ သြားဖုိ့အတြက္ for loop ပါတ္ထားပါတယ္။ try: block
ထဲ က code ကို အရင္ run တဲ အ
့ တြက္ print အေျကာင္းကေတာ
့ အဆင္ေျပပါလိမ့္မယ္။ ခုလက္ရွိ list
ထဲက data entry ကို ထုတ္ေပးတာပါ။

ေနာက္တစ္ေျကာင္းမွာက် r = 1/int(entry) code အတြက္ entry ထဲက data ကိုထုတ္လိုက္တဲ့ အခ်ိန္မွာ a


ျဖစ္ပါတယ္။ a integer ေျပာင္းျပီး 1 ကိုသြားစားတဲ့ အတြက္ error တက္ပါတယ္။ try: block မွာ error တ
က္လို ့ except: block ကို ေရာက္သြားပါတယ္။

except: block မွာက sys.exc_info()[0] ကို သံးု ျပီး exception တစ္ခုကို ထုတ္ျပထားပါတယ္။ ခု
လက္ရွိ error နဲ့ ပါတ္သက္လိ့ ု handle လုပ္ထားတဲ့ exception သည္ ( a နဲ စ
့ ားတာျဖစ္လ့ ို. Entry = a )
value error ျဖစ္ပါတယ္။ 1 စားတဲ့ value သည္ a(integer) ျဖစ္တာမို ပ
့ ါ။ print(“Oops!”,
sys.exc_info(),”occurred.”) ဆုိျပီးေတာ
့ လက္ရွိ exception info ကို print ထုတ္ျပပါတယ္။

119
http://crossnetmm.com/

random list ထဲမွာ empty မျဖစ္ေသးတာမို ့ Loop ဆက္ပါတ္ပါတယ္။ try: block က code ေတြ
ကို အရင္ run ပါတယ္။ ခုဒုတိယ entry ျဖစ္တ့ ဲ 0 (zero) ကို formula မွာထည့္လိုက္ေတာ
့ r = 1/0 ျဖစ္တာ
မို ့ error တက္ျပီး except: block ကို ေရာက္သြားပါတယ္။ ဒီတစ္ခါက် ေတာ
့ Handle လုပ္ထားတဲ့
exception object သည္ 1/ကို Zero(0) နဲ စ
့ ားလိုက္လို ့ ျဖစ္တ့ ဲ errorေျကာင့္မုိ့လ့ ို ZeroDivisionError
ဆုိျပီးေတာ
့ result ထုတ္ေပးပါတယ္။

ေနာက္တစ္ခါ for loop ဆက္ပါတ္ပါတယ္။ ဒီတစ္ခါ entry က ေ တ ာ့ 2 ျဖစ္ပါတယ္။ try: block


ထဲက code ကို အရင္စ run ပါတယ္။ 1 ကို စားတာက 2 ျဖစ္တာမို .့ . Error မတက္ေတာ
့ ပဲ.. Result ျဖစ္တဲ ့
0.5 ကို r ထဲ ထည့္လိုက္ပါတယ္။ try: block က error မတက္တာမို e
့ xcept: block က မ run ပါဘူး။

အဲ့ေနာ က္ random list ထဲမွာ ဘာမွမရွိေတာ


့ တာမို f
့ or loop အဆံုးသတ္သြားျပီးေတာ
့ for loop
block ကေနထြက္ျပီး ေအာက္ က print("The reciprocal of",entry,"is",r) ဆိုတ့ ဲ code ကို ေရာက္ပါတ
ယ္။ အတြက္ The reciprocal of 2 is 0.5 ဆုိတ့ ဲ result ရျပီး program သည္ finished ျဖစ္သြားပါတယ္။

ဟုတ္ျပီး ခုေနာက္ဆံုး run ခဲတ


့ ့ ဲ example code မွာဆုိ error ေတြက တစ္ခုမက တက္နုိင္တ့ အတြ
ဲ က္
except: ဆုိျပီးေရးလိုက္တာပါ။ အကယ္လို ့ ကိုယ္ကျဖစ္နုိင္မယ့္ error ကို ျကိဳသိရင္ေတာ
့ ေအာက္ပါ ကုတ္
အတုိင္း တစ္ခ်က္စမ္းျကည့္လို ရ
့ ပါတယ္။

ခုအေပၚက ကုတ္အရ try: block ကေတာ


့ ရွင္းပါတယ္။ ၅၀ ကို zero(0) နဲ ထ
့ ားတာျဖစ္လ့ ို error
တက္ပါလိမ့္မယ္။ except block မွာက် ေတာ
့ အရင္လို မဟုတ္ပဲ except ZeroDivisionError as ZE: ဆုိျ
ပီးေတာ
့ Zero နဲ စ
့ ားရင္ ျဖစ္မယ့္ error ကိုဖမ္းျပီး(handle) ZE အေနနဲ ထ
့ ားလိုက္ပါတယ္။ အဲ့ေနာက္ ZE
ကို print ထုတ္လိုက္တာပါပဲ။ ;-)

120
http://crossnetmm.com/

အဲ့ေတာ
့ ကိုယ္က ကုတ္ေရးမယ့္သူပဲ.. ကိုယ့္ script/code ေတြကို ကိုယ္သံးု မယ့္ design နဲ က
့ ိုက္ေ
အာင္ စိတ္ျကိဳက္ထားပါ။

ခု program ေလးတစ္ခုေလာက္ေရးျကည့္က် ရေအာင္။ ေရးရမွာက


● User ဆီက input တစ္ခုေတာင္းမယ္
● ရလာတဲ့ input ကို result = 50/user_input ဆုိတ့ ဲ formula ထည့္ျပီးသံုးမယ္
● User က quit လုိ မ
့ ေျပာမခ်င္း program က run ေနရမယ္။
● User ထည့္လိုက္တဲ့ input ေျကာင့္ျဖစ္လာတဲ့ error ကို handle လုပ္ရမယ္။ program crash ျဖစ္ေ
အာင္။
အုိေက စမ္းျကည့္က် ပါ။ မရမွ ေအာက္က ကုတ္ကို ျကည့္ပါ။

Line no.1 => sys module ကို import လုပ္ပါ။


Line no.3 => user ကို quit လု့ ရု
ိ ိက္မွ program သည္ ထြက္မွာ ျဖစ္ေျကာင္း print ထုတ္ျပီး ေျပာပါတယ္။
Line no.4 => while loop စျပီး ပါတ္ပါတယ္။ user က quit လိ့ ု မေျပာမခ်င္း loop ပါတ္မွာမို ့ infinite loop
ျဖစ္ေအာင္ while ေနာက္က condition ကို boolean true ထားထားပါတယ္။
Line no.5 => User input တစ္ခုေတာင္းလိုက္ပါတယ္။
Line no.6 => try block စပါတယ္။ တစ္ကယ္ run မယ့္ code ေတြထည့္ပါ။
Line no.7 => user ေပးတဲ့ input သည္ quit နဲ ညီ မညီ စစ္ပါတယ္။ မညီရင္ line no.9 ကို ေက် ္ ာသြားမွာ ျ
ဖစ္ျပီး ညီခရ
ဲ့ င္ေတာ
့ line no.8 အရ ထြက္သြားပါလိမ့္မယ္။
Line no.8 => Break statement ျဖစ္တာေျကာင့္ loop ကေနထြက္သြားပါလိမ့္မယ္။
Line no.9 => 50 ကို user ဆီကရတဲ့ input နဲ စ
့ ားပါတယ္။ ရလာမယ့္ အေျဖကို result ဆိုတ့ ဲ variable
ထဲ ကို ထည့္ပါတယ္။
Line no.10 => The result is ဆုိျပီးေတာ
့ ရလာတဲ့ အေျဖကို ထုတ္ျပပါတယ္။

121
http://crossnetmm.com/

Line no.11 => except block စပါတယ္။ try block က ကုတ္မွားခဲရ


့ င္ ျဖစ္လာမယ့္ exception ကို
handle လုပ္ဖုိ့ပါ။
Line no.12 => Error ထုတ္မယ့္အေျကာင္း print လုပ္ပါတယ္။
Line no.13 => sys.exc_info() ကို သံုးျပီးေတာ
့ index[0] ထဲက exception information ကို print ထု
တ္ျပပါတယ္။
Line no.15 => user က quit လိုေရးလိုက္ရင္ break ေျကာင့္ while loop ကေနထြက္သြားရင္ ထြက္
သြားေျကာင္းသိေအာင္ while loop ျပီးေတာ
့ ေအာက္မွာ BYE ဆုိျပီး print ျပထားတာပါ။

Program ေလးကို run ျပီး မတူညီတ့ ဲ input ေတြ ထည့္ျကည့္ပါဦး.. 1, 30 တု့ ထည


ိ ့္ ရင္ ဘယ္လုိ အလုပ္လုပ္
လဲ .. 0 တို ’့ a’ တုိ ့ ထည့္ရင္ေကာ ဘယ္လို output ထြကလဲ.. quit လိ့ ရိ
ု ုက္လိုက္ရင္ေကာ တစ္ကယ္ while
loop ကေနထြက္ျပီး program end လား စမ္းျကည့္ပါ..

အခုလို ့ error တက္တာကို ျပလိ့ ရသလိ


ု ု.. ကိုယ္ဖာသာပဲ user ကို message ေပးလဲ ရတယ္ေနာ္။။ စ
မ္း မျကည့္ျဖစ္မွာ ဆုိးလိ့ ု ;-)

122
http://crossnetmm.com/

Error ကိုေနာက္တစ္မ်ိဳး ထပ္ထုတ္လိ့ ရပါေသးတယ


ု ္။ က် ြန္ေတာ
္ တု့ ေတြ
ိ python interactive mode
မွာ run လိုက္လိ့ ု error တက္ရင္ ထြက္တဲ့ traceback info လိုမ်ိဳးရခ်င္ရင္လဲ လုပ္လ့ ရပါတယ
ို ္။

အဲ့လိုထြက္ဖုိ့ အတြက္ကေတာ
့ traceback module ကို import လုပ္ရမယ္ ျပီးေတာ

traceback.format_exc() ကို သံးု ျပီးေတာ
့ sys.exc_info() လိုမ်ိဳး restule ကို print ထုတ္ေပးပါမယ္။

123
http://crossnetmm.com/

Zero input ေပးလိုက္ရင္ ေအာက္ပါအတိုင္း result ရပါတယ္။ format နွစ္မ်ိဳးကို ကြဲျပီး ျမင္ေအာင္
error format 1, error format 2 ဆုိျပီး ခြဲထုတ္ထားပါတယ္။

A ကို input အေနနဲ ့ ထည့္လိုက္ခ်ိန္မွာေတာ


့ ေအာက္ပါအတုိင္း result ရပါတယ္။

124
http://crossnetmm.com/

ေနာက္ထပ္ တစ္ခုထပ္ျပီး သိေစခ်င္တာက except block ေတြကို တစ္ခုမက ေရးလိ့ ရတယ


ု ္ ဆုိတာကို
ပါ။ ေအာက္မွာ နမူနာအေနနဲ .့ . အေပၚက example ကုိပဲ ျပင္ေရးေပးထားပါတယ္။

result ကိုေတာ
့ ေအာက္ပါအတုိင္း ျမင္ေတြ့နုိင္ပါတယ္။

ဟုတ္ျပီး ဒီေလာကဆုိရင္ေတာ
့ try…except ကိုေတာ
့ နားလည္သေဘာေပါက္ေလာက္ျပီလို ယ
့ ူဆပါ
တယ္။ ေနာက္တစ္ခု ဆက္က် စို ။့

8.2 Python Try……except……else

125
http://crossnetmm.com/

Else: block သည္ try block ထဲကုတ္ေတြ ERROR မတက္မွ အလုပ္လုပ္တာပါ။ စမ္းျကည့္က် ရေ
အာင္ဗ်ာ။ အရင္ if….else တုန္းက beer ၀ယ္ဖုိ ့ အသက္စစ္တ့ ဲ program ေလးကို မွတ္မိမယ္ ထင္ပါတယ္။

User သည္ ေမးတဲ့ အတုိငး္ မရိုက္ပဲ a တု့ ိ twenty-two တု့ ိ ဘာတု့ ိ ေလ် ွာက္ရိုက္ရင္ error တက္ျပီးေတာ

exception object ထြမွာပါ။ အဲ့တာကို handle မလုပ္ခရ
ဲ့ င္ traceback message ျပျပီး program သည္
crash ျဖစ္သြားမွာပါ။ ေအာက္က result ကို ျကည့္ပါ။

အဲ့ေတာ
့ ဘယ္လို လုပ္ရမလဲဆုိေတာ
့ ..try…except…else ကို သံးု ျကည့္ပါ။ ပထမဆံုး age ဆုိျပီး
input ယူတ့ အခ
ဲ ် ိန္မွာ 1,2, စသည္ျဖင့္ integer တန္ဖိုးမဟုတ္ပဲ a,b,c တု့ ျဖစ္
ိ ခရ ဲ့ င္ int() ကို သံးု လိုက္တဲ့အခ်ိန္
မွာ error တက္ပါတယ္။ အဲ့ေတာ
့ try block ထဲ မွာ error တက္နုိုင္တ့ ဲ input ယူတ့ ဲ code ေရးလိုက္ပါတ

126
http://crossnetmm.com/

ယ္။ except block မွာက် ေတာ


့ print ('You have entered an invalid value.') ဆုိျပီးေတာ
့ integer တ
န္းဖုိး မဟုတ္တဲ့ ေကာင္ေတြရိုက္ရင္ လက္မခံတ့ ဲ အေျကာင္း print ထုတ္ျပပါတယ္။ else block မွာက် ေတာ
့ မွ
၀င္လာတဲ့ input ကိုျကည့္ျပီး beer ၀ယ္ခြင့ရ
္ မရ ကို if…else နဲ စ
့ စ္ျပထားတာာပါ။

အဲ့အတြက္ try သည္ input ကို ေတာင္းပါမယ္။


Try block မွာ error တက္ရင္ except block ကို သြာမွာျဖစ္ျပီး error မတက္ရင္ေတာ
့ else
block ကို ေရာက္သြားမွာပဲ ျဖစ္ပါတယ္။

ေအာက္က ကုတ္ေလးကို run ျပီး စမ္းျကည့္ရင္ေတာ


့ အလုပ္ လုပ္ပံုကို ပိုျပီး နားလည္လာလိမ့္မယ္လို ့
ေမ်ွာ္လင့္ပါတယ္။

127
http://crossnetmm.com/

User ကေနျပီးေတာ
့ input အမွား ရုိက္မိရင္လဲ program သည္ exception ကို handle လုပ္ထား
တဲ့ အတြက္ crash ျဖစ္မသြားေတာ
့ ပါဘူး။ အေျဖကို ေအာက္က result မွာ ျကည့္ပါ။

8.3 Python try……except……else……Finally

တစ္ခုမွထားရမွာက finally: block မွာရွိတဲ ့ code ကို အျမဲတန္း execute လုပ္ပါတယ္။ try:Block
မွာ ရွိတ့ ဲ code က မွားရင္ (error တက္ရင္) except: block ကို ေရာက္မွာ ျဖစ္ျပီး error မတက္ရင္ေတာ

else: block ကို ေရာက္ပါမယ္။ except ျဖစ္ျဖစ္ else ျဖစ္ျဖစ္ ကေန run ျပီးရင္ေတာ
့ finally: block က ကု
တ္ေတြကို အေပၚက ပံုမွ ေဖာ္ျပခဲသ
့ လိုပဲ အျမဲ execute လုပ္ကို လုပ္ပါတယ္။

128
http://crossnetmm.com/

Finally: Block အလုပ္လုပ္ပံုေလးကို ေအာက္က ကုတ္ေတြကေန တစ္ဆင့္ေလ့လာ ျကည့္က် ရေအာ


င္ဗ်ာ .. ပါတဲ့ code(function, method, module) ေတြကေတာ
့ သိျပီးသြားပါ။ စာမေျကေသးဘူးထင္ရင္ အေ
ရွ က
့ အခန္းေတြကို ျပန္ဖတ္ပါ။

ခုဒီကုတ္ေလးရဲ ့ ရည္ရြယ္ခ်က္ကေတာ
့ try: Block မွာ user ဆီကေန အခ်က္အလက္ေတြ ေတာင္းမ
ယ္.. ျပီးေတာ
့ အခ်က္အလက္ data ေတြကို username + date_month ဖုိင္နာမည္နဲ .့ . Save မယ္ေပါ့။ အဲ့အ
တြက္ input ေပးတာမွားရင္ error တက္ရင္ အတြက္က except: Block.. Try: block က ေကာင္ေတြ အကု
န္မွန္ရင္ else: block မွာက် မွ file ထဲကို data ထည့္မယ္။ finally: Block ကေတာ
့ ဖုိင္ကို ဖြင့ခ
္ ဲရင္ ျပန္ပိတ္ေ
ပးဖုိ့ လိုတာမုိ c
့ lose() ကို တာ၀န္ယူေပးတာပါ ဘာလိ့ လဲ
ု ဆုိေတာ
့ try မွာက file ကို open() ခဲတ
့ ာမုိ …
့ ပိတ္ေ
ပးဖုိ့လိုပါတယ္။ else နဲ ့ except မွာ ထည့္တာထက္ finally သည္ သူမွရွိတ့ ဲ ကုတ္ကို အျမဲ run တဲ့ အတြက္
ေျကာင့္ပါ။

ခု ဒီကုတ္ေတြသည္ finally: block ရဲ .့ . အသံုးကို ျမင္သာလိ့ ု ေရးထားေပးတဲ့ example တစ္ခုပဲ ျဖစ္


ပါတယ္။ ေလ့လာျကည့္က် ပါ။

Line no.1 => import sys


Line no.2 => from datetime import datetime
Line no.3 => try:
Line no.4=> now = datetime.now()
Line no.5 => thistime = now.strftime("%d_%b_%Y")
Line no.6 => name = input("what is your name : ")

129
http://crossnetmm.com/

Line no.7 => filename = name + ‘_’ + thistime + ".txt"


Line no.8 => myfile_o = open(filename, "w")
Line no.9=> age = input("Enter your age? ")
Line no.10=> location = input("Where do you live : ")
Line no.11=> gender = input("Male/Female? ")
Line no.12=> hourly_income = int(input("What is you basic salary income? (Hourly) "))
Line no.13=> WorkingTime = int(input("What is total walking time of this month? "))
Line no.14=> TotalSalary = str(hourly_income * WorkingTime)
Line no.15=> except:
Line no.16=> print(sys.exc_info())
Line no.17=> else:
Line no.18=> myfile_o.write("Name : " + name)
Line no.19=> myfile_o.write("\nAge : " + age)
Line no.20=> myfile_o.write("\nlocation : " + location)
Line no.21=> myfile_o.write("\ngender : " + gender)
Line no.22=> myfile_o.write("\nTotalSalary : " + TotalSalary)
Line no.23=> print ("******************************************************")
Line no.24=> print ("Your data is successfully save in " + filename + ".txt")
Line no.25=> print ("******************************************************")
Line no.26=> finally:
Line no.27=> myfile_o.close()
Line no.28=> #########################################

ကဲ run ျကည့္က် စို ။့ အရင္ဆံုး error တက္ရင္ exception ကို handle လုပ္နုိင္ မလုပ္နို္င္ စမ္းျကည့္
က် ရေအာင္။ data ကို အမွားေလးေတြထည့္ ျကည့္က် ရေအာင္။

Line no.12 အရ ၀င္လာမယ့္ input သည္ integer ျဖစ္မွ အဆင္ေျပမွာပါ။ character string ကို
integer ေျပာင္းလု့ ိ အဆင္မေျပပါဘူး .. error တက္တဲ့အတြက္ except: block ကို ေရာက္ျပီးေတာ

ValueError ဆုိတ့ ဲ result ထြက္လာပါေတာ
့ တယ္။

130
http://crossnetmm.com/

Run လိုက္တဲ့အခ်ိန္က် user ဆီက input ေတြ ယူျပီး save လိုက္ျပီး ဆိုတဲ ့ result ကို ေတြ ရ
့ ပါမယ္။
အဲ့ေ တာ့ save ထားတဲ့ ဖုိင္ေလးကို သြားဖြင့ျ္ ကည့္က် ရေအာင္။

ဒီေလာက္ဆုိရင္ေတာ
့ Exception Handling ကို အေတာ
္ ေလး သေဘာေပါက္ျပီ ထင္ပါတယ္။ ေနာက္တစ္ခ
န္း ဆက္က် ပါစို ။့

9. Python - Function

က် ြန္ေတာ
္ တုိ ေ
့ တြ အျကိမ္ ျကိမ္ လုပ္ရမယ့္ အလုပ္ေတြကို ဟိုးအေရွ မ
့ ာွ တုန္းက loop ပါတ္ျပီး ေရးခဲ့
က် တယ္ေလ.. အဲ့လိုမ်ိဳးပဲ.. အျကိမ္ျကိမ္ run ရမယ့္ ကုတ္ေတြကို စုျပီး Function ေတြခြဲေရးက် ပါမယ္။ ဘာလိ့ ု
လဲဆုိေတာ
့ code ေရးရတာ မ်က္စိရွင္းမယ္ သူ သ
့ က္ဆုိင္ရာ အစုေလးနဲ သ
့ ူရွိေတာ
့ tshoot လုပ္ရတာ error
trace လိုက္ရတာလြယ္တယ္။ ျပီးေတာ
့ function ကို ေခၚလိုက္ယံုနဲ f့ unction မွာ define လုပ္ထားတဲ့
code ေတြက အလုပ္ လုပ္သြားမွာျဖစ္လို ့ .. လူသက္သာတယ္။ စသည္ျဖင့္ေပါ့ေနာ္.. ကုတ္ေရးရင္း လက္ေတြ
့ေလ့လာျကည့္က် ရေအာင္။

ခု က် ြန္ေတာ
္ တု့ ေတြ
ိ လက္ရွိသံုးေနတဲ့ print() တုိ i့ nput() တုိ သ
့ ည္ python မွာ Built-in ပါေနတဲ့
function ေတြပဲ ျဖစ္ပါတယ္။ အဲ့ function အျပင္ ကိုယ့္စိတ္ျကိုက္ ကုတ္ေတြနဲ က
့ ုိယ္ဖာသာ function ေတြ
ဖန္းတီးတာကို user-defined function လုိ ေ
့ ခၚတာပါ။

9.1 User Defined Function

131
http://crossnetmm.com/

Function တစ္ခုကို define လုပ္ေတာ


့ မယ္ဆုိရင္ …
● def ဆုိတ့ ဲ keyword ေနာက္မွာ ကိုယ္လုပ္မယ့္ function နာမည္ေရးရမယ္။ ( ) ပါရမယ္။
● အဲ့ ကြင္းစ ကြင္းပိတ္ထဲမွာ .. function အတြက္ ထည့္ခ်င္တ့ ဲ parameter/argument ကို ထည့္လိုရ
တယ္။
● : (full column)ေရးျပီး ေနာက္တစ္ေျကာင္းဆင္းရင္ indentation level ကို တူေအာင္ထားပါ။ tab
တစ္ခါခုန္ရင္လဲ function block ထဲမွာ ရွိမယ့္ code ေတြကုန္သည္ indentation level တူေအာင္
tab တစ္ခါ ခုန္စာဆီ ျခားရမွာပါ။
● function ရဲ ပ
့ ထမဆံုး စာေျကာင္းသည္ optional ပါ။ ေျပာခ်င္တာက ဒီ function သည္ ဘာကို လုပ္
တဲ့function ျဖစ္တယ္။ ဒါမွမဟုတ္ တစ္ခုခုေပါ့ function နဲ ပ
့ ါတ္သက္တဲ ့ document လုိ ေရးတာ
ပဲ ျဖစ္ျဖစ္ စသည္ျဖင့္ ေရးလို ့ ရပါတယ္။
● return ျပန္တ့ အခါက
ဲ ် function သည္ ထြက္သြားပါတယ္။ return ပဲ ေရးထားတယ္ ေနာက္က ဘာ
မွ မပါဘူးဆုိရင္ return null ျပန္ပါတယ္။

ေ အ ာ က္ က ေ တ ာ့ user-defined function အတြက္ syntax ပံုစံကို ေရးျပေပးထားတာပါ။


def function_name(parameters):
"""Docstring"""
statement(s)
return

Function ေလး တစ္ခု ေလာက္ တည္ေဆာက္ျကည့္က် ရေအာင္။

def printHW() ဆုိျပီးေတာ


့ printHW ဆုိတ့ ဲ function ကုိ defined လုပ္လိုက္ပါတယ္။ အဲ့
function က ဘာကို လုပ္ေဆာင္ေပးမွာလဲ ဆုိေတာ
့ print(“Hello, world!”) ဆုိျပီး Hello, world ထုတ္ေပး
ဖုိ ပ
့ ါ။ ခုက function printHW() ကို python က သိေအာင္ပဲ defined လုပ္ထားတာပါ။ ေခၚ ျပီး မသံုးမခ်င္း
အလုပ္ မလုပ္ မပါဘူး.. line no.5 မွာ printHW() ဆုိျပီး function ကို ေခၚလိုက္မွ အလုပ္စလုပ္ျပီး hello,
world ကို print ထုတ္ေပးတာပါ။

9.2. Python Function Argument

132
http://crossnetmm.com/

User-defined Function ဆိုတ့ အတိ


ဲ ုင္း ကိုယ္စိတ္ျကိုက္ ကိုယ္ေရးမယ္ program နဲ က
့ ိုက္ေအာင္ ဖ
န္တီးတာျဖစ္လို .့ . Function ခ်ည္း သက္သက္ ရွိေနတာရွိမယ္။ ဒါမွမဟုတ္ function ေနာက္ ( ) မွာ data ပို့ဖို
့argument ေတြ သက္မွတ္ေပးတာမိ်ဳး ေတြ ရွိပါမယ္။ argument ထည့္တဲ့ ပံုစံေပၚမူတည္ျပီး အမ်ိဳးအစား ေ
လးေတြ ကြဲ ပါတယ္။ ေအာက္မွာ ေလ့လာျကည့္လိုက္က် ရေအာင္ ဗ်ာ ။

9.2.1 Required arguments

function မွာ data ေလးေတြ ထပ္ထည့္ျကည့္က် ရေအာင္။ ခု ဒီ ဥပမာမွာက် ေတာ


့ printHW() မွာ
var1 ဆုိတ့ ဲ input parameter လက္ခံမယ့္ ေနရာတစ္ခု ထည့္ထားပါတယ္။ အဲ့အတြက္ function ကို လွမး္
ေခၚတဲ့အခ်ိန္မွာ input ထည့္ျပီး ေခၚရပါမယ္။ line no.5 မွာ printHW(“Hello”) လို ေရးထားတဲ့ အတြက္
printHW() function ကို ေခၚတဲ့ေနရာမွာ var1 = Hello ကို function ဆီ ပို့လြတ္လိုက္ပါတယ္။ print
(var1 + “, world”) ျဖစ္တ့ ဲ အတြက္ Hello, world ဆိုတ့ ဲ result ထြက္လာတာပါ။ line no.6
printHW(“Hi”) အတြက္က် Hi, world ဆိုတဲ ့ result ထြကလာပါလိမ့္မယ္။

ဒီတစ္ခါက် ေတာ
့ function မွာက return ျပန္ရင္ function ကေန ထြက္သြားတယ္ ဆုိတာကို လ
က္ေတြ သ
့ ိေအာင္ စမ္းေရးျကည့္ပါ။ ေအာက္က ကုတ္မွာဆုိရင္ return ရဲ ေ
့ ပၚမွာေကာ ေအာက္မွာေကာ
print ထုတ္ထားပါတယ္။ line no.3 ကို print ထုတ္ျပီး line no.4 က return ျဖစ္တာမို ့ function က ေ န
ထြက္သြားျပီ ျဖစ္လို ့ line no.5 က print သည္ ထြက္မလာေတာ
့ ပါဘူး… လက္ေတြ စ
့ မ္းေရးျကည့္ပါ။

Function ေတြ့ရဲ .့ . First line မွာေရးထားတဲ f့ unction document ကို ဖတ္ခ်င္တယ္ ဆုိရင္ေတာ

FunctionName.__doc__ ပဲ ျဖစ္ပါတယ္။

133
http://crossnetmm.com/

ေနာက္ထပ္ example တစ္ခု နဲ .့ . ထပ္ျပီး ေလ့လာျကည့္ပါ။ ခု ေအာက္က code ေတြမွာ ဆုိ function အတြ
က္ argument နွစ္ခု လိုပါတယ္။ fucntion ကို ေခၚတဲ့အခါမွာ data တန္ဖိုး နွစ္ခုနဲ ပ
့ ဲ.. အစီအစဥ္ တက် ေခၚမွ
ရမွာပါ။

ခုတုိင္းဆုိရင္ေတာ
့ Hello Monica, Good morning! ဆိုတ့ ဲ စာသားထြက္လာမွာပါ။ greet() ကို ေခၚ
တဲ့ အခ်ိန္မာွ variable data တန္ဖုိးက တစ္ခုပဲ ရွိေနခဲမ
့ ယ္ ဆုိရင္ေတာ
့ error တက္ပါလိမ့္မယ္။

ေအာက္မွာ ေနာက္ထပ္ example တစ္ခုပါ run ျကည့္ပါပါ။ function ကို ေခၚလိုက္တဲ့ အခ်ိန္မာွ ရလာတဲ့
data ကို တြက္လိုက္ျပီး return ျပန္ေပးတဲ့ ပံုစံပါ။

134
http://crossnetmm.com/

9.2.2. Keyword Argument

Keyword Argument ေတြသည္ function call ေခၚတဲ့ေနရာမွာ argument လြဲတာ အစီအစဥ္ မက်
ျဖစ္တာမ်ိဳး မရွိေအာင္ လုပ္ေဆာင္ေပးပါတယ္။။ ဒီေနရာ မွာ တစ္ခု မွတ္ထားရမွာကေတာ
့ function call လုပ္
တဲ့အခါမွာ သံုးတဲ့ argument နာမည္နဲ f့ ucntion မွာ define လုပ္ခတ
ဲ့ ့ ဲ parameter နာမည္ကေတာ
့ တူရပါမ
ယ္။

အေပၚက ကုတ္ကို execute လုပ္လိုက္တဲ့အခ်ိန္မွာ.. ေအာက္ပါအတိုင္း result ကို ရပါလိမ့္မယ္။

9.2.3. Default Argument

Default argument ဆုိတာကက် ေတာ


့ function call လုပ္လိုက္တဲ့အခ်ိန္မွာ data value မပါလာ ခဲ့
ရင္ default အေနနဲ ထ
့ ည့္သံုးမယ့္ ေကာင္ကို ေခၚတာပါ။ ခုေအာက္က example မွာဆို Line no.9 မွာက
age ေကာ name ေကာ မွာ data ထည့္ေပးထားတဲ့ အတြက္ Name: miki Age 50 ဆိုျပီး ထြက္လာမွာပါ။
Line no.10 မွာက် ေတာ
့ name တစ္ခုပဲ ပါတာမို ့.. Function ကို define လုပ္စဥ္က သတ္မွတ္ထားတဲ့
default age ကို ယူသံုးသြားပါတယ္။ အဲ့တာေျကာင့္ result သည္ Name: miki Age 35 ဆိုတ့ ဲ အေျဖကို
ရပါတယ္။

135
http://crossnetmm.com/

9.2.4. Python Arbitrary Arguments

ခုထိေရးလာတဲ့ function ေတြမွာ ပါတဲ့ argument ေတြသည္ အေရအတြက္ အတိအက် ပါပါတယ္။


တစ္ခါတစ္ေလက် function မွာ ရွိနိုင္မယ့္ argument ေတြကို ျကိဳတြက္လို မ
့ ရတာမ်ိဳးမွာဆုိရင္ Python မွာ
ဘာလုပ္လ့ ရမလဲ
ို ဆိုေတာ
့ parameter name ေရွ မ
့ ွာ * ေလးခံျပီးေရးေပးရပါတယ္။ အဲ့လိုေရးေပးတာကို
arbitrary argument လိ့ ေခၚပါတယ
ု ္။

အေရအတြက္ ျကိဳမသိနုိင္တ့ ဲ argument ေတြကို handle လုပ္မယ္ Python function ေလး တစ္ခု
ကို arbitrary argument ေတြသံုးျပီးေတာ
့ define လုပ္ျကည့္က် ရေအာင္ဗ်ာ ။။

Def ကို သံးု ျပီးေတာ


့ greet function ကို တည္ေဆာက္ထားပါတယ္။ () ထဲမွာတာ
့ *names ဆိုျပိးေတာ

arbitrary argument ကို သံုးထားပါတယ္။ line no.8 greet("Monica","Luke","Steve","John") ဆိုျပီးေ
တ ာ့ function ကို လွမ္းေခၚလိုက္တဲအခ်ိန္မွာ အေနာက္က argument ေတြသည္ function ထဲ ကို tuples
အေနနဲ ့ ၀င္သြားပါတယ္။ အဲ့ေနာက္ for loop ပါတ္ျပီးေတာ
့ tuple names ထဲေကာင္ေတြ မကုန္မခ်င္း print
ထုတ္ေပးသြားတာပါ။

136
http://crossnetmm.com/

9.2.5. lambda functions in Python

ပံုမွန္ function မ်ိဳးမဟုတ္ပဲ.. တစ္ခါသံုး function မ်ိဳး ျပီးေတာ


့ expression တစ္ခု ေလာက္ပဲ ရွိနုိင္
တဲ့ function မ်ိဳးဆုိ lambda function အေနနဲ သ
့ ံုးလုိ ရ
့ ပါတယ္။ ပံုမွန္ function သံုးရင္လဲ ျဖစ္တယ္ေနာ္..
ကိုယ္စိတ္တုိင္းက် code ကို ခ်ယ္လွယ္ပါ။ ေရးရင္နဲ အ
့ သံုး၀င္ပံုကို ျမင္လာပါလိမ့္မယ္။ စစခ်င္း အမ်ားျကီး ေျပာ
ရင္ လည္သြားပါလိမ့္မယ္။

Lambda function ကို anonymous function လိုလဲ ေခၚက် ပါတယ္။ ဘာလိ့ လဲ


ု ဆုိေတာ
့ သူ မ
့ ွာက
function name မပါတဲ့ အတြက္ ေျကာင့္ပါ။ ပံုမွန္ function ကို define လုပ္ဖုိ ့ def [FunctionName] ကို
သံုးခဲက
့ ် ပါတယ္။ anonymous function မွာက် ေတာ
့ def ကို မသံုးပဲ lambda ဆိုတ့ ဲ keyword ကိုပဲ သံုးျပီး
defined လုပ္တာပါ။ Lambda မွာ argument မထည့္လဲ ရတယ္။ တစ္ခုထက္မက ထည့္လဲ ရပါတယ္။ ဒါေပ
မယ္ ့ expression အေနနဲ က
့ ေတာ
့ တစ္ခုပဲ ရွိလ့ ရပါတယ
ို ္ ။ lambda function မွာ variable ကို assign လု
ပ္ေပးစရာမလိုပဲ တန္းသံးု လိ့ လဲ
ု ရပါတယ္။ Lambda ရဲ s့ yntax ကေတာ
့ ေအာက္ပါ အတုိင္းပဲ ျဖစ္ပါတယ္။

lambda [arg1 [,arg2,.....argn]]:expression

ခုအေပၚက ပံုမွာဆို lambda function ကို တန္းေခၚသံုးလိုက္တာပါ။ အဲ့လိုမဟုတ္ပဲ variable


object တစ္ခု lambda function အတြက္ တည္ေဆာက္ျပီး သံုးလဲရပါတယ္။ traditional def function နဲ
့ ဆင္ပါတယ္။

R ဆိုတ့ ဲ function object တစ္ခု တည္ေဆာက္လိုက္ပါတယ္။ အဲ့ေနာက္ r ဆိုတဲ ့ object ထဲကို


argument ေတြထည့္လိုက္တဲ့ အတြက္ x*y ဆိုတ့ ဲ expression အရ result သည္ 36 ရပါတယ္။ ေအာက္
မွာ traditional function နဲ ့ anonymous function ကို နွိဳင္းယွဥ္ေပးထားပါတယ္။ အရမ္း ကို ကြဲကြဲ ျပားျ

137
http://crossnetmm.com/

ပား သိဖုိ က
့ ေတာ
့ python ထဲကို ထဲထဲ၀င္၀င္ ေရးတာျကာမွ ပိုျပီး သိျမင္လာပါလိမ့္မယ္။ ေလ့လာခါစမွာ အရ
မ္းျပီး pressure ထားျပီး မေလာပါနဲ ။့ ။ ခုေတာ
့ စမ္းျကည့္လိုက္ပါဦး.. ;-)

9.3 Python recursive function

Python ရဲ f့ unction ေတြသည္ function ထဲမွာ တစ္ျခား function ထပ္ေခၚလို ့ ရပါတယ္။ အဲ့လို ေ
ခၚလိ့ ရတယ
ု ္ ဆိုတ့ ဲ ေနရာမွာ .. သူ့ ကိုယ္ သူလဲ ျပန္ေခၚနုိင္ပါတယ္။ အဲ့လို ကိုယ့္ကိုကိုယ္ ျပန္ေခၚတာကို
function recursive လုပ္တယ္လို ေ
့ ခၚပါတယ္။

ခုေအာက္က example မွာဆုိ သခ်ၤာထဲက factorial ရွာတဲ့ ပံုေသနည္းကို recursive funcion သံုးျ
ပီးေတာ
့ ေရးထားပါတယ္။ factorial မွာ.. ရွာမယ္ ဂဏန္းတစ္ခု ရွိတယ္.. အဲ့က ကိနး္ ဂဏန္းကို တစ္ နွဳတ္လို
က္ ေျမွာက္လိုက္… တစ္နွဳတ္လိုက္ ေျမွာက္လုိက္နဲ ့.. ၁ ကို ေရာက္တဲ့ အထိလုပ္ သြားရမွာပါ။ ၁ကို ေရာျပီး နွဳ
တ္စရာ မက် န္ေတာ
့ ဘူးဆုိမွ .. final result ကို ရပါတယ္။ ကိန္း သည္ 4 ဆုိပါစို ။့ 4 * 3* 2* 1 ဆုိတ့ ဲ အတြ
က္ 24 ရပါတယ္။ ေအာက္ကုတ္ကို run ျကည့္ပါ။

Line no.9 မွာ num = 4 ဆုိျပီး ေျကညာထားပါတယ္။ line no.10 မွာ calc_factorial(num) ဆုိျပီး
function ကို ေခၚလိုက္ပါတယ္။ သူမာွ condition စစ္တဲ ေ
့ နရာရွိပါတယ္။ if x == 1 ျဖစ္လား တစ္ နဲ ့ ညီ ျ

138
http://crossnetmm.com/

ပီလား ဆုိတာကို စစ္ပါတယ္။ ညီခရ


ဲ့ င္ return 1 ဆုိျပီး ထြက္သြားမွာပါ ဆက္မလုပ္ေတာ
့ ပါဘူး.. 1 နဲ မ
့ ညီ မခ်
င္း.. else: က x* calc_factorial(x-1) ဆိုျပီး

calc_factorial(4) # ပထမအျကိမ္မွာက 4 ပါ
4 * calc_factorial(3) # ဒုတိယ အျကိမ္ က် ေတာ
့ 1 နွဳတ္တဲ့အတြက္ 3 ပါ
4 * 3 * calc_factorial(2) # သံုးျကိမ္ေျမာက္က် လဲ 1 ထပ္ႏွဳတ္တဲ့အတြက္ 2 ပါ
4 * 3 * 2 * calc_factorial(1) # ေလးျကိမ္ေျမာက္မွာေတာ
့ ၁ ျဖစ္သြာပါျပီး
4*3*2*1 #ခုလိုရလာတဲ ့ ေကာင္ေတြအကုန္ေျမွာက္ျပီး return ျပန္ပါတယ္။

ရမယ္လို ေ
့ မွ်ာ္လင့္ပါတယ္။ တစ္ခါလုပ္ျကည့္လို န
့ ားမလည္ရင္ step by step function call ကို ခ်ေရးျပီး ေ
လ့လာျကည့္ပါ။ စာလို ေရးရတာဆုိေတာ
့ အတတ္နုိင္ဆံုး နားလည္ေအာင္ေတာ
့ ေရးေပးထားပါတယ္။ စာသင္ခ
န္းလိ့ မဟု
ု တ္ေတာ
့ ေကာင္းေကာင္းနားမလည္မွာ ဆုးိ လိ့ ပါ။

ဒီေနရာမွာ Python basic ကို တစ္ခန္း ရပ္ျပီး Network script ဘက္နဲ N


့ etwork lab setup ဘက္လွည့္
က် ဦးစို ။့

10. Intro OSI 7 Layer

139
http://crossnetmm.com/

Open Systems Interconnection model (OSI model) ကို Computer system ေတြႀကားမွာ
error-free

communication ျဖစ္ေစဖုိ့ International Organization for Standardization (ISO) က သတ္မွ


တ္ခဲတ
့ ာပါ.

ဘယ္လိုေႀကာင့္လဲ ဆိုေတာ
့ .. ကြန္ပ်ဴတာ ထုတ္တဲ့ company ေတြ အမ်ားႀကီးရွိသလုိ ကြန္ပ်ဴတာေတြ
Netwrok

ေတြ အျပန္အလွန္ခ်ိတ္ဆက္ဖုိ့ device ထုတ္တဲ့ company ေတြ ကလဲ အမ်ားႀကီးပါ. မတူညီတ့ ဲ company
ေတြက

ထုတ္တဲ့ နည္းပညာ မတူတ့ ဲ device ေတြ ကႊန္ပ်ဴတာေတြ, Network ေတြ တစ္ခုန့ဲ တစ္ခု အျပန္အလွန္
ေခ်ာေခ်ာေမြ ေ
့ မြ ့

နဲ့ အခ်တ
ိ ္ အဆက္မိေစဖုိ့ စံသတ္မွတ္ေပးထားတဲ့ standard model တစ္ခု ခ်မွတ္ခဲတ
့ ာပါ. ေျပာရရင္ေတ့ာ
ဗ်ာ..

140
http://crossnetmm.com/

Computer ေတြ Node ေတြ တစ္ခုန့ဲ တစ္ခုႀကားမွာ သံုးမယ့္ physical media ေတြ Encrypting Type
ေတြ rule ေတြ

application ေတြ protocols ေတြ encoding/decoding စတာေတြကို သတ္မွတ္ေပးထားတဲ့ Standard


model

တစ္ခုျဖစ္ပါတယ္. OSI model မွာ Layer 7 ခုရွိပါတယ္.. အဲ့တာေတြကေတာ


့ …

10.1.Physical Layer

Pyhysical Layer ဆိုေတာ


့ OSI model ရဲ့ ပထမဆံုး layer ျဖစ္ပါတယ္.သူက data ေတြကိုBit အေနနဲ့
ပို့ပါတယ္. သူ့တာ၀န္က pin no, volt, dB(အလင္းျပင္းအား), cable (Twisted Pair, Coaxial Cable, Optical
Fiber), electrical/optical signal(on, off, 0, 1), frequency စတာေတြကို standard တစ္ခု သတ္မွတ္ေပး
ထားပါတယ္. ျပီးေတာ
့ signal timing ေျပာရရင္ Data singal တစ္ခု 0 ပိျု့ ပီးရင္ ေနာက္ Data Signal တစ္ခု 1 ကို
ခ်က္ခ်င္း ပို့လိုက္လိ့္ မရပါဘူ
ု း.. အခ်ိနအ
္ ပိုင္းအျခာ းတစ္ခု Nano second ပိုင္းေလာက္ႀကာသည္အထိ ေစာင့္ျပီးမွပို့မွ
ရပါမယ္. အဲ့သည္ Data signal ေတြႀကားႀကာခ်ိန္ေတြ ကိုလဲသက္မွတ္ေပးထားရပါတယ္.Transmitter နဲ့
Receiver ႀကား Signal Timing မတူရင္ Timing လြဲရင္ error တက္နုိင္ပါတယ္.

ျပီးေတာ
့ wireless device ေတြ အတြက္ဆုိရင္လဲ.. သံုးရမယ့္ Frequency(2.4Ghz, 5Ghz,.etc) ေတြ
ကို တူညီမွရပါမယ္ မတူညီခရ
ဲ့ င္ communicate လုပ္လ့ မရပါဘူ
ို း.. တစ္ခါ transmission mode ေတြျဖစ္တ့ ဲ
simplex, half duplex, full duple mode ေတြကလ
ို ဲ Physical Layer က define လုပ္ပါတယ္ လုပ္ေဆာင္တာ
ကေတာ
့ Session Layer ကလုပ္ေဆာင္ေပးပါတယ္. ေနာက္ျပီး Physical topology ေတြ ျဖစ္တ့ ဲ Bus, Mesh တု့ ိ
ring တု့ ကလဲ
ိ Physical Layer နဲ့ပဲ သက္ဆိုင္ပါတယ္. Physical Layer ရဲ့ အဓိက တာ၀န္ကေတာ
့ သူ့အထ
က္Layer ျဖစ္တ့ ဲ DataLink Layer ကေန ပိသ
ု့ မွ် data frame ေတြကို bit signal(0,1) ေတြ အေနနဲ့ ေျပာင္းလဲျ
ပီး ပို့ေဆာင္ေပးရျပီး ၀င္လာသမွ်ကိုလဲ လက္ခံယူျပီး datalink layer ကို frame ေတြအေနနဲ့ ျပန္လည္ပိုေဆာင္ေ
ပးပါတယ္.

141
http://crossnetmm.com/

10.2. Data Link Layer

DataLink Layer ကေတာ


့ OSI မွာ ဒုတိယေျမာက္ Layer ျဖစ္ျပီးေတာ
့ Physical Layer နဲ့ Network Layer
တု့ ိ အႀကားမွာ ရွိပါတယ္. သူက Data ေတြကို Frame တစ္ခု အေနနဲ့ ေျပာင္းျပီး ပို့ေဆာင္ေပးပါတယ္.အဓိက
တာ၀န္ကေတာ
့ sender နဲ့ receiver ႀကားက Network မွာ ရွတ
ိ ့ ဲ device ေတြႀကား data ပုိ့လုိက္ရင္ collision ျ
ဖစ္မျဖစ္ အရင္စစ္ပါတယ္ ျပီးမွ ok ျပီဆိုေတာ
့ မွ data စတင္ပို့ပါတယ္. ဥပမာ Sender A နဲ့ receiver D ႀကားမွာ
Device B နဲ့ C ရွတ
ိ ယ္ ဆုက
ိ ် ပါဆို. ပထမဆံုး sender A and devive B ႀကားမွာ collision ျဖစ္မျဖစ္ တစ္ခါ စစ္ပါ
တယ္ clear ျဖစ္မွ data ပို့ပါတယ္. တစ္ခါအဲ့လုိပဲ device B နဲ့ C ႀကားမွာလဲ စစ္ပါတယ္ clear ျဖစ္မွ data ပို့ပါတ
ယ္ ေနာက္ ဆက္စစ္ပါတယ္ device C နဲ့ receiver D ႀကားကို အဆင္ေျပမွ data ပို့ပါတယ္ ေျပာရရင္ ေနာက္ဆံု
လက္ခံမယ့္သူဆီ မေရာက္မခ်င္းလမး္မွာ ရွိသမွ် point to point ခ်တ
ိ ္ ထားတဲ့ segment တုိင္း အပိုင္းတုိင္းကိုစစ္ပါ
တယ္ collision ျဖစ္နုိငမ
္ ျဖစ္နုိင္ကို ျပီးမွ data ကိုပို့ပါတယ္.

142
http://crossnetmm.com/

သူမွာ SubLayer 2 ခုရွိပါတယ္ Media Access Control (MAC) Sublayer နဲ့ Logical Link Control
(LLC) Sublayer တု့ ိ ျဖစ္ပါတယ္. Logical Link Control(LLC) sublayer ကေတာ
့ point to point Node ေ
လးေတြႀကားမွာ logical connection တစ္ခု အရင္ ဖန္တီးေပးပါတယ္ ျပီေတာ
့ data ေတြ အဲ့ connection Link ေ
လးေပၚကသြားနုိင္ေအာင္ အသင့္ျပင္ေပးပါတယ္. Media Access Control Sublayer မွာ.. MAC
address(Layer 2 address, Physical address လိ့ လဲ
ု ေခၚပါတယ္) ကို သံုးျပီးေတာ
့ .. Frame ေတြကို Point
to Point Directly connected node ေတြ ႀကား ပို့ေဆာင္ေပးပါတယ္.္ Data Link Layer မွာ
synchronization, bit error detection/correction error control, and flow control စတာေတြ လုပေ

ဆာင္ပါတယ္. switch သည္ Layer 2 device ျဖစ္ပါတယ္..

10.3. Network Layer

OSI Layer ၇ဲ ့ ၃ ခု ေျမာက္ Layer ကေတာ


့ Network Layer ျဖစ္ပါတယ္ Network layer က data
packet ေတြရဲ႕ logical addressing(ဥမာ IP address) အခ်က္အလက္ေတြကို တာ၀န္ယူ ေဆာင္ရြက္ေပးပီးေ
တာ
့ အဲ့ဒိ packet ေတြကို သြားခ်င္တ့ ဲ (destination address) လိုရာခရီးေရာက္ ေအာင္ပို႕ေဆာင္ေပးပါတယ္.

143
http://crossnetmm.com/

သူရဲ ့ Function ေတြကေတာ


့ routing and Forwarding, addressing, internetworking, traffic problems
management (flow control), error handling, congestion control and packet sequencing တု့ ပဲ
ိ ျဖစ္ပါ
တယ္. သူ႔ရဲ႕အလုပ္လုပ္ပက
ံု ေတာ
့ packet တခု၀င္လာပီဆတ
ို ာနဲ႔ memory ထဲမွာ မွတ္သားသိမ္းဆည္း ထားတဲ့
routing table ကိုႀကည့္ျပီးေတာ
့ ၀င္လာတဲ့ Packet သြားရမယ့္ destination ရဲ့ logical address ကို ႀကည့္ျပီး
routing table ထဲမွာ ရွိခရ
ဲ့ င္ အဲ့ packet နဲ့ သက္ဆုိင္တ့ ဲ Network ကို ပို့ေဆာင္ေပးပါတယ္. ပို့ေဆာင္ေပးတဲ့ေန
ရာမွာ လဲ destination ကိုသြားနုိင္မယ့္လမ္းက တစ္ခုမကရွိေနရင္ Data Packet ေတြကို ျဖန့္ျပီးပို့ေဆာင္ေပးပါတ
ယ္. Network Layer မွာ သံုးတဲ့ protocol ေပၚမူတည္ျပီး packet ရဲ့ destination ကို သြားနုိင့မ
္ ယ္ လမ္းေႀကာ
င္း(Route) ကို ေရြးခ်ယ္ပံုခ်င္းမတူညီက် ပါဘူး. Logical address ေတြက same network မွာ computer တစ္လံုး
နဲ့ တစ္လံုးမတူရပါဘူး.. Network Layer မွာ သံုးတဲ့ logical address ကို TCP/IP သံုးထားတဲ့ network မွာဆုိ
IP address လု့ ေခၚပါတယ
ိ ္.

10.4. Transport Layer

ေနာက္တစ္ခက ့ Transport Layer ပါ. သူကေတာ


ု ေတာ ့ OSI model မွာ 4th layer မွာ တည္ရွိပါတ
ယ္. Transport Layer ကဘာေတြလုပ္ေဆာင္ေပးလဲဆုိေတာ
့ sender နဲ ့ receiver Node (logical end to
end Point) ေတြႀကား အျပန္အလွန္ ပိလ
ု့ ိုက္တဲ့ Dataေတြ ကို error-free ျဖစ္ေစဖုိ့. Sequence အတိုင္းအစဥ္လို

144
http://crossnetmm.com/

က္ျဖစ္ေအာင္ ဆံုးရွံဳးမွဳ(data loss) မျဖစ္ေအာင္ data ေတြကို အႀကိမ္ပို့မိတာမ်ိဳး(Data Duplication)မျဖစ္ေအာင္


လုပ္ေဆာင္ေပးပါတယ္.

ဘယ္လိုမ်ိဳးလဲဆုိေတာ
့ သူရဲ့ အေပၚ Layer ျဖစ္တ့ ဲ session layer က ပို့လိုက္တဲ့ data packet ေတြကို ေသးေ
သးေလးေတြျဖစ္ေအာင္ ပိုင္းလိုက္ပါတယ္(data units ရဲ့ size ကႀကီးေနမယ္ဆုိရင္ေပါ့) ျပီးေတာ
့ တစ္ျခားလိုအပ္
တဲ့ additional information ေလးေတြလိုက္ထည့္ေပးပါတယ္. ဘာ information ေလးေတြလဲဆိုေတာ
့ packet
တစ္ခုခ်င္းဆီမွာ ရွိတ့ ဲ date ရဲ့ byte အေရအေတြက္ေတြ, တစ္ျခား function information တစ္ခုဆီရဲ့ byte အေ
ရအတြက္ေတြ, အျပင္ျပီးေတာ
့ error control လုပ္ဖုိ့လဲ ထည့္ေပးထားပါတယ္. ဘယ္လို Error Control လုပ္တာ
လဲဆိုေတာ
့ sender နဲ့ receiver ႀကားမွာ data transfer လုပ္တ့ ဲ အခ်ိန္မွာ connection ေႀကာင့္ ဒါမွ မဟုတ္ ႀ
ကားခံ media တစ္ခုေႀကာင့္ data တစ္ခ်ိဳ ့ ပ်က္စီးေပ်ာက္ဆံုးတာမ်ိဳး, data သြားေနတဲ့ လမ္းေႀကာင္းမွာ တစ္စံုတစ္ေ
ယာက္က ၀င္ျပင္လက
ုိ ္ တာမ်ိဳးေတြ ကို သိနုိင္တ့ ဲ Method ေတြ သခ်ၤာ အေျခခံ တြက္နည္းပံုစံ ေတြန့ဲ တြက္ခ်က္ျ
ပီး sender က ပို့လိုက္တဲ့ data ေတြဟာ original အတိုင္းရွိမရွိကို စစ္ေဆးပါတယ္. Error Control ကို ႀကည့္ျပီး
စစ္ေဆးလိက
ု ္ လိ့္ ု original အတုိင္း မဟုတ္တဲ့ data packet ဆုိ အဲ့ data packet တစ္ခတ
ု ည္းကိုပဲ ျပန္ပို့ဖုိ့
request လုပ္ပါတယ္. အဲ့အခါက် ရင္ sender ဘက္က Transport Layer ကေန ျပန္လည္ပို့ေဆာင္ေပးပါတယ္.

Data ေတြကို ပို့တ့ ဲ ေနရာမွာ တစ္ဘက္နဲ့ တစ္ဘက္ end-to-end reliable ျဖစ္ဖုိ့ အတြက္ data လက္ခံရရွိျပီးတုင
ိ ္
receiver ကေန sender ကို data ရရွိေႀကာင္း (acknowledge ျပန္) ေျပာပါတယ္. အကယ္လိ့ ု receiver ဘက္ေ
န data လက္ခံ ရရွိေႀကာင္း ack မျပန္ဘူးဆုိ sender ကအခ်ိန္အတိုင္းအတာ တစ္ခုထိေစာင့္ျပီး ေနာက္တစ္ႀကိမ္
ထပ္ပို့ ပါတယ္( Retransmitting Data). ေနာက္တစ္ခုက Flow control ပါ ကၽြန္ေတာ
္ တု့ ိ data packet ေတြ
network အေပၚသြားတဲ့ အခါမွာ ႀကားမွာရွိတ့ ဲ router ေတြ switch ေတြ Gate way ေတြကို အဆင့္ဆင့္ျဖတ္ျပီး
သယ္သြားရပါတယ္. အဲ့လိသ
ု ြားတဲ့အခ်ိန္မွာ routerေတြ Gate-way ေတြႀကား သြားနုိင္တ့ ဲ speed ေတြ

145
http://crossnetmm.com/

bandwidth ေတြကို Learning လုပ္ ေလ့လာမွတ္သားျပီးေတာ


့ ဘယ္router နဲ ့ ဘယ္ႀကားဆုိ ဘယ္ေလာက္နွဳန္း
နဲ့သြား ဘယ္နဲ့ဘယ္ႀကားဆုိ ဘယ္ေလာက္သြားဆုိတာ မ်ိဳးကို Transport Layer ကေနထိန္းခ်ဳပ္လုပ္ေဆာင္ပါတ
ယ္. Transport Layer မွာ connection service ၂မ်ဳိ းသံုးပါတယ္ Connection-Oriented (TCP) နဲ့
Connectionless service (UDP) ပါ ဒီေလာက္ဆုိရင္ Transport layer အလုပ္လုပ္ပက
ံု ို သေဘာေပါက္ေလာက္

ပါျပီး. ;-)

CCNA (Routing & Switch) ခုမွ စလုပမ


္ ယ့္ သူေတြအေနနဲ ့ ခုေျပာခဲတ
့ ့ ဲ layer 4 ခုကို ေကာင္းေကာင္း သေဘာေ
ပါက္ဖုိ့

လုိပါတယ္။

146
http://crossnetmm.com/

10.5. Session Layer

Session Layer က ကြန္ပ်ဴတာ တစ္လံုးနဲ့ တစ္လံုးႀကားက Logical connection ကို control လုပ္ေပးပါ
တယ္. တစ္နည္းေျပာရရင္ machine တစ္ခုေပၚက application process တစ္ခု နဲ့ တစ္ျခား machine ေပၚက
application process တစ္ခုႀကား connection တစ္ခု(session တစ္ခု) စတင္ဖုိ့(establish), ထိန္းသိမ္းဖုိ့
(Maintain) နဲ့ data ေတြ ပို့လ့ ို ျ့ပီးသြားရင္ ဖ်က္သိမ္းဖုိ့ (terminate) လုပ္ေဆာင္ပါတယ္.ျပီးေတာ
့ အဲ့ connection
ကို simplex လား Half Duplex လား Full Duplex လား ဘယ္mode နဲ့ လုပ္ေဆာင္မယ္ဆုိတာကို session layer
ကဆံုးျဖတ္ပါတယ္. အဲ့သည့္ sessions ေတြ ကို dialogs လိ့ လဲ
ု ေခၚပါတယ္.

ဘာလု့ လဲ
ိ ဆုိေတာ
့ ကၽြန္ေတာ
့္ တု့ ိ လူေတြ ဖုန္းေျပာပံုန့ဲ session အလုပ္ လုပ္ပတ
ံု ူလ့ ပါ.
ို ဥပမာ.. လူတစ္ေယာက္(A)

ကေန ဖုန္းေခၚလိက
ု ္ လိ့ ု တစ္ျခားတစ္ေယာက္(B) ကဖုန္းကိုင္ျပီးရင္ ဖုန္းကိုင္လုိက္ေႀကာင္း စကားစေျပာလိ့ ရေႀကာင္
ု း

အခ်က္ျပတဲ့ အေနနဲ့ hello ဆုိျပီး လုပ္ပါတယ္ တစ္နည္းေျပာရရင္ session establish လုပ္တယ္ေပါ့ဗ်ာ.. Hello လု
ပ္ျပီး establish လုပ္လက
ို ္ တာလဲ တစ္ဘက္နဲ့တစ္ဘက္ စကားစေျပာက် ေတာ
့ တာပဲ(Data transfer လုပ္တယ္ေ

147
http://crossnetmm.com/

ပါ့) အဲ့ေတာ
့ စကားလဲ ေျပာစရာမခ်န္ေတာ
့ ဘူးဆုိေတာ
့ မွ ဒါပဲေနာ္ ဆုျိ ပီး ဖုန္းခ်တယ္ေလ. အဲ့တာ session
terminate လုပ္လိုက္တာေပါ့ဗ်ာ. . Follow ကေတာ
့ အတူတူပါပဲ

;-) အဲ့ေလာက္ဆုိ session layer အလုပ္ လုပ္ပက


ံု ို ျမင္ေလာက္ျပီလ့ ို ယံႀု ကည္ပါတယ္..

10.6. Presentation Layer

Presentation Layer- ကဘာေတြလုပ္နုိင္လဲဆုိေတာ


့ .. application Layer ကေန ပိလ
ု့ ိုက္တဲ ့ data ေ
တြကို sender ဘက္ျခမ္းကေန မပို့ခင္မွာ Network ထဲမွာ သြားလာနိုင္တ့ ဲ Format ေျပာင္းေပးပါတယ္ Encode
လုပ္တယ္လိ့ လဲ
ု ေခၚပါတယ္ (Character code translation>> from..ASCII to EBCDIC) ဥပမာေျပာရင္ ဒီဘ
က္က sender မွာ သံုးတဲ့ Character code(Data Representation) က ASCII (American Standard
Code for Information Interchange) ျဖစ္ျပီး ဟိုဘက္တစ္ျခားဘက္ျခမ္းက receiver မွာ သံုတ့ ဲ Character
Code က EBCDIC (Extended Binary Coded Decimal Interchange Code) ျဖစ္ေနနုိင္ပါတယ္..

148
http://crossnetmm.com/

Presentation Layer က sender ဘက္က ASCII code ေတြကို Network ထဲမွာသြားလု့ ရမယ
ိ ္ format ေျပာ
င္းျပီး dataေတြကို ပို့လိုက္ပါတယ္(encoding လုပ္တယ္လု့ ေခၚပါတယ
ိ ္ ) အဲ့ပုိ့လက
ို ္ တဲ့ dataေတြကို လက္ခံတ့ ဘက
ဲ ္ျ
ခမ္းမွာ ရွိတ့ ဲ Presentation Layer ကေနျပီးေတာ
့ EBCDIC code ကို ေျပာင္းလဲေပးပါတယ္ (decoding လုပ္တ
ယ္လိုေခၚပါတယ္). Encoding တစ္ဘက္နဲ့ တစ္ဘက္ သံုးတဲ့ Mechanism ေတြကတူခ်င္မွတူပါလိမ့္မယ္..

ေနာက္တစ္ခက
ု ေတာ
့ ကၽြန္ေတာ
္ တု့ ိ data ေတြ ဟုဘ
ိ က္ကေန ဒီဘက္ကို transfer လုပ္တ့ ဲ အခ်ိန္မွာ secure ျဖ
စ္ေစဖုိ့ Encryption လုပ္တာကလဲ Presentation Layer ကေနလုပ္ေဆာင္ေပးတာျဖစ္ပါတယ္. ဟိုဘက္ ဒီဘက္
Encryption Decryption လုပ္တ့ ဲ စနစ္က တူညီဖုိ့လိုပါတယ္ ေျပာရရင္ Encode/Decode လို ကြဲျပားလိ့ မရပါဘူ
ု း.
ေနာက္ Presentation Layer ကေနလုပ္ေပးနုိင္တ့ ဲ တစ္ခ်က္ကေတာ
့ Compression/Decompression ပါပဲ.. ကၽြ
န္ေတာ
္ တု့ ေတြ
ိ data ကို network တစ္ေလွ
် ာက္မပုိ့ခင္မွာ Data ကို compress လုပ္ပါတယ္ compress လုပ္လုိ
က္ေတာ
့ Size ေသးးသြားတာေပါ့ size ေသးေတာ
့ ျမန္ျမန္ transfer လုပ္လ့ ရတာေပါ
ုိ ့ ဗ်ာ.. ဟိုဘက္တစ္ျခားဘ
က္ေ၇ာက္ေတာ
့ က် မွ ရလာတဲ့ data ကို decompress ျပန္လုပ္လိုက္မွသာ original အတိုင္းျပန္ရမွာပါ့.. အက် ဥ္းျခံဳး
ေျပာရရင္ေတာ
့ ဗ်ာ.. data ကိုမပုိ့ခင္မွာ ပထမဆံုး encode လုပ္လုိက္ပါတယ္ ျပီးေတာ
့ security အတြက္ encode
လုပ္ထားတဲ့ data ကုိ encrypt လုပ္ပါတယ္. ျပီးေတာ
့ network ေပၚမွာ ပို့ရတာျမန္ေအာင္ data size ႀကီးမေနေ
အာင္ compress လုပ္လက
ုိ ္ ပါတယ္. အဲ့လိလ
ု ုပ္ျပီးေတာ
့ မွ ပို့လိုက္ပါတယ္. လက္ခံတ့ ဘက
ဲ ္ ျခမ္းမွာက် ေတာ
့ ရလာတဲ့
data ကို ပထမဆံုး decompress အရင္လုပ္ပါတယ္. Original အတုိင္းရျပီဆုိမွ decryption ျပန္လုပ္ပါတယ္. ျပီး
မွ မွန္ကန္တ့ ဲ format နဲ့ data ကို decode ျပန္လုပ္ပါတယ္.. ကဲအ့ တာကေတာ
ဲ ့ presentation layer ရဲ့ အလုပ္
လုပ္ပံုျဖစ္ပါတယ္.

149
http://crossnetmm.com/

10.7. Application Layer

Application Layer ကေတာ


့ ကၽြန္ေတာ
္ တု့ ိ user ေတြန့ဲ အနီးကပ္ဆံုး Layer ျဖစ္ျပီး User ေတြန့ဲ
ေ အ ာ က္ က Layer ေတြႀကားမွာ interface တစ္ခုအေနနဲ့ လုပ္ေဆာင္ေပးပါတယ္ ..သူက ဘာေတြဘယ္ေတြ
မွာလုပ္ဆာင္ ေပးလဲ ဆုိေတာ
့ အဓိကအားျဖင့္ end-user process ေတြန့ဲ software application ေတြႀကား
မွာလုပ္ေဆာင္ေပးပါတယ္.

ဒီေနရာမွာ တစ္ခုေျပာျပခ်င္တာက application Layer ဆုိတာ ကၽြန္ေတာ ္ တု့ ေတြ


ိ သံုးေနတဲ့ software
application ေတြကိုဆုိလိုတာမဟုတ္ပါဘူး.. ကၽြန္ေတာ ္ တိ့ ေတြ
ု networkေတြကိုျဖတ္ျပီး data ေတြပို့ မယ္
ဆုိေတာ့ က် မွ application layer protocol ေတြကတစ္ဆင့္လုပ္ေဆာင္ေပးတာပါ.. ပိုျပီးရွင္းသြားေအာင္ ဥပ
မာေျပာရရင္ ကၽြန္ေတာ ့္ တု့ ိ ေမးလ္တစ္ေစာင္ပို့မယ္ဆုိက ် ပါေတာ ့ အဲ့ေတာဆုိ Gmail(E-mail) စတဲ့ software
application တစ္ခုသံုးျပီးပို့လိုက္မယ္ ဆုိရင္ application layer protocol ျဖစ္တယ္တဲ့ SMTP(simple mail
transfer protocol) ကိုသံုးရပါတယ္. ကၽြန္ေတာ ္ တု့ ိ Web Page ေတြ ႀကည့္မယ္ web site ေတြသြားမယ္ဆုိ
ရင္ေတာ ့ Application Layer Protocol ျဖစ္တ့ ဲ HTTP(Hyper Text Transfer Protocol) နဲ့ သြားပါတ

ယ္. အဲ့တာ က ေ တ ာ့ Application Layer ရဲ့ အလုပ္လုပ္ပံုပါ

150
http://crossnetmm.com/

11. Cisco Lab basic

11.1 Cisco CLI Level

Lab စလုပ္လုပ္ခ်င္း ဒါမွမဟုတ္ ခုမွ စေလ့လာတဲ့ သူေတြ မွားတက္က် တာက ကိုယ္ဘယ္ mode ကို ေ
ရာက္ေနလဲ သတိမထားမိတာနဲ့.. Configuration command ေတြ mode မွားရိုက္တက္က် တာပဲ..

အဲ့ေတာ
့ မွတ္ထားရမွာက

switch> ဆုိ usermode သူက > sign ေလးနဲ ့

switch# ဆုိ enable mode လိ့ ု ေခၚတဲ့ privilege mode သူက # sign ေလးနဲ .့ .

switch(config)# ဒါကေတာ ့ # sign ေလးအျပင္


့ global configuration mode ပါ သူကေတာ
(config) ဆိုတာေလးပါ ပါပါတယ္။ ေနာက္တစ္ခါ interface တို l့ ine တို ့ vlan တု့ ထဲ
ိ ၀င္ရင္ sub
configuration mode ထဲကိုေရာက္ပါတယ္။ အဲ့က် မွ သူတုိ န
့ ဲသ
့ က္ဆုိင္တာကို ရိုက္လိ့ ရတာပါ။

ခုမွ စျပီး lab လုပ္တာဆုိေတာ


့ ကိုယ္တစ္ခုခု ရိုက္လုိက္ရင္ ဘာ ျဖစ္သြားမလဲ ေတြးပါ သတိထားျက
ည့္ပါ။ command ေတြက သူ့mode နဲ သ
့ ူ ရိုက္ရတာမ်ားပါတယ္။ အဲ့ေတာ
့ .. Mode မွားျပီး command ရိုက္မိရင္
ဘယ္လို error တက္မလဲ ဆုိမ်ိဳး ကို သတိထား ျကည့္ျပီး lab လုပ္သြားရင္ ေနာက္ပိုငး္ က် Lab လုပ္ရတာ လြ
ယ္သြားမွာပါ။

151
http://crossnetmm.com/

ပံုမွာ ျပထားတဲ့ အတိုငး္ exit နဲ့ဆုိ တစ္ဆင့္ခ်င္း ထြက္သြားမွ ျဖစ္ျပီး end/ ctrl+z ကုိနွိပ္ရင္ေတာ

enable mode ကို တန္းေရာက္သြားမွာပဲ ျဖစ္ပါတယ္။

11.2 Login Lab

ဒီေနရာမွာ တစ္ခုမွတ္ထားရမွာက login ဆိုတ့ ဲ keyword ရိုက္ဖုိ့ ေမ့တက္က် တယ္။ ကိုယ္က


Password {your password} ရိုက္က္ျပီး Login ဆိုတ့ ဲ command ရိုက္ဖုိ့ ေမ့ခရ
ဲ့ င္ ကိုယ္

152
http://crossnetmm.com/

device ကို ၀င္တ့ ဲ အခ်ိန္မွာ password ေတာင္းမွာမဟုတ္ပါဘူး.. အဲ့ေတာ


့ authentication လုပ္ေ
စခ်င္ရင္ Login ဆိုတာေလးကို မေမ့မေလ် ာ ့ ရိုက္ေပးဖုိ့ လိုပါတယ္။ login ဆိုတာေလးရိုက္မွ Login
၀င္တ့ အခ
ဲ ် ိန္မွာ Password ေတာင္းမွာပါ။

11.3 Intro to VLAN

VLAN ဆိုတ့ အတု


ဲ ိင္းပဲ Virtual LAN network ေတြ တည္ေဆာက္မယ့္ ေနရာမွာ သံးု မယ့္ feature တစ္ခု
ပါ။ ေျပာရရင္ေတာ
့ physical switch တစ္ခုမွာ logical switch (different network) ေတြ အမ်ားျကီးကို
isolateျဖစ္ေအာင္ ခြဲေပးလိုက္တဲ့ သေဘာပါပဲ..
အဲ့လို ခြဲျပီးသံုးေတာ
့ ဘာေတြေကာင္းလဲ ဆုိေတာ
့ VLAN တစ္ခုဆီတုိင္းသည္ different subnet
(different network) ျဖစ္တ့ အတြ
ဲ က္ broadcast Domain က သတ္သတ္ဆီ ျဖစ္သြားျပီ။ အဲ့အတြက္ေျကာ
င့္VLAN “A” မွာ ျဖစ္ေနတဲ့ Broadcast ေတြသည္ different network မွာ ရွိေနတဲ့ တစ္ျခား VLAN “B”
တု့ ိ VLAN “C” တု့ ကိ
ိ ု ေရာက္မွာမဟုတ္ပါဘူး။ အဲ့ အတြက္ေျကာင့္ performace အေနနဲ့လဲ ပိုေကာင္းလာပါတ
ယ္။
Different Network connect လုပ္မယ္ဆုိLayer 3 device ျဖစ္တ့ ဲ Router တု့ ိ Layer 3
switch တု့ လိ
ိ ုပါတယ္။ အဲ့ေကာင္ေတြသည္လဲပဲ broadcast packet ေတြကို forward လုပ္မေပးပါဘူး. သူ့
ဆီေရာက္လာတဲ့ broadcast packet ေတြကို drop လုပ္ပစ္လိုက္တာပါ။
ရံုးတစ္ရံုးမွာ Department ေတြရွိမယ္ ဆုိက် ပါစို.. HR dep, Finance dep, Sales dep, Engr dep,
IT dep .. စသည္ျဖင့္္ အဲ့လိ့ ုdepartment ေတြရွိမယ္ေပါ့.. အဲ့departmentေတြက computerေတြကို same
network ထဲမွာ ထားတာထက္ vlan ေတြ ခြဲျပီး သူ့ဆုိင္ရာ ဆိုင္ရာ domain(Dep) ေတြကို different
network အေနနဲ့ထားတာက ပိုေကာင္းပါတယ္။ Management လုပ္ရတာလဲလြယ္တယ္။ TShoot လုပ္ရ
တာလဲ ပိုေကာင္းတာေပါ့. ျပီးေတာ
့ same network တစ္ခုထဲမွာ အကုန္စုျပံဳထားတာထက္စာရင္ သူ့သက္ဆုိ
င္ရာ သက္ဆိုင္ရာ ေလးေတြကို different network အေနနဲ ထ
့ ားတာက security အရလဲ level တစ္ခုထိ
ေကာင္းပါတယ္။

153
http://crossnetmm.com/

ခုပံုကေတာ
့ Physical switch တစ္လံုးကိုမွာ VLAN ေတြခြဲျပီး ထား ထားပံုပါ။

154
http://crossnetmm.com/

VLAN (different Network) ေတြ connect လုပ္မယ္ဆုိ Layer 3 (IP) ကို router လုပ္ေပးနုိင္တ့ ဲ
Router လုိပါတယ္။ Router On a Stick Lab က် ရင္ လုပ္ရင္းနဲ ့ မ်က္စိထဲ ပိုျမင္လာပါလိမ့္မယ္။

Physical switch to switch ခ်ိတ္တဲ့ interfaceေတြသည္ Trunk ျဖစ္ဖုိ့လိုပါတယ္။ Trunk interface


ကမွ vlan ေတြကို tag လုပ္ျပီးသယ္နုိင္တာပါ။ tag မလုပ္ပဲ ဒီတုိင္းသယ္မယ္ဆို.. ဘယ္vlan ကလာလိ့ ု.. ဘယ္
ကိုသြားလဲ
သိေတာ
့ မွာ မဟုတ္ပါဘူး ဥပမာ vlan10(Blue)
အတြက္ ေပးထားတဲ့ port ကေနလာတဲ့ packet
ကို Trunk link (black) က ေ န switch to
switch သယ္မယ္ဆုိ အဲ့ packet ကို vlan 10 နဲ့
သက္ဆုိင္တယ္ ဆုိတာသိဖုိ့ encapsulation လု
ပ္ေပးမယ့္ protocol တစ္ခု လိုအပ္ပါတယ္။

အဲ့ protocol သည္..


ISL ဒါမွမဟုတ္ do1q ကိုသံုးရပါ
မယ္။ ISL သည္ cisco ရဲ ့ ကို
ယ္ပိုင္ protocol ျဖစ္ျပီး 802.1q
က ေ တ ာ့ IEEE ကပါ။ ခုေနာက္ပို
င္းေတာ့ Dot1q ပဲ ပါေတာ
့ တာကို
ေတြ့ရပါမယ္။

155
http://crossnetmm.com/

Dot1q မွာ native vlan ကို tag လုပ္ျပီးမသယ္ပါဘူး.. Native vlan ဆုိ
Untag ပါ။ default Native VLAN က VLAN 1 ပါ။

11.4 VLAN lab 1

ဒီLAB မွာ ပထမဆံုး console နဲ့login ၀င္ျပီး VLAN 10 ကို create လုပ္ပါ။ VLAN 10 interface
ကို management အတြက္ ip assign ေပးရမယ္။ interface fa0/1 ကို vlan 10 ထဲကို ထည့္ေပးရမယ္။ ျ
ပီးေတာ
့ laptop ကေနျပီး telnet က ေ န Login ၀င္ရမယ္။ အဲ့ေနာက္ host name, console password,
ssh/telnet password, enable password စတာေတြ config လုပ္ေပးရမယ္။ config ေတြကို save ခဲပ
့ ါ။

VLan Lab 1
To change the Host Name of Configure Privilege Mode / Enable
Switch To configure telnet password Password
Switch # configure terminal SW1 (config) # line vty 0 15 Configure privilege password
Switch (config) # hostname SW1 (config-line) # password SW1 (config) #enable password
SW1 zoom ccna
SW1 (config) # SW1 (config-line) #login SW1 (config) #enable secret zoom
To configure IP address on
Interface VLAN 10 SW1 (config-line) exit
To configure console
SW1(config)#vlan 10 password

156
http://crossnetmm.com/

SW1(config-vlan)#name Mgmt SW1 (config) #line console 0


SW1 (config-line) # password
SW1(config-vlan)#exit zoom
SW1 (config) # interface vlan
10 SW1 (config-line) #login
SW1 (config-if) # ip address
192.168.10.254 255.255.255.0 SW1 (config-line) #exit
SW1 (config-if) # no shutdown To save configuration on switch
SW1 # copy running-config
SW1 (config-if) #int fa0/1 startup-config
SW1 (config-if) #switchport
access vlan 10
SW1 (config-if) #end

11.5 VLAN lab 2

VLAN Lab 2
Configure and implement VLan

157
http://crossnetmm.com/

SW - Configuration SW2 — Configuration


SW1 #configure terminal SW2 # configure terminal
SW1 (config) # vlan 10 SW2 (config) # vlan 10 ္Vlan create လုပ္ပါ
SW2 (config-vlan) # name Create လုပ္ထားတဲ့ vlan ကိုနာမည္ေ
SW1 (config-vlan) # name SALES SALES ပးပါ
SW1 (config-vlan) #exit SW2 (config-vlan) #exit
SW (config) # vlan 20 SW2 (config) # vlan 20
SW2 (config-vlan) # name
SW1 (config-vlan) # name MKTG MKTG
SW1 (config-vlan) #exit SW2 (config-vlan) #exit
SW1 (config) # SW2 (config) #
SW1 (config) # interface range SW2 (config) # interface
fastethernet 0/1 -2 range fastethernet 0/1 -2
SW1 (config-if-range) # SW2 (config-if-range) # Interface mode ထဲကို ၀င္ပါ။
switchport mode access switchport mode access access mode ေျပာင္းပါ။
SW1 (config-if-range) # SW2 (config-if-range) #
switchport access vlan 10 switchport access vlan 10
SW1 (config-if-range) # exit SW2 (config-if-range) # exit Vlan ထဲကို interface ထည့္ပါ။
SW1(config) # SW2(config) #
SW (config)# Interface range SW2 (config) # interface
fastethernet 0/5 -6 range fastethernet 0/5 -6
SW1 (config-if-range) # SW2 (config-if-range) #
switchport mode access switchport mode access
SW1 (config-if-range) # SW2 (config-if-range) #
switchport access vlan 20 switchport access vlan 20
SW1 (config-if-range) # exit SW2 (config-if-range) # exit

Switch1 ရဲ့ vlan 10/20 မွာရွိတ့ ဲ PC ေတြကေန တစ္ျခားဘက္မွာရွိတ့ ဲ switch2 ရဲ့ VLAN10/20
က PC
ေတြကို ping ျကည့္ပါ။ ping လု့ ိ ရဦးမွာ မဟုတ္ပါဘူး..

####Verification######
#show interface fastethernet0/x switchport
#show vlan brief

158
http://crossnetmm.com/

Switch1 ရဲ ့ VLAN 10 ကေန Switch2 မွာရွိတ့ ဲ VLAN 10 ကိုသြားမယ္ ဒါမွာမဟုတ္ Switch1


ရဲ ့ VLAN 20 ကေန Switch2 မွာရွိတ့ ဲ VLAN 20 ကိုသြားမယ္ဆုိ switch-to-switch ခ်ိတ္
ထားတဲ့ interface သည္ မတူညီတ့ ဲ VLAN ေတြ ကို tag(encpasulation)လုပ္ျပီး သယ္သြားဖုိ့ အ
တြက္ Tunrk interface ျဖစ္ေနဖုိ့လိုအပ္ပါတယ္။

#ping PC to PC

#show interface fastethernet0/24 switchport


Switch#show interfaces fastEthernet 0/24 switchport
Name: Fa0/24
Switchport: Enabled
Administrative Mode: trunk
Operational Mode: trunk
Administrative Trunking Encapsulation: dot1q
Operational Trunking Encapsulation: dot1q
Negotiation of Trunking: On
Access Mode VLAN: 1 (default)
Trunking Native Mode VLAN: 1 (default)
Voice VLAN: none
Administrative private-vlan host-association: none

159
http://crossnetmm.com/

Administrative private-vlan mapping: none


Administrative private-vlan trunk native VLAN: none
Administrative private-vlan trunk encapsulation: dot1q
Administrative private-vlan trunk normal VLANs: none
Administrative private-vlan trunk private VLANs: none
Operational private-vlan: none
Trunking VLANs Enabled: All
Pruning VLANs Enabled: 2-1001
Capture Mode Disabled
Capture VLANs Allowed: ALL
Protected: false
Unknown unicast blocked: disabled
Unknown multicast blocked: disabled
Appliance trust: none

Switch#
#show interfaces trunk

Ping PC to PC from different VLAN..

12 Network Lab Setup

160
http://crossnetmm.com/

12.1 History of GNS3

ဟိုးအရင္ GNS3 မေပၚခင္တုန္းက ဆုိ တု့ ေတြ


ိ ဘာနဲ့ cisco router ေတြကို emulate လုပ္က် လဲ
ဆုိေတာ
့ dynamips ဆုိတ့ ဲ emulator ကို သံးု ျပီး run ရတယ္။ real device ေတြန့ဲ မဟုတ္ပဲ သူက PC ေတြ
မွာ Router ေတြIOS software Image ကို runျပီး lab စမ္းနုိင္ေအာင္ emulation လုပ္ေပးတဲ့ computer
program တစ္ခုေပါ့။ Cisco platforms 1700, 2600, 2691, 3600, 3725, 3745, and 7200 series
cisco router ေတြကို support ေပးပါတယ္။ ဒါမွဟုတ္ NS3 တု့ ိ ဘာတု့ လဲ
ိ ရွိေသးတယ္.. ကိုယ္ေတြ ေခတ္
က် အဲ့တာေတြနဲ စ
့ မ္းစရာမလိ့ ေတာ
ု ့ ဘူး.

ခု ဒီ Jeremy ဆုိတ့ ဲ ပုဂၢိဳလ္က သူ France မွာ မာစတာတက္တုန္း final year project အေနနဲ ့ စ
တင္ခတ
ဲ့ ာပါ။ hardware device ေတြန့ထ
ဲ က္ .. အခ်ိန္မေရြး real device ေတြန့ဲ lab လုပ္သလိုမ်ိဳး လုပ္လ့ ေ
ို
အာင္ စိတ္ကူးျပီး စတင္အေကာင္အတည္ ေဖာ္ခဲတ
့ ာ ခုဆို .. Network Engineerေတြအတြက္ အေတာ
္ ေလး
ကို အဆင္ေျပတဲ့ software တစ္ခုေပါ့။ GNS3 ကို python language ကိုအသံုးျပဳ ေရးသားထားျပီး GNU
General Public License ေအာက္မွာပါရွိတယ္။ သူသည္ opensource တစ္ခုျဖစ္တာမုိ့ သူ့ source code ေ
တြအကုန္လံုးကို github (https://github.com/GNS3/gns3-gui/releases)မွာ တင္ထားျပီး public မွာ
ရွဲထားပါတယ္။ contribue လုပ္ခ်င္တဲ ့ မည္သူမဆုိ ပါ၀င္လ့ ရပါတယ
ို ္။

161
http://crossnetmm.com/

ဒီေနရာ တစ္ခု သတိထားရမွာက cisco packet tracer သည္ simulation လုပ္ေပးတဲ့ tools တစ္ခု
ပါ။ တစ္ကယ့္ device ေတြန့ဲ lab ရသလိုမ်ိဳး ရေအာင္ အဆင္ေျပေအာင္ code ေရးထားတဲ့ software ေပါ့။
GNS 3 က်ေ တ ာ့ Graphical Network Emulator ဆုိေပးမယ္ ့ emulator (dynamips, QEMU, VM,
etc) ေတြသံုးျပီး IOS imag ေတြကို တစ္ကယ္ boot တက္ျပီး run ေပးတဲ့ emulator ေနာ္။ အဲ့ေျကာင့္ သူက
ram/cpu စားတယ္။

ကုိယ္သံုးရင္ သံုးသေလာက္ RAM ေတြ CPU ေတြကုန္မယ္။ ေျပာခ်င္တာက Device ေတြ မ်ားျကီးနဲ့
lab လုပ္မယ္ဆုိ RAM/CPU ျမင့္တ့ ဲ မ်ားတဲ့ စက္မွ အဆင္ေျပမယ္။ Packet tracer က် code ေတြ နဲ့
simulate လုပ္ေပးထားတာ ျဖစ္လ့ ို စက္အနွိမ့္ေလးေတြ Phone ေတြမွာပါ အဆင္ေျပတယ္။

12.2 Why window user Need Gns3VM

ကဲ ခု GNS3 ကို install လုပ္တာရယ္ သူ ရ


့ ဲ့ concept ေလးကို အရင္ေျပာျပမယ္။ Cisco Devices ေ
တြကို run မယ္ဆုိ GNS3 တစ္ခုထဲသံုးမလား။ ဒါမွမဟုတ္ GNS3 VM နဲ့ တြဲသံုးမလား။ GNS3 တစ္ခုထဲဆုိ
IOS ေတြကို သံုးရမယ္။ GNS3 VM( linux base) ဆိုရင္ေတာ
့ IOU (IOS On Unix) ကို သံးု လိ့ ရတဲ
ု ့ အတြ
က္ IOS ထပ္ CPU/RAM သံုးတာနည္းပါတယ္။ ျပီးေတာ
့ IOU မွာ က Layer 2 ကိုပါ စမ္းလိ့ ရပါတယ
ု ္ ။ ျပီးေ
တ ာ့ GNS3 vm သည္ အကုန္ လိုသမွ် IOU support, docker, qemu စတာေတြ အဆင္ ေျပေျပသံုးနုိင္ေ
အ ာ င္ pre config လုပ္ေပးထားတာပါ။ ubuntu 16.04 မွာ gns3VM လုိ pre config ရေအာင္ script နဲ့
run လို ရ
့ ေပမယ့္ window သမား Mac သမားေတြ အေနနဲ က
့ ေတာ
့ remote server ဒါမွ မဟုတ္ Gns3vm
သည္သာ အေကာင္းဆံုး option တစ္ခုပါ။

162
http://crossnetmm.com/

window user ေတြအေနနဲ ဆ


့ ုိရင္ေတာ
့ GNS3 VM ကိုတြဲ ျပီးသံုးေစခ်င္တယ္။ window သမားေတြေ
နနဲ က
့ GNS3 VM မပါရင္ IOU မရတဲ့အတြက္ layer 2 စမ္းလိ့ ု အဆင္ေျပမွမဟုတ္ပါဘူး။ ျပီးေတာ
့ GNS3
VM ကို run ဖုိ့ virtual emulator တစ္ခုလိုပါတယ္။ အဲ့အတြက္ VMware သံုးမလား Virtual box သံုးမ
လားေပါ့။ သူ့ recommend အရေတာ
့ VMware ကိုသံုးသင့္ပါတယ္။

ဘာလု့ လဲ
ိ ဆိုေတာ
့ .. VMware မွာက nested virtualization ကို support ေပးတဲ့အတြက္ေျကာင့္ပါ။
GNS3 VM မွာက ubridge ကိုအသံုးျပဳျပီးေတာ
့ compute server (Dynamips, QEMU,.etc) ေတြ တစ္ခုခု
နဲ့ တစ္ခုခု UTP tunnel လုပ္ျပီး ခ်ိတ္ဆက္တဲ့အခါက် nested virtualization ရွိမွာ အဆင္ေျပမွာပါ။ virtual
box သံုးမယ္ဆုိရင္ေတာ
့ ေနွးေကြးေနပါလိမ့္မယ္။ vbox version6 မွာေတာ
့ Nested virtualization ရသြား
ပါျပီ။

Linux user ေတြအတြက္ကေတာ


့ IOU support ကိုယ့္local machine မွာ လိုခ်င္ရင္ GNS3 ရဲ ့
official doc မွာ ပါတဲ့အတုိင္း config လုပ္ေပးလိုက္ယံုပါပဲ။ Docker support လုိုခ်င္ရင္ additional
config ေလးထည့္လိုက္ရင္ရပါတယ္။ အဲ့လုိ တစ္္ခုခ်င္း config ခ်ရတာအလုပ္ ရွဳတ္တယ္ထင္ရင္ GNS3 ကို
သြင္း ျပီး GNS3 VM နဲ့ ခ်ိတ္ထားလိုက္ရင္ ရပါတယ္။ GNS3 VM မွာက အဲ့တာေတြကို pre-config အကုန္
လုပ္ေပးထားပါတယ္။

အဲ့ေတာ
့ ခုလုပ္မယ့္ task ကို ျပန္ေျပာမယ္..
1. Install gns3
2.Install VMware workstation/Player or Virtual Box
3.Install GNS3 VM on Virtual Machine

12.3 GNS3 install ( with Several ways)

တစ္ခုမွတ္ထားရမွာက GNS3 က version 2.1.11 ဆို GNS3 VM ကလဲ version 2.1.11 ျဖစ္မွ ရမွာ
ပါ။ တစ္ျခား version ျဖစ္လ့ မရပါဘူ
ို း။

ပထမဆံုး GNS3 ကို install လုပ္ပါ။


For Window >> https://www.gns3.com/software/download
For linux >>
https://docs.gns3.com/1QXVIihk7dsOL7Xr7Bmz4zRzTsJ02wklfImGuHwTlaA4/
index.html
ခုအဓိက ထားျပီး ေျပာသြားမွာကေတာ
့ linux ဘက္ကို အဓိကထားေျပာသြားမွာပါ။ ျပီးေတာ
့ တစ္ျခားလိုအပ္တ့ ဲ
conceptေတြ

163
http://crossnetmm.com/

က ေ တ ာ့ linux ေကာ window မွာပါ အတူတူပါပဲ။ ခု ubuntu မွာဆို ppa(Personal Package Archive) အ
ရင္ဆံုး add လိုက္ပါ။
sudo add-apt-repository ppa:gns3/ppa

အဲ့လို PPA channel ကို add ျပီး install လုပ္လ့ ရသလိ


ို ု .. add-apt-repository မရရင္လဲ..
/etc/apt/source.list မွာ သြားျပီး repo ကို သြားထည့္လိ့ ရပါတယ
ု ္ ။ GNS3 ရဲ D
့ ocument မွာလဲ ေရးေ
ပးထားပါတယ္။ အဲ့လိုမွမဟုတ္ ppa ထည့္ခ်င္တယ္ add-apt-repository လဲ မရရင္ ဘာထပ္လုပ္လ့ ို ရမလဲ
ဆုိေတာ
့ ကာ..

12.3.1 linux user to get ppa support

sudo apt-get install software-properties-common


And/OR
sudo apt-get install python3-software-properties
And/OR
sudo apt-get install python-software-properties
တု့ ကိ
ိ ု သံုးျပီးေတာ
့ PPA channel ကို ထည့္လု့ ရေအာင္
ိ လဲ လုပ္လ့ ရပါတယ
ို ္။

164
http://crossnetmm.com/

sudo apt-get install gns3-gui

ဆုိျပီး GNS3 ကို install လုပ္ေပးလိုက္ပါ။

165
http://crossnetmm.com/

Root မဟုတ္တဲ့ non-superuserေတြအတြက္ Yes ကို ေရြးေပးပါ။ အဲ ေ


့ နာက္မွာေတာ
့ .. Terminal ကေနျပီးေတာ
့ $gns3
ဆုိျပီး run လုိက္ရင္

GNS3 တက္လာပါလိမ့္မယ္။

166
http://crossnetmm.com/

12.3.2 install GNS3 with pip3

ဟုတ္ျပီး အဲ့လိ့ ု PPA add တ ာ souce list ထည့္တာေတြ မလုပ္ပဲ pip ကိုသံုးျပီး install လုပ္တ့ ဲ နည္းကို ျပမယ္။
Pip ကို သံုးမယ္ဆုိ သူက python/python3 run လု့ ရတဲ
ိ ့ စက္ေတြမွာ ဆုိ ထည့္လိ့ ု ရတယ္။က် ြန္ေတာ
္ ကေတာ
့ ခုေျပာတဲ့ န
ည္းကိုသံုးျဖစ္တာ ပိုမ်ားတယ္။ တစ္ခုမွတ္ထားရမွာက အေပၚမွာ ေျပာခဲတ
့ ာသည္ ppa/source ေတြ ထည့္ျပီး GNS3 ကို သြ
င္းတာ။

ခုထပ္ေျပာမွာက pip3 ကိုသံုးျပီးေတာ


့ GNS3 ကုိ install လုပ္မွာ။ ဘယ္နည္းနဲ ရ
့ ရ GNS3 ဖြင့လ
္ ့ ရရင္
ုိ ရျပီး။ ရေန
တာကိုမွ အကုန္လံုးစမ္းစရာ မလိုဘူးေနာ္။ apt-get နဲ့install လုပ္ထားတဲ့ GNS3 ကို ျပန္ျဖဳတ္ခ်င္ရင္ apt-get
remove gns3-gui ေနာ္..

ကဲ စမယ္.. Pip3 ကို သံးု ျပီး gns3 ကို install လုပ္က် စို ။့ sudo apt-get install python3 python3-pip
ဆုိျပီး pip3 ကို install လုပ္လိုက္ပါ။

ဒီေနရာမွ တစ္ခုသိထားရမွာက pip သည္ python (2.7) နဲ့run ျပီး pip3 ဆုိတ့ ဲ အတုိင္း Python (3.4 နဲ အ
့ ထက္) လုိ
အပ္ပါတယ္။ အဲေနာက္ pip3 ကို သြင္းျပီးသြားျပီျဖစ္တ့ ဲ အတြက္ pip ကိုသံုးျပီးေတာ
့ gns3-gui ကို install လုပ္ပါ။ အဲ့ေနာက္
gns3-server ကို install လုပ္ပါ။

သံုးရမယ္ command က ေ တ ာ့.. >>

GNS3 GUI (client)

sudo pip3 install gns3-gui (အဲ့လုိရိုက္ရင္ ေနာက္ဆံုး ထြက္တဲ့ version ကိုသြင္းေပးသြားမွာပါ)


sudo pip3 install gns3-gui==2.1.5 ( ဒီလိုရုိက္ရင္ေတာ
့ ကိုယ္သြင္းေစခ်င္တ့ ဲ version ကို သြင္းေပးသြားမွာပါ) ျကိဳက္တဲ့
တစ္ခုကို သံုးပါ။

167
http://crossnetmm.com/

GNS3 Server (background)

sudo pip3 install gns3-server (အဲ့လုိရိုက္ရင္ ေနာက္ဆံုး ထြက္တဲ့ version ကိုသြင္းေပးသြားမွာပါ)


sudo pip3 install gns3-server==2.1.5 (ဒီလိုရုိက္ရင္ေတာ
့ ကိုယ္သြင္းေစခ်င္တ့ ဲ version ကို သြင္းေပးသြားမွာပါ) ျကိဳက္
တဲ့ တစ္ခုကို သံးု ပါ။

ျပီးေတာ
့ GNS3 VM မသံုးပဲ ကုိယ္လိုတာေတြပဲ (qemu, iouyap, ubridge, dynamips...). ထည့္သံုးမယ္ဆုိလဲ သံုးလိ့ ရ

တယ္။

pip/pip3 ဆိုတာက python progamming သမားေတြဆုိရင္ေတာ


့ နားလည္တယ္။ python packageေတြ install လုပ္ုလို
က္တာပဲ။ GNS3 တစ္ခု လံုးကလဲ python နဲ ့ ေရးထားပဲေလ။

168
http://crossnetmm.com/

သူက repository ထည့္တာ/source.list ထည့္တာနဲ့ေတာ


့ မတူဘူး.. ထည့္ျပီး run လုိက္ရင္ လုိေနတဲ့ python package
ေလးေတြ ရွိေနတက္တယ္။ အဲ့လိုေနတာေလးေတြကိုလဲ pip3 ကုိသံုးျပီး ထည့္လုိက္ရံုးပဲ။ ;-)

12.3.3 Common GNS3 error with pip

169
http://crossnetmm.com/

လုိေနတဲ့ package ေတြျဖစ္တ့ ဲ sip & PyQt5 ေတာ


့ ထည့္ျပီးသြားျပီ ဆိုေတာ
့ ျပန္ run ကည့္ပါ။ GNS3 ကိ…
ု ..

ကဲ လုိေနတာမရွိေတာ
့ ဘူးဆိုရင္ေတာ
့ ေခ်ာေခ်ာ ေမြ ေ
့ မြ ျ့ ပီးသြားျပီေပါ့။ တစ္ခါတစ္ေလ ကိုယ္သံုးတဲ့ linux desto မွာ
တစ္ျခား သူမ်ားနဲ့ မတူတ့ ဲ error မ်ိဳး တတ္တက္တယ္။ အဲ့တာက် googling လုပ္ျပီး သူ့ ဆုိင္ရာ ဆုိင္ရာ communityေတြ
site ေတြမွာ ေမြေနွာက္ဖက္ရတာေပါ့။ အေတြ့အျကံဳ ရပါတယ္။ စိတ္မပ်က္ပဲ စမ္းျကည့္က် ပါ။ မရရင္လဲ လာေမးလိ့ ရပါတယ
ု ္။

170
http://crossnetmm.com/

ကဲ တစ္ခုေတာ
့ ေတာ
့ ျပီးသြားျပီး.. GNS3 VM နဲ တ
့ ြဲ ျပီး lab လုပ္ဖုိ့အတြက္ VMware workstation/player လုိပါတ
ယ္..VMware Player က ေ တ ာ့ commercial use မဟုတ္ရင္ free သံုးလိ့ ရေတာ
ု ့ အဆင္ေျပမွာပါ။ VMware
Workstation ကို crack ရွိရင္လဲ သံုခ်င္သံုးေပါ့။

12.4. Get virtual machine

ခုဒီမွာေတာ
့ … VMware player ကို သြင္းျပထားပါတယ္။ vmplay သည္ commercial use မဟုတ္ရင္ free သံုးလို ရ
့ ပါတ
ယ္။

>>> Download Link <<<

VMware Workstation Pro >> https://www.vmware.com/products/workstation-pro/workstation-pro-


evaluation.html
VM Player >> https://www.vmware.com/products/workstation-player/workstation-player-
evaluation.html

171
http://crossnetmm.com/

Download ရ လာမယ့္ linux အတြက္ install လုပ္ရမယ္ file သည္ *.bundle နဲ့ ဆံုး
ပါတယ္။ သူ့ကို executable permission ေပးျပီး execute လုပ္လုိက္ပါ။ ေအာက္မွာ
လုပ္ျပထားပါတယ္။

Sudo chmod a+x VMware-Player-14.1.2-


8497320.x86_64.bundle

Sudo ./VMware-Player-14.1.2-8497320.x86_64.bundle
Or
Sudo bash VMware-Player-14.1.2-8497320.x86_64.bundle

တစ္ခုမွတ္ထားရမွာက ကိုယ္ VMware version 12 သြင္းလိ့ ု error တက္ရင္ version 14 တိ့ ု 15 တိ့ နဲ
ု စ့ မ္းျကည့္ပါ။
အဲ့တာမွ မရရင္ေတာ့ တက္တဲ့ error ကို ရွာျပီး FIX လုပ္ပါ။ ျဖစ္တက္တဲ့error အမ်ားစုက ရွာလိုက္ရင္ အေျဖပါတစ္ခါတ
ည္း ေတြ့ပါတယ္။

ခုေအာက္က ပံုကေတာ
့ virtualbox ကို သြင္းျပထားတာပါ။

172
http://crossnetmm.com/

12.5 Get Gns3vm

အဲ့ေနာက္မွာေတာ့ ေနာက္ထပ္ လုိေနတာျဖစ္တ့ ဲ GNS3 VM ကို ေဒါင္းပါ။ ကိုယ္က VMware သံုးမွာလား.. Virtual
box သံုးမွာလား..
ESXI သံုးမွာလား.. သံုးမယ့္ေကာင္အတြက္ လုိအပ္တ့ ဲ GNS3 VM တစ္ခုကို ပဲ ေဒါင္းပါ။။ တစ္ခုမွတ္ထားဦးေနာ္.. GNS3
VM version သည္ GNS3 version နဲ တ ့ ူမွ အဆင္ေျပမွာပါ။

Download link >> https://github.com/GNS3/gns3-gui/releases

See by Terminal Browser ..

173
http://crossnetmm.com/

GNS3 VM (virtualbox / VMware) download link >> https://github.com/GNS3/gns3-gui/releases

ခုလုပ္မယ့္ labေတြ CCNA တန္းမွာ သင္တာေတြကေတာ


့ Virtual Box နဲ့ ဆုိလဲ ေျပတယ္ ျပသနာမရွိဘူး။

Seen by Web Browser ..

174
http://crossnetmm.com/

VMware လား Virtualbox လား ေရြးပါ။ ျပီးေတာ


့ GNS3 နဲ့
version တူတာ ေဒါင္းပါ။

12.6 Connect Gns3 with Gns3vm

GNS3 နဲ့GNS3 VM ခ်ိတ္ေတာ


့ မယ္ ဆုိ VM ကို အရင္ဖြင့ထ
္ ားတာ အေကာင္းဆံုးပါပဲ။

175
http://crossnetmm.com/

ျပီးမွ GNS3 ကို run ပါ။ Setup Wizard မွာ တစ္ခါတည္းေရြးေပးလိ့ ရသလု
ု ိ ...GNS3 menu ထဲက Edit >>
Perferences မွာ လဲ သြားျပီး ေရြးေပးလိ့ ရပါတယ
ု ္။

176
http://crossnetmm.com/

ခုမွ စ install လုပ္တာဆိုေတာ


့ setup wizard ကေနပဲ လုပ္တာျပလုိက္ေတာ
့ မယ္။ Preferences ကေနလုပ္တာက
လဲ ဘာမွ မကြာပါဘူး စမ္းျကည့္တာနဲ့ လုပ္တက္မွာပါ။ စိတ္မပူန့ဲ.. မသိရင္ေမးပါ။

177
http://crossnetmm.com/

VMware လား VirtualBox လားေရြးေပးလိိုက္ရင္ auto GNS3 VM ကို select မွတ္ ပါတယ္။

12.7 Get cisco Device image file (IOS/IOU)

တု့ ေတြ
ိ ကို ေနာက္ထပ္ ေမးလာမွာ လုပ္ရမွာက IOSေတြIOUေတြ စတာေတြကို ဘယ္လု့ ိ run မလဲ ေပါ့။ GNS VM
သံုးရင္ သူ့ေပၚမွာ run တာ အေကာင္းဆံုးပါပဲ။။
IOSေတြIOUေတြ ေဒါင္းဖုိ့ လင့္ပါ။

IOU (IOS On Unix) >> http://www.networklab.in/downloads/

ေနာက္တစ္ခုကေတာ
့ SourceForge ကေန တင္ေပးထားတဲ့ GNS3 နဲ ပ
့ ါတ္သက္တဲ A
့ ppliance ေတြ Fileေတြ ပါ။

https://sourceforge.net/projects/gns-3/files/

178
http://crossnetmm.com/

ခု စစခ်င္း အဓိက လုိေနတာကေတာ


့ IOU (IOS On Unix) ပါ။ အဲ့တာကို အရင္ေဒါင္းလုိက္ပါ ။ ေအာက္မွာ ျပထားသလိ့ ု
import လုပ္ လုိက္ပါ။ nexe next okay ပါပဲ.. အရမ္းမခက္ပါဘူး...

179
http://crossnetmm.com/

GNS3 VM ေပၚမွာ run ဘယ္ ေျပာလိုက္ပါ။ အဲ့လိုမွ မဟုတ္ ကိုယ့္ စက္ local OS မွာ မွ run ခ်င္ရင္ေတာ
့ တစ္ျခားလိုတာေ
တြ ျဖစ္တ့ ဲIOU support ရေအာင္ သြင္းေပးဖုိ့လိုအပ္ပါတယ္။

If_you_want_IOU_support

sudo dpkg --add-architecture i386


sudo apt-get update
sudo apt-get install gns3-iou

180
http://crossnetmm.com/

IOU binary ဖုိင္ ကို ေရြးေပးပါ။ L2 ဆိုတာသည္ layer 3 image ျဖစ္ျပီး L3 က ေ တ ာ့ Layer 3 image ပါ။

181
http://crossnetmm.com/

နာမည္ေပးပါ။ L2/L3 ေရြးေပးျပီး finished နွိပ္ပါ။

12.7.1 IOU license

Image ေတြ ထည့္ျပီးသြားရင္ ေနာက္ထပ္လိုတာက IOU အတြက္ lincense


ရယ္ အဲ့ license မွာ ရွိတ့ ဲ နာမည္ အတုိငး္ GNS3 VM ကို ေျပာင္းေပး

182
http://crossnetmm.com/

ဖုိ့ရယ္ လုိပါတယ္။ ေပးထားတဲ့ ထဲမွာ iourc.txt ဆုိတာေလး ပါပါတယ္။ အဲ့ေကာင္ကိုBrowse လုပ္လုိက္ပါတယ္။ ခုေဘးမွာ
ျပတဲ့ ပံုအတုိင္းရ ပါလိမ့္မယ္။
License error တက္ရင္ python license generator ေလးကိုသံုးျပီးေတာ
့ ထုတ္လိ့ ရပါတယ
ု ္။
https://gist.githubusercontent.com/paalfe/8edd82f780c650ae2b4a/raw/
bd7b6b8a81c338359e6de4ff0ed0def9f7dc9146/CiscoKeyGen.py

IOU နဲ s့ cript ကုိ directory အတူတူထားျပီး script ကို execute လုပ္ယံုပါပဲ။

အဲ့ေနာ က္ GNS3 VM မွာ okay ကို enterေခါက္လုိက္ရင္ Menuေလးက် လာပါလိမ့္မယ္။

Shell ကို ေရြးလိုက္ပါ။ Terminal တစ္ခု က် လာပါလိမ့္မယ္။

183
http://crossnetmm.com/

>> sudo hostnamectl set-hostname gns3-iouvm


လိ့ ု နာမည္ေျပာင္းေပးလိုက္ျပီး Bash ကို ရိုက္လိုက္ပါ။ အဲ့တာဆို ရပါျပီ။

ခုဆိုရင္ေတာ
့ GNS3 ကို GNS3 VM နဲ တ
့ ြဲသံုးျပီးIOUေတြန့ဲ ေကာင္းေကာင္း LAB လုပ္နုိင္ပါျပီး

184
http://crossnetmm.com/

12.8. Get Python Container & Ubuntu Docker image (GNS3 Appliance)

ေနာက္ထပ္ Additional အေနနဲ ့ လုိအပ္တာေတြကေတာ


့ Ubuntu Docker image နဲ့Python ပါ။ အဲ့ေကာင္ေတြကို
ေဒါင္းမယ္ဆုိရင္ေတာ
့ .

>>> https://gns3.com/marketplace/appliances

အဲကေန ရွာလုိက္လိ့ ရပါတယ


ု ္ ။ GNS3 စမ္းဖုိ့ Contribute လုပ္ ေပးထားတဲ့ သူေတြ အမ်ားျကီးပါ။

GNS3 VM မသံုးဘဲ local OS မွာ Docker support ရ ခ်င္ရင္ေတာ


့ GNS3 official doc ထဲက အတုိငး္ ေပါ့။

If_you_want_Docker_support

Remove any old versions:


sudo apt-get remove docker docker-engine docker.io

Install these packages, if not already present:


sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
Import the official Docker GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key
add -
Setup the Docker repo:
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

185
http://crossnetmm.com/

*NOTE* There currently isn’t a package for Ubuntu 18.04


in the stable release channel, but there is in the edge
channel.
Update the metadata:
sudo apt-get update
Install Docker:
sudo apt-get install docker-ce
Finally, add your user to the docker group, and restart your user session
sudo usermod -a -G docker username
NOTE_1 If you encounter any permission errors when trying to run GNS3, DynaMIPS
devices, Wireshark, or Qemu VMs, ensure your user belongs to the following groups:

ubridge libvirt kvm wireshark

GNS3 VM နဲ ့ သံုးက် မယ့္သူေတြကေတာ


့ အေပၚက ျပသနာမရွိဘူးေပါ့.. ကဲ အဲ့တာဆုိ gns3 appliance ေလးေတြကို ေဒါ
င္းလိုက္ပါ။
*.gns3a နဲ့ အဆံုးသတ္ပါလိမ့္မယ္။

GNS3 menu ရဲ့ File >> Import Appliances ကို ေရြးလိုက္ပါ။

186
http://crossnetmm.com/

ကိုယ္သြင္းမယ့္ေကာင္ကို ယူလုိက္ပါ။

187
http://crossnetmm.com/

Next Next okay finished ပါပဲ။

188
http://crossnetmm.com/

Docker သြင္းလိုက္တာပဲ ရွိပါေသးတယ္.. Container ကို pull မလုပ္ရေသးပါဘူး.. ကုိယ္သြင္းထားတဲ့ ေကာင္ကို topology
workspace မွာ Drug&Drop လုပ္လုိက္မွာ သြင္းသြားတာပါ။

189
http://crossnetmm.com/

Python အတြက္လဲ Ubuntu နဲ့ အတူတူပါပဲ။

အကုန္သြင္းျပီးသြားရင္ ကိုယ္စမ္းခ်င္တ့ ဲ device ကို right click ေထာက္ျပီိး run လုိက္ပါ အဲ့ေနာက္ right click ျပန္ေထာ
က္ျပီး console က ေ န connect လုပ္ပါ။ အဲ့တာဆုိ ရပါျပီး။

ခုေအာက္က ေကာင္က video link ပါ..

https://www.youtube.com/watch?v=KraZsFiZzMQ&t=87s

13. Python Telnet Script

ကဲ python network program ေသးေသးေလး တစ္ခု ေရးဖုိ့ ျပင္ဆင္လိုက္ရေအာင္ဗ်ာ

190
http://crossnetmm.com/

https://sourceforge.net/proj…/gns-3/files/Qemu%20Appliances/
အဲ့လင့္ကေနျပီးေတာ ့ lisa-2.0.1-centos-6.3.tar.bz2 ဆုိတ့ ဲ centos အတြက္ qemu appliance ေလးကို ေဒါင္း
လိုက္ပာ ျပီးေတာ ့ $tar xjf lisa-2.0.1-centos-6.3.tar.bz2 ဆုိျပီး extract လုပ္လကုိ ္ ပါ lisa-2.0.1-centos-
6.3.img ဆိုျပီး ရလာပါလိမ့္မယ္ image file ေလးကို QEMU မွာ ထည့္ပံထ ု ည့္နည္း အရင္ကေရးျပဘူးပါတယ္
page မွာ ျပန္ရွာျကည့္ပါ .. ခုေတာ
့ အလြယ္ပဲ ျပန္ေျပာျပေတာ
့ မယ္..

GNS3 ရဲ့ edit ကေန preference ကို သြားပါ ျပီးေတာ ့ Qemu VMs ကို နွိပ္ပါ... New ကိုေရြးပါ run this Qemu
VM on GNS3 VM ကို select လုပ္ပါ next နွိပ္ပါ qemu binary ကို default အတုိင္းထားပါ next နွိပ္ပါ new
image ေရြးေပးပါ upload လုပ္မွာလားဆုိ yes ေရြးေပးပါ finished ကိုနွိပ္ပါ... အဲ့တာဆုိ centos ကို qemu မွာ သြ
င္းထားပီးျဖစ္ပါတယ္ တစ္ခ်ိဳ ့ GNS3 appliance မရတဲ့ သူေတြ အတြက္ပါ။
Topology

ျပီးေတာ
့ switch ေတြကို control access ရဖုိ့ local password ေပးပါ
#enable password cisco
ျပီးေတာ
့ telnet login အတြက္ username & password create လုပ္ပါ
#username spacex password cisco
#line vty 0 4
#login local
#transport input all
#end
ip ေပးပါ

191
http://crossnetmm.com/

#int vl 1
#ip addr 10.0.0.1 255.255.255.0
#no sh

အဲ့တာဆို switch ဘက္ျခမ္းျပီးသြားပါျပီ ေနာက္ linux ဘက္ျခမး္မွာ ip configure လုပ္ရပါမယ္


centos >> login:root & password:password

192
http://crossnetmm.com/

ifconfig eth0 10.0.0.254 netmask 255.255.255.0

ျပီးရင္ python script စပါမယ္…

import getpass
import sys
import telnetlib /////library ေတြကို အရင္ import လုပ္ပါ

193
http://crossnetmm.com/

HOST = raw_input("Enter your Device IP: ") /// user ဆီက input ေတာင္းျပီး HOST ဆိုတ့ ဲ variable
ထဲsave ပါတယ္
user = raw_input("Enter your telnet username: ") /// username ကို user ဆိုတ့ ဲ variable ထဲsave ပါ
တယ္
password = getpass.getpass() /// "Password:" ဆုိေတာင္းျပီး password ဆိုတ့ ဲ variable ထဲsave ပါတယ္
tln = telnetlib.Telnet(HOST) /// telnet connection ေဆာက္ပါတယ္ HOST ထဲမွာသိမ္းထားတဲ့ IP နဲ့
tln.read_until("Username: ") ///"Username: "ဆိုျပီးေမးမွာကို ေစာင့္ပါတယ္ ေမးတာကို ျမင္တာနဲ့ ေအာက္
တစ္ေျကာင္း ဆင္းပါတယ္
tln.write(user + "\n") /// user ထဲမွာ သိမ္းထားတဲ့ username ရိုက္ပါတယ္
if password: /// password ေတာင္းတုန္းက ရိုက္ခဲရ
့ င္
tln.read_until("Password: ") ///"Password: " ဆုိျပီးေတာင္းတာနဲ့ ေနာက္တစ္ေျကာင္းဆင္းပါတယ္
tln.write(password + "\n") /// password ထဲမွာ သိမ္းထားတဲ့ က် ြန္ေတာ
္ တု့ ိ ရိက
ု ္ ္ လိုက္တဲ့ password ကိုထ
ည့္ပါတယ္
///////////// UserName & Password မွနသ ္ ြားရင္ switch ထဲကို ေရာက္ပါျပီ loopback configure ခ်ဖုိ့ ..
ရုိက္ရမယ့္ command ေတြကို တစ္ခုခ်င္း အစဥ္လိုက္ေရးပါ///////
tln.write("enable\n")
tln.write("cisco\n")
tln.write("conf t\n")
tln.write("int lo 0\n")
tln.write("ip addr 1.1.1.1 255.255.255.255\n")
tln.write("exit\n")
tln.write("end\n")
tln.write("exit\n")

print tln.read_all() /// ကိုယ္ switch မွာ ရိုက္ခဲတ


့ ာေတြကို ျမင္ရေအာင္ ျပန္ထုတ္တာပါ... ;-)

script မ run ခင္ ping ျကည့္ပါ

194
http://crossnetmm.com/

python script run ပါ


ခုဒီ script ကေတာ
့ telnetlib ကို သံုးျပီးေတာ
့ cisco device ထဲ ကို telnet login ၀င္ပါတယ္။ အဲ့ေနာက္ loop
back interface create လုပ္ျပီး IP ေပးလိုက္တာပါ။

14. Config vlan with for loop

Topology ပံု

Ubuntu PC ကို right click ေထာက္ျပီး Edit config ကိုသြားပါ

195
http://crossnetmm.com/

Na
t Cloud က DHCP support ေပးတဲ့ အတြက္ Ubuntu ရဲ့ eth0 ကို dhcp on ေပးလိုက္ပါ

196
http://crossnetmm.com/

Nat Cloud က GNS3 2.0 မွာ support ေပးပါတယ္...


GNS3 1.5 အတြက္ဆုိ https://websistent.com/how-to-connect-gns3-to-the-internet/
အဲ့လင့္မွာ ပါတဲ့အတုိင္း config ခ် ပါ
second 20 ေလာက္ ေနရင္ ip က် လာပါလိမမ
့္ ယ္ .. မရခဲရ
့ င္
$ifconfig eth0 down
$ifconfig eth0 up
eth0 interface ကို disable/enable လုပ္ေပးပါ
Now got IP

197
http://crossnetmm.com/

internet connection ရ မရ ping ျကည့္ပါ... ျပီးေတာ


့ $apt-get update လုပ္ပါ

လုပ္ျပီးရင္ python install လုပ္ပါ

python အလုပ္ လုပ္ မလုပ္ စမ္းျကည့္ပါ ....


root@Ubuntu-11:~#python

198
http://crossnetmm.com/

>>>print("Helloworld")
Helloworld
>>>

window အတြက္တင္မဟုတ္ပါဘူး linux မွာလဲ အလုပ္လုပ္ပါတယ္...

တု့ ေတြ
ိ Vlan configuration လုပ္မယ့္ switch ေတြကလ
ို ဲ Ubuntu ရဲ့ IP နဲ ့ Same Network ျဖစ္ေအာင္ ေပးပါ
$ifconfig eth0 ဆိုျပီး ျကည့္လုိက္ရင္ ip:192.168.122.33 & Mask:255.255.255.0
အဲ့ေတာ
့ switch1,switch2,switch3 ကို vlan 1 interface ကို 192.168.122.11, 192.168.122.12,
192.168.122.13 ဆုိျပီး ေပးလိုက္တယ္ဗ်ာ့

199
http://crossnetmm.com/

https://drive.google.com/file/d/0B6-W5TOkUugea2JSc0JhTG5UR1k/view
အဲ့လင့္က script အတိုင္း ရိုက္ပါ.. python မွာ space ေတြ tab ေတြ သတိထားပါ.. for loop ပါတ္တဲ့အခ်ိန္မွာ..
;-)

200
http://crossnetmm.com/

########################## Script
###########################
import getpass
import sys
import telnetlib
vlan_count=1
no_device=raw_input("How many device do you want to configure: ")
device=int(no_device) /// ၀င္လာတာက str type ပါ အဲ့ေျကာင့္ int type ေျပာင္းတာပါ..for loop မွာ
integer ထည့္ရမွာမုိ့
no_vlan=raw_input("How manay Vlan do you want to config: ")
vlan=int(no_vlan) /// ၀င္လာတာက str type ပါ အဲ့ေျကာင့္ int type ေျပာင္းတာပါ..for loop မွာ integer ထ
ည့္ရမွာမုိ့
for i in range(device): /// for loop ပါတ္ပါတယ္ i=0 ကေနစျပီး 1 တုိုး တုိးသြားျပီး <device ထိပါ
HOST=raw_input("Enter Your Devie IP: ")

201
http://crossnetmm.com/

user=raw_input("Enter Your Telnet UserName: ")


password=getpass.getpass()
tln=telnetlib.Telnet(HOST)
tln.read_until("Username: ")
tln.write(user + "\n")
if password:
tln.read_until("Password: ")
tln.write(password + "\n")
tln.write("enable\n")
tln.write("cisco\n")
tln.write("conf t\n")
for i in range(vlan): /// for loop ပါတ္ပါတယ္ i=0 ကေနစျပီး 1 တုိုး တုိးသြားျပီး <device ထိပါ
vlan_count=vlan_count+1
tln.write("vlan " + str(vlan_count) + "\n")
tln.write("name VLAN" + str(vlan_count) + "\n")
tln.write("exit\n")
tln.write("end\n")
tln.write("exit\n")
print tln.read_all()

sublime text နဲ့ ေရးျကည့္ပါ ကိုယ့္ loop ဘယ္နားထိေရာက္လဲ ျမင္သာပါတယ္.... ;-)

for loop ဘယ္လုိ အလုပလ


္ ုပ္လဲ ဆုိ တာကို ေနာက္ဆံုးပံုမွာ ျကည့္ပါ
vlan creation finished with python script

202
http://crossnetmm.com/

သျကၤန္တြင္း အျပီးေရးထားတာဆိုေတာ ့ .. Script နွစ္ခပ


ု ဲ ရွိပါေသးတယ္.. ျပီးေတာ့ အရင္က ေရးဖူးတာကို ျပန္ထ
ည့္တာဆုိေတာ ့ ရွင္းဖုိ လ
့ ုိေနတာေလးေတြလဲ ေတြ့ပါတယ္။ အဲ့တာကို version 2 က ် ရင္ ျပန္ျပီးျဖည့္ေရးေပးထားမယ္
ဗ်ာ ။။ ျပီးေတာ
့ SSHv2 အတြက္ script ေတြ backup script ေတြ ထပ္ျပီး အားျဖည့္ေပးမယ္ .. see ya !!

With Best Regards,


Khant Phyo
Core Team Leader
[email protected]
+09442329009

203

You might also like