Python Network Programming (Myanmar Version - I) by Khant Phyo
Python Network Programming (Myanmar Version - I) by Khant Phyo
com/
1
http://crossnetmm.com/
Table of contents
#Title# .Page
Intro!! 6
1.What is Program 6
2. Introduction to Python 21
2.1History of Python 21
2.5 Very first Program “Hello world” and its syntax, key-words 26
2.8 Variable 31
2.8.1 Numbers 34
2
http://crossnetmm.com/
2.8.2 String 35
3. Python Operator 45
3.1.1 Addition ( + ) 46
3.1.2 Subtraction ( - ) 47
3.1.3 Multiplication ( * ) 47
4.1 if statement 60
Python Indentation 62
5. Python Loops 70
3
http://crossnetmm.com/
*** >> Using from module import * << is not Best practice *** 88
6.3 strptime() 93
** pip installation ** 94
4
http://crossnetmm.com/
5
http://crossnetmm.com/
12.8. Get Python Container & Ubuntu Docker image (GNS3 Appliance) 174
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
7
http://crossnetmm.com/
Computer ျကီးကို နားလည္ဖုိ့ နဲ့နဲ ေလာက္ျကည့္လိုက္က် ရေအာင္ဗ်ာ သူမွာ ဘာေတြ ပါတယ္ ဘယ္
လိုလုပ္တယ္ဆုိတာ အျကမး္ဖ်င္းနားလည္ေနေတာ
့ Code ေရးရတာ ပိုအဆင္ေျပတာေပါ့ဗ်ာ
8
http://crossnetmm.com/
9
http://crossnetmm.com/
10
http://crossnetmm.com/
11
http://crossnetmm.com/
ျပီးေတာ
့ ၀င္လာတဲ့ 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/
အေပၚမွာလဲ ေျပာခဲပ
့ ါတယ္ Computer ေတြဟာ Machine Code ေတြ ျဖစ္္တ့ ဲ 0 နဲ့ 1 ကိုသာနားလ
ည္က် တာပါ။ Human Language ျဖစ္တ့ ဲ character, integer ေတြ စကားေတြကို နားမလည္ပါဘူး အဲ့ေတာ
့
computer နားလည္ေအာင္ ေျပာေပးနုိင္မယ့္ Low Level Programming Language နဲ့ ျဖစ္ျဖစ္ High Level
Programming Language နဲ့ ျဖစ္ျဖစ္ ေရးသားျပီး ခုိင္းေစက် ရပါတယ္။
13
http://crossnetmm.com/
(3) Compiler- Compiler အေနနဲ့ သူက Program ျကီးတစ္ခုလံုး Source Code ျကီးတစ္ခုလံုးကို
Machine code အေနနဲ့ ေျပာင္းျပီးမွ RUN ပါတယ္။
(4) Low Level Language မွာဆုိ Lower Levelျဖစ္တ့ ဲ Hardware ဘက္ျခမ္းနဲ့ အရမ္းနီးကပ္ပါတယ္
Hardware ေတြရဲ့ အလုပ္လုပ္ပံုန့ဲ ဆင္ပါတယ္။ Code ေရးရာတြင္ CPU architecture ေပၚမူတည္ျ
ပီးေျပာင္းလဲပါတယ္။ Program ေရးရင္လဲ Hardware ေတြ လုပ္ေဆာင္ပံုအတုိင္း တစ္ခုခ်င္း ေရး
သားရပါတယ္။ ဥပမာအေနနဲ့ ေအာက္က code ကိုျကည့္ပါ။
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/
16
http://crossnetmm.com/
အေပၚကပံုေလးကို ကြ ် န္ေတာ
္ တစ္ခ်က္ရွင္းျပေပးပါ့မယ္..
.data section မွာဆုိရင္ complie လုပ္တ့ ဲ ေနရာမွာ လုိအပ္မယ့္ data ေတြကို အရင္ define လုပ္ေ
ပးထားရပါတယ္။
ျပီးေတာ
့ 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/
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ျပန္ ေပး
ပါတယ္။
ျပီးေတာ
့ Low Level Language ေတြမွာ compiler ေတြ interpeter ေတြ မလိုအပ္ပါဘူး တုိက္ရုိက္Run နုိင္
ပါတယ္။ High Level Language ဆိုတာက် user-friendly ပိုျဖစ္ပါတယ္ လူသားေတြအေနနဲ့ နားလည္လြယ္
တဲ့ Syntx ေတြ logic ေတြန့ဲ ေရးသားထားတဲ့ source code ကိုမွ Compiler ျဖစ္ျဖစ္ Interpeter ျဖစ္ျဖစ္
သံုးျပီး Computer နားလည္ေအာင္ Machine Code အေနနဲ့ ေျပာင္းလဲပါတယ္။
19
http://crossnetmm.com/
20
http://crossnetmm.com/
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
22
http://crossnetmm.com/
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/
$ make -j 8
$ python3.6 -V
Fedora/CentOS မွာဆုိ
24
http://crossnetmm.com/
For python3.x
$ sudo yum update
$ sudo yum install yum-utils
ဒါမွ မဟုတ္ တစ္ျခား 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
$ make -j 8
$ python3.6 -V
$ make -j 8
25
http://crossnetmm.com/
$ python3.6 -V
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 စရာ
မလိ့ ပါဘူ
ု း။
ရေအာင္။
ဘယ္လုိမ်ိဳးလဲဆုိတာက ဥပမာေလးတစ္ခုနဲ ရ
့ ွင္းျပမယ္..
Windows မွာဆို command prompt ။ Linux မွာဆုိ terminal မွာ python ဆုိျပီး ရိုက္လုိက္ပါ။
အဲ့လို ရိုက္လိုက္တာနဲ ့ >>> (Greater than Sign သံုးခု) ဆိုတ့ ဲ သေကၤတေလးကို ျမင္ရပါလိမ့္မယ္။ အဲ့ >>> ကို
chevron prompt လု့ ိ ေခၚတယ္။ သူက command line shell လိုပါပဲ.. user ကေနျပီးေတာ
့ input/
command တစ္ခုရိုက္လိုက္တာနဲ့ result/feedback ခ်က္ခ်င္းျပန္ရပါတယ္။ ခု အေပၚက >>> လေးကိုက user
27
http://crossnetmm.com/
2. Script mode
သူက် ကေတာ
့ text editor တစ္ခုနဲ ့ code ေတြ ေရးျပီးေတာ
့ file တစ္ခု အေနနဲ s့ aveျပီး ..
အဲ့ ဖုိင္ကိုမွ python အေနနဲ e
့ xecute လုပ္တာပါ။ save ထားတာမို့ file သည္ မဖ်က္မခ်င္း ရွိေနပါတ
ယ္။
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 ထြက္မ
လား..
29
http://crossnetmm.com/
က် ြန္ေတာ
္ တု့ ေတြ
ိ အိမ္မွာ ေခြးေလးေတြ ေျကာင္ေလးေတြ ေမြးတက္က် တယ္ဟုတ္ ? အိမ္မွာ ေမြးထား
တဲ့ ေခြးေလးပဲ ျဖစ္ျဖစ္ေပါ့.. နာမည္ေခၚရင္လာမယ္.. ထိုင္ဆုိထုိင္ ထဆုိထ..အဲ့ေလာက္ေတာ
့ နားလည္သိတက္
က် တယ္။ အဲ့တက္ပိုျပီး.. လူတစ္ေယာက္လိုမ်ိဳး စကားေတြ ထုိင္ေျပာရင္.. ဒီေကာင္ေလးေတြ နားလည္မွာ မဟု
တ္ပါဘူး.. အသည္းကြဲလ့ ို ရင္ဖြင့လ
္ ဲ.. သခင္မ်က္နွာ အေကာင္း ေဘးကေန ငိုင္ျပီးအေဖာ္ လုပ္ေပးေနတာပဲ ရွိတ
30
http://crossnetmm.com/
ထု့ နည
ိ ္ းတူ 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 တု့ မွ
ိ ာ သြားရိုက္ရင္ ရမွာ မဟုတ္သလို ပါပဲ။
Python prompt >>> ကေနhelp() ေခၚလိုက္ပါ။ အဲ့ေနာက္ keywords လိ့ ု ရိုက္လိုက္ရင္ python မွာ
သူ အ
့ တြက္ ရွိေနတဲ့ keywords ေတြကို ျပ ေပးပါလိမ့္မယ္။ print ဆုိတ့ ဲ keyword ကိုရင္းနွးီ ျပီးသားပါ။ if
ဆုိ condition စစ္တာ while ဆုိ while loop, for ဆုိ for looping အတြက္.. စသည္ျဖင့္ေပါ့.. ေနာင္ လာမယ့္
program ေတြက keyword ေတြ သံုးရင္းနဲ သ
့ ိလာမွာပါ။ ခု keyword ဘယ္လို ျကည့္ရတယ္။။ ဘယ္ေကာ
င္ ေတြကkeyword ေတြ ျဖစ္တယ္ဆုိတာ သိရင္ လံုေလာက္ျပီေလ။။။
31
http://crossnetmm.com/
32
http://crossnetmm.com/
Python3.x မွာေတာ
့ Print ထုတ္ခ်င္တ့ ဲ ေကာင္ကို print ဆုိတဲ k
့ eyword ေနာက္ကေန လက္သည္းကြင္းရ
ယ္() quotes ‘ ‘ ရယ္နဲ ့ အဖြင့္ အပိတ္ တု့ ကိ
ိ ု ထားရပါမယ္။ (‘ [output] ‘) ဆုိတ့ ဲ ပံုစံန့ပ
ဲ ဲ .. အလုပ္လုပ္ပါတ
ယ္ single/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/
2.8 Variable
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 တစ္ခု အေနနဲ ့ ေရးျကည့္
က် ရေအာင္။
35
http://crossnetmm.com/
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
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/
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
39
http://crossnetmm.com/
str() function
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 ေတြအကုန္ ထြက္
လာပါလိမ့္မယ္။
40
http://crossnetmm.com/
print ထုတ္တာေတြဘာေတြကေတာ
့ အေပၚက Fruit တုန္းကထုတ္ခဲ့ သလို ထုတ္လိုက္ယံုပါပဲ။ list
ေတြကို + ေလးသံုးျပီး ေပါင္းလိ့ ု ရပါတယ္။ print ထုတ္တဲ့ ေနရာမွာ print Fruit + Random_list ဆုိျပီး ထု
တ္လိ့ ရသလိ
ု ့ ု.. ေပါင္းလိ့ ရလာတဲ
ု ့ result ကို print combine ဆုိတ့ ထဲ
ဲ ထည့္ျပီးမွ print combine ဆုိျပီးလဲ
ထုတ္လိ့ ရပါတယ
ု ္။
41
http://crossnetmm.com/
ျပန္ဖယ္ထုတ္ခ်င္တယ္ ဆုိရင္ေတာ
့ 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/
Tuple သည္ list နဲ့ အတူတူပါပဲ။။ အဓိက ကြဲျပားသြားတာက list သည္ ေထာင့္ကြင္း [] နဲ ေ
့ ဖာ္ျပ ေ
ရးသားျပီး tuple ကိုေတာ
့ ()လက္သည္းကြင္းနဲ့ ေရးပါတယ္။ ျပီးေတာ
့ list ထဲမွာရွိတ့ ဲ elements/items ေတြ
ကို ျပဳျပင္ေျပာင္းလဲလ့ ို ရျပီးေတာ
့ Tuple ကေတာ
့ မရပါဘူး.. အဲ့တာေျကာင့္ သူ က
့ ို read-only လိ့ ု ေျပာက် ပါ
တယ္။
43
http://crossnetmm.com/
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 ထုတ္ပါ။
ခုေအာက္ေကာင္ကေတာ
့ python3.x မွာ ပဲ အဆင္ေျပတာပါ။
dict() ကို သံုးျပီး dictionary2 ထဲ ကို key+value ေတြကို ထည့္တာပါ။
သြင္းထားတဲ့ data ေတြကို ျပန္ထုတ္ျကည့္ က် ရေအာင္။။ print thedict1 / print thedict2 ဆုိျပီး ထုတ္ျ
ကည့္ပါ။ dictionary ကို unorder, changable ျဖစ္တယ္လိ့ ု ေျပာက် တယ္ဗ်ာ ့.. ဘာကို ေျပာခ်င္တာလဲ ဆုိေ
တာ
့ ခု ထည့္ထားတဲ့ data ေတြသည္ အဆင္လိုက္ျပန္ထြက္မလာတာကို unorder ျဖစ္တယ္လိ့ ု ေျပာပါတယ္။
ျပီးေတာ
့ changable ျဖစ္တယ္ဆုိတ့ ဲ အတုိငး္ tuple လို read-only မဟုတ္ပဲ.. ျပဳျပင္ေျပာင္းလဲ လိ့ ု ရပါတယ္။
45
http://crossnetmm.com/
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 တု့ ကိ
ိ ု သံုးျပီး
စမ္းျကည့္က် မွာပါ။
47
http://crossnetmm.com/
3. Python Operator
Python ေတြ န
့ ုိင္မယ့္ operator ေတြကေတာ
့ ေအာက္ပါ အတုိင္းပဲ ျဖစ္ပါတယ္။
● Arithmetic Operators
● Comparison (Relational) Operators
● Assignment Operators
● Logical Operators
● Bitwise Operators
● Membership Operators
● Identity Operator
48
http://crossnetmm.com/
Arithmetic ကေတာ
့ သူ န
့ ာမည္အတုိင္းပဲ ေပါင္း ႏွဳတ္ ေျမွာက္ စား စတဲ့ .. သခ်ာၤတြက္ခ်က္ မွဳေတြကို
ျပဳလုပ္ေပးတာပဲ ျဖစ္ပါတယ္။
3.1.1 Addition ( + )
49
http://crossnetmm.com/
X = 10 ဆုိျပီးေတာ
့ variable x ထဲကို 10 ထည့္လိုက္ပါတယ္။ y ထဲ ကိုေတာ
့ 20 ထည့္ထားပါတယ္။ အဲ့ေနာ
က္ print x + y နဲ ့ x နဲ y
့ ေပါင္းျပီး ရလာတဲ့ resulte ကို ထုတ္ျပထားပါတယ္။
3.1.2 Subtraction ( - )
ျပီးေတာ
့ python sub.py ျပီး run လိုက္ရင္ အေျခ 15 ဆိုျပီး ရပါတယ္။
3.1.3 Multiplication ( * )
50
http://crossnetmm.com/
Multication ဆုိတ့ ဲ အတုိငး္ ေျမွာင္မွာေပါ့။ python မွာ အေျမွာက္အတြက္ *(start) သေကၤတ ကို
သံုးပါတယ္။ ေအာက္က code ေလးကို ေရးျပီး Multi.py ဆိုတ့ ဲ နာမည္ နဲ့ သိမ္းလိုက္ပါတယ္။ ကိုယ္စိတ္ ျကိဳ
က္နာမည္ေပးလို ရ
့ တယ္ေနာ္။
51
http://crossnetmm.com/
Python 2.7 မွာဆုိရင္ user ဆီကေန input ယူဖုိ့အတြက္ သံးု နုိင္တ့ ဲ function က နွစ္ခု ရွိတယ္။
input() နဲ ့raw_input() တုိ ပ
့ ဲျဖစ္ပါတယ္။ အဲ့နွစ္ေကာင္ဘယ္လို ကြာျခားလဲဆုိတာကို တစ္ခ်က္ျကည့္ ျက
ည့္က် ရေအာင္ ဗ်ာ။
ခု 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/
ေနာက္တစ္ခါ ‘123’ ဆိုျပီး string အေနနဲ ့ input ထည့္လိုက္ပါတယ္။ type() နဲ ့ ျကည့္ရင္ string ျဖစ္တယ္
ဆုိတာကို ေတြ ရ
့ မွာပါ။ အဲ့တာအျပင္ သိမး္ တဲ့ အခ်ိန္မာွ သူသည္ ‘(single quotes) ေတြကိုပါ ထည့္သိမ္းပါ
တယ္။ အဲ့ဒါေျကာင့္ xyz ထဲ က data ကို ျပန္ထုတ္တဲ့ အခ်ိန္မာွ “ ‘ 123 ‘ “ဆုိျပီး ျမင္ရတာပါ။
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) ေတြကိုပါ ထည့္သိမ္းထားတာကို ေတြ ရ
့ ပါမယ္။
အေပၚက ကုတ္ေတြကို multi_input.py ဆုိတ့ ဲ နာမည္တဲ့ save လိုက္ပါ။ အဲ့ script ဖုိင္ကို python
multi_input.py ဆုိျပီး execute လုပ္လိုက္ပါ။ ေအာက္ပါ result အတိုင္း ရရွိလာပါလိမ့္မယ္။
54
http://crossnetmm.com/
ရလာတဲ့ 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/
ဟုတ္ျပီး ခုဆိုရင္ division သည္ float တန္ဖုိး ျဖစ္တ့ ဲ 2.5 ကို ေပးပါတယ္။ quotient ကေတာ
့ 2 ပါ။ အဲ့ေလာ
က္ဆုိ ရမယ္ လိ့ ု ေမွ်ာ္လင့္ပါတယ္။ တစ္ျခား ဂဏန္းေတြန့လ
ဲ ဲ စမ္းျကည့္ေစခ်င္ပါတယ္။ happy coding ;-)
56
http://crossnetmm.com/
ခု basic အေနနဲ ့ စမ္းမယ့္ OP 6 ခုကို စမ္းဖုိ့အတြက္ interactive mode မွာ စမ္းျကည့္က် ပါမယ္။ ထ
ည့္လိုက္တဲ ရ
့ လာတဲ့ input ေတြေပၚမူတည္ျပီး condition ကို စစ္ပါမယ္။ condition မွန္တယ္ ဆုိရင္ True
(boolean) ကို ရမွာ ျဖစ္ျပီး.. Condition မကိုက္ရင္ ေတာ
့ false ပါ။.. Comparison Opeator ဆုိတ့ ဲ အတိုင္း
operands ေတြကို compair(နွိဳင္းယွဥ္) လုပ္တာပါ။ လက္ေတြ့ ကုတ္ေတြ ေရးျကည့္ ရင္ မ်က္စိထဲ ပိုျမင္ပါလိ့မ္
မယ္။ စမ္းျကည့္က် စုိ ။့
57
http://crossnetmm.com/
ေနာက္တစ္ခါ >= (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 = 30, x >= y ဆုိရင္လဲ True ပဲ ရပါတယ္။ x ထဲက 30 သည္ y ထဲက 20 ထက္ ျကီးတာမုိ .့ . True ပါ။
59
http://crossnetmm.com/
ဟုိုးအေရွ မ
့ ွာတုန္းက simple assignment operator ေလးတစ္ခုျဖစ္တ့ ဲ = (equal) အလုပ္ လုပ္ပံုကို
မွတ္မိတယ္ ဟုတ္? သူက i = 5 မွာဆုိရင္ ညာဘက္က 5 သည္ ဘယ္ဘက္က variable i ထဲကို assign လု
ပ္ေပးရမယ္ value တစ္ခုပဲျဖစ္ပါတယ္။ ေျပာခ်င္တာက ညာဘက္မွာရွိတာသည္ assign လုပ္မယ့္ေကာင္ ဘယ္
ဘက္ကေကာင္သည္ assign လုပ္ခံရမယ့္ေကာင္.. အလယ္က ေနရာကေတာ
့ assignment operator အတြ
က္ပဲ ျဖစ္ပါတယ္။
အေပၚက code ေတြကို run လိုက္ရင္ ေအာက္ပါ အတုိင္း result ထြက္ပါတယ္။ ဟုတ္ မဟုတ္ ကို
တစ္ဆင့္ခ်င္း ျပန္ ျကည့္ က် ရေအာင္။
60
http://crossnetmm.com/
Logical Operator နဲ B
့ itwise Operator အေျကာင္းကို ေနာင္က် မွ ဆက္ရွင္းပါတယ္။ ခု လက္ရွိ အသံုးလို
မယ့္ Membership Operator နဲ I
့ dentity 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
ရပါတယ္။
62
http://crossnetmm.com/
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.
63
http://crossnetmm.com/
Python ရဲ d
့ ecision maker မွာ ဘာေတြပါလဲဆုိေတာ
့ if, if .. else, if .. elif .. else, nested if
တုိ ပ
့ ါ၀င္ပါတယ္။ အဲ့ေကာင္ေတြကို တစ္ခုခ်င္း ေလ့လာျကည့္က် ရေအာင္။
4.1 if statement
if (x < 5):
print (“x is less than 5”)
64
http://crossnetmm.com/
If သည္ သူ ေ
့ နာက္က condition မွန္မွ (true ရမွ) သူနဲ သ
့ က္ဆုိုင္တဲ (့ Block of code) statement ေတြ
ကို ဆက္ျပီး အလုပ္ လုပ္ပါတယ္။ condition မကိုက္ရင္ (False ရရင္) .. သက္ဆုိင္ရာ if ရဲ ့ statemnt
ေတြကိုေက် ္ ာသြြားျပီးေတာ
့ ေအာက္က ေကာင္ေတြကို ဆက္လုပ္ပါတယ္။
65
http://crossnetmm.com/
# ကို 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 ထုတ္မွာပါပဲ။
68
http://crossnetmm.com/
69
http://crossnetmm.com/
ေရးျပီး run လိုက္လိ့ ု အသက္ေမးရင္ ၁၈ လိ့ ု ထည့္လိုက္ရင္ if(Age >= 18) condition က true ျဖစ္တာမုိ့ သူ့
ေအာက္က code နွစ္ေျကာင္းအလုပ္လုပ္ပါတယ္။
70
http://crossnetmm.com/
Age က 10 ျဖစ္တာမုိ ့ if(Age >= 18) ဆုိတ့ ဲ condition သည္ False ျဖစ္သြားပါတယ္။ အဲ့တာေျကာင့္ 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 က် ) မဟုတ္ပဲ အေပၚ
ဆံုးေရာက္ေနမယ္ ဆုိရင္ ?
73
http://crossnetmm.com/
ေယာကၤ
် ားေလးဆုိရင္ အသက္၁၈ ႏွစ္နဲ အ
့ ထက္ ျဖစ္ရင္ beer ၀ယ္လိ့ ရမယ
ု ္ ။ မိနး္ ကေလးဆုိရင္ေတာ
့ အသက္
၂၀ ေက် ္ ာမွ ၀ယ္လိ့ ရမယ
ု ္ ။ အဲ့အတြက္ေျကာင့္ user ဆီကေန Age နဲ G
့ ender ကို Input အေနနဲ ေ
့ တာင္းလို
က္ပါတယ္။ အဲ့တြက္ ပထမ if block သည္ အသက္ကို စစ္ျပီးမွ ေနာက္ if block သည္ Gender ကို စစ္ျပီး
အေျဖ result ျပန္ေပးပါတယ္။
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
● For Loop
● While Loop
● Nested loop
75
http://crossnetmm.com/
ခု 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/
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 အလုိက္ တစ္ခု ျပီး
တစ္ခု ထြက္လာပါလိမ့္မယ္။ ;-)
ဟုတ္ျပီး အဲ့ေတာ
့ 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 မဟုတ္ဘူးေနာ္..
79
http://crossnetmm.com/
80
http://crossnetmm.com/
ထပ္ျပီး ေတာ
့ ဘာစမ္းျကည့္ဦးမလဲဆုိေတာ
့ စံုကိန္းေတြ သတ္သတ္ထုတ္မယ္ မကိန္းေတြ သတ္သတ္ ထုတ္ျ
ကည့္မယ္။ ေအာက္ကုတ္ကို မျကည့္ပဲ စမ္းေရးျကည့္ပါ။
English စာမွာ ရွိတ့ ဲ while ကို သံုးသလိုပါပဲ။ ေအာက္က sentence ေလးကို တစ္ခ်က္ ျကည့္ ျကည့္ပါ။
He read the book while waiting for the bus
81
http://crossnetmm.com/
82
http://crossnetmm.com/
ခု 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/
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 ကေတာ
့ အကုန္ လံုးျပီး သြားမွ သူ့ဆီေရာက္လာမွ အလုပ္ လုပ္တာပါ။
84
http://crossnetmm.com/
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 ကို ျပန္တက္ ပါ
တယ္။
85
http://crossnetmm.com/
ျပန္ျပီးေတာ
့ run ျကည့္လိုက္ပါ။
86
http://crossnetmm.com/
Loop ေတြ ပံုမွန္ အတုိင္း loop ေနတာ sequence အလိုက္သြားေနတာ ကို control လုပ္ဖုိ့ အတြက္နုိ
င္တဲ့statement 3 ခု ရွိပါတယ္။
● Break statement
● continue statement
● pass statement
87
http://crossnetmm.com/
ေနာက္ထပ္ example တစ္ခုေလာက္ ထပ္ျကည့္က် ရေအာင္။ Quit လု့ ိ မရိုက္မခ်င္း inpute ၀င္လာ
တဲ့string ေတြရဲ l့ en ကို ေဖာ္ျပေပးမယ့္ .. program ေလး တစ္ခု ေရးျကည့္ပါ။
88
http://crossnetmm.com/
89
http://crossnetmm.com/
ဘယ္လိုေနရာေတြမွာ သံုးလဲဆုိေတာ
့ ကိုယ္က Program တစ္ခုေရးေနတယ္ေပါ့။. အဲ့ခ်ိန္မွာ
တ functionာနစ္ခ်ိဳ ့ function ေတြ loop ေတြကို reserve လုပ္ထားခ်င္တယ္.. future purpose အတြက္
ထည့္ေရးမယ္ေပါ့ ဒီတုိင္း function/loop ပဲ ထားခဲရ
့ င္လဲ error တက္ပါတယ္။ အဲ့တြက္ေျကာင့္ ေအာက္က
လုပ္မယ့္ action ကို pass အေနနဲ ထ
့ ားခဲခ
့ ် င္းျဖင့္ program ကို error လဲ မတက္သလို ဘာ effect မွ မျဖ
စ္ေစေတာ
့ ပါဘူး။
ပထမဆံုး datetime Module ကို import လုပ္ပါ။ import လုပ္တယ္ဆိုတာက အဲ့module ျကီး တစ္
ခုလံုးကို ခုကုိယ္ေရးေနတဲ့ ဒါမဟုတ္ run ေနတဲ့ program/script ထဲ ကို ထည့္လိုက္တာမဟုတ္ပါဘူး..
Pythone ေရ ငါအဲ့ဒီ moduel ေတြကိုေတာ
့ သံုးမယ္လိ့ ု ျကိဳေျပာထားတဲ့ ပံုစံပါ။ ေအာက္က screenshot ကို
တစ္ခ်က္ ျကည့္ ျကည့္လိုက္ပါ။
90
http://crossnetmm.com/
91
http://crossnetmm.com/
ရလာတဲ့ result မွာ date ေကာ time ေကာ အကုန္ ပါေနတာကို ေနတာကို ေတြ့ရပါတယ္။ date ကို
ပဲ ျကည့္ခ်င္တယ္ဆုိရင္ေတာ
့ ..
အခုလို ့ လက္ရွိ ရွိေနတဲ့ date, time တင္မဟုတ္ပဲ ကိုယ့္စိတ္ျကိဳက္ data ထည့္ျပီးလဲ format က် ေ
အာင္ ျပန္ထုတ္လိ့ ရပါတယ
ု ္။
92
http://crossnetmm.com/
ေအာက္က ပုံေလးနဲ ရ
့ ွင္းျပထားတာကို ျကည့္လိုက္ရင္ ပိုရွင္းသြားပါလိမ့္မယ္။
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 ကို ရလာပါလိမ့္မယ္
94
http://crossnetmm.com/
** import [ module ] **
Import ဆုိျပီး ေနာက္က module ပဲ ေရးထားတဲ့ အတြက္ အဲ့ module ေအာက္က ေကာင္ေတြကို ေ
ခၚသံုးလို ရ
့ တယ္။
ကိ္ ယ
ု ့္ သံုးခ်င္တ့ ဲ item ကို ပဲ ယူတာျဖစ္လ့ ို သံးု မယ့္ item ေတြကို control လုပ္နုိင္တယ္။
သူက code ေခၚသံုးတဲ့ အခ်ိန္က် ေရးရတာသက္သာတယ္။ အေရွက
့ box အထုပ္ ဥပမာ နဲ ့ ျပန္ေျပာရရ
င္from module import [ ] သည္ box ကို ဖြင္ ေ
့ ပးထားတာနဲ တူပါတယ္။ ဒီတုိင္း ယူသံုးလိုက္ယံုပါပဲ။
95
http://crossnetmm.com/
From sys import platform ဆုိျပီး sys moduel ထဲ က platform ကို import လုပ္လိုက္မွ သံုးလိ့ ု
ရသြားတာပါ။ ခု က် ြန္ေတာ
္ python သံုးေနတဲ့ platform သည္ cygwin ျဖစ္တာမို ့ cygwin ဆုိျပီး result ထြ
က္လာတာပါ။
*** >> Using from module import * << is not Best practice ***
Import * ကို ျဖစ္နုိင္ရင္ မသံးု ေစခ်င္ပါဘူး. Module ကို ယူတာမဟုတ္ပဲ.. Module ထဲက ရွိသမွ်
item ေတြအကုန္ကို ခုလက္ရွိ runေန / ေရးေန တဲ ထ
့ ဲ ကို ဆြဲသြင္းလိုက္တာပါ။ ခုထိေတာ
့ ေတြးျကည့္ရင္ အ
ဆင္ေျပ ေနသလိုပဲ ေနာ္။ ဒါေပမယ့္ သူက နာမည္တူတာေတြရွိရင္ overwrite တဲ ျ့ ပသနာရွိပါတယ္။
96
http://crossnetmm.com/
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/
IMPORT အေျကာင္းေတာ
္ ေတာ
္ ေလး သိသြားျပီဆုိေတာ
့ datetime ဘက္ျပန္လွည့္က် ရေအာင္။
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 ထြက္ပါလိမ့္မယ္။
98
http://crossnetmm.com/
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 တစ္ခုပါ။
100
http://crossnetmm.com/
ခုသံုးျဖစ္ခတ
ဲ့ ့ ဲ format code ေလးေတြပါ။
6.3 strptime()
Line no.3 မွာ datetime ေျပာင္းမယ့္ string တစ္ခု ကို date_string ဆိုတ့ ဲ variable ထဲ ကို ထည့္ထားပါ
တယ္။ line5 မွာ date_string ထဲမွာ ရွိတ့ ဲ string ကို Print ထုတ္ျပထားပါတယ္။ Line6 က က် ေတာ
့ မွာ
က်ေ တ ာ့ date_string က ဘာ data type ျဖစ္တယ္ဆိုတာကို သိေအာင္ print ထုတ္ျပထားပါတယ္။
101
http://crossnetmm.com/
မတူညီတ့ ဲ ေနရာေဒသက နုိင္ငံေတြရဲ ့ real time (လက္ရွိ အခ်ိန္) ကို သိဖုိ့ဆုိရင္ ေတာ
့ pytz
ဆုိတ့ ဲ module ကို သံုးျပီးေတာ
့ ထုတ္လို ရ ့ ပါတယ္။ ဒါေပမယ့္ ဒီေနရာမွ တစ္ခုရွိတာက pytz
module သည္ built-in ပါမလာပါဘူး။ အဲ့ေတာ ့ သူ က
့ ို ထပ္သြင္းမွ ရမွာပါ။ အလြယ္ဆံုးနည္းကေတာ ့
pip ကို အသံုးျပဳ ျပီးေတာ
့ ထည့္ လိုက္တာပါပဲ။ Python3.4 ေနာက္ပုိင္း version ေတြမွာေတာ ့ pip
သည္ install လုပ္ျပီးသားပါ။ python 2.7 လို အရင္တုန္းက version ေတြကေတာ ့ pip ကို ထပ္ထ
ည့္ ေပးရပါတယ္။
** pip installation **
https://www.makeuseof.com/tag/install-pip-for-python/
102
http://crossnetmm.com/
Linux အတြက္ကေတာ
့ apt-get install python-pip, apt-get install python3-pip ပါ။
Line 1 => datetime module ထဲက datetime class ကို import လုပ္ပါတယ္။
Line 2 => pytz module ကို import လုပ္ပါတယ္။
Line 4 => pytz.timezone() အတြက္ object ကို tz_NY ဆိုတ့ ဲ variable ကို သံုးျပီး တည္ေဆာက္ လိုက္
ပါတယ္။
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 လုပ္ပါတယ္။
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 ဆက္ပါတ္ေနပါေတာ
့ တယ္။
104
http://crossnetmm.com/
က် ြန္ေတာ
္ တု့ ိ Network သမားေတြအေနနဲ ့ ကေတာ
့ က် ြန္ေတာ
္ တု့ ေတြ
ိ ရဲ ့data ကို file ေတြထဲကို
ထည့္တာ.. ဒါမွမဟုတ္.. File ထဲမွာ store လုပ္ထားတဲ့ data ကိုျပန္ယူဖုိ အ
့ တြက္ စသည္ျဖင့္ သံုးက် ပါတယ္၊
File handling က Web application သမားေတြအတြက္လဲ အေရးျကီးပါတယ္။ ကဲ စလိုက္က် ရေအာင္ ဗ်ာ။
Line no.7 မွာ ရွိတ့ ဲ example code က ေ တ ာ့ index No ေတြကို စိတ္ျကိဳက္ေရးျပီး ထုတ္လိ့ ရတယ
ု ္
ဆုိတာကို ျပထားတာပါ။ index 1 ကို အရင္ထုတ္ျပီးမွ index0 ကို ထုတ္ေပးထားတာပါ။
Python ကေနျပီးေတာ
့ print() လိုက္တဲ့အခ်ိန္မွာ hello ေနာက္က { name } ကိုေတြ ေ
့ တာ
့
keyword name မွာ ရွိတ့ ဲ data ျဖစ္တ့ ဲ dear ကို ထုတ္ယူလိုက္ပါတယ္။ အဲ့ေနာက္ {greeting} မွာရွိတ့ ဲ data
ျဖစ္တ့ ဲ GoodNight ကို လဲ ထုတ္ယူလိုက္ျပီး အကုန္စုေပါင္းျပီး format က် က် print ထုတ္ျပပါတယ္။
105
http://crossnetmm.com/
ခုအေပၚမွာ ေျပာခဲတ
့ ့ ဲ နည္းလမ္းကို သံုးလို ရ
့ သလို C programming မွာ တုန္းကလို % operator ကို
သံုးျပီးေတာ
့ လဲ print ထုတ္မယ့္ string ကို format ခ် လိ့ ရပါတယ
ု ္။
Name ဆိုတ့ ဲ variable ထဲ ကို ‘John’ ဆိုတ့ ဲ string value တစ္ခု ထည့္ထားပါတယ္။ print ထုတ္
လိုက္တဲ့ အခ်ိန္မွာ %s ဆိုတာသည္ string variable မွာ ရွိတ့ ဲ data ကို ထုတ္ရမယ့္ ေနရာကို ညြန္းဆုိထား
တာပါ။ အဲ့တာေျကာင့္ Hello, ေနာက္မွာ John ဆုိျပီး ထြကလာတာပါ။
106
http://crossnetmm.com/
အေရွ မ
့ ာွ တုန္းက detail မေျပာခဲရ
့ ေတာ
့ .. အဲ့တာေလးကို သိေစခ်င္လို ပ
့ ါ။ ကဲ အဓိက အေျကာင္း
အရာ ျဖစ္တ့ ဲ file ေတြ ဖြင့တ
္ ာပိတ္ထား data အသြင္း အထုတ္ လုပ္တာ။။ ဖ်က္ပစ္တာ စတာေတြကို ေလ့လာ
က် စို ။့
107
http://crossnetmm.com/
print(myfile.read()) ဆုိျပီးေတာ
့ read() method ကို သံးု ျပီး ဖတ္လိ့ ရလာတာေတြ
ု ကို user ျမင္
ရေအာင္ print ထုတ္ျပပါတယ္။
read() နဲ ဖ
့ တ္လိုက္တဲ့ အခ်ိန္မွာ kp.txt ထဲမွာ ရွိသမွ် အကုန္ ထြက္လာပါတယ္။ အဲ့လိုမဟုတ္ပဲ ကို
ယ္ဖတ္ခ်င္သေလာက္ စာလံုးအေရးအတြက္နဲ ပ
့ ဲ ျဖစ္ျဖစ္ တစ္ေျကာင္းခ်င္းပဲ ျဖစ္ျဖစ္လဲ ဖတ္လို ရ
့ ပါတယ္။
read(5) ဆုိရင္ေတာ
့ 5 သည္ ဖတ္မယ့္ စာလံုးအေရအတြက္ ၅ လံုး ဖတ္မယ္လို ့ ေျပာတာပါ။ အကယ္လိ့ ု 10
ဆုိရင္ စာလံုးေရ ၁၀ လံုး ထိ ဖတ္ျပီး print ထုတ္ေပးသြားမွာပဲ ျဖစ္ပါတယ္။
readline() ကေတာ
့ တစ္ေျကာင္းခ်င္းစီ ဖတ္ျပီးေတာ
့ print ထုတ္ေပးတဲ ပ
့ ံုစံပါ။ readline() တစ္ခါ
ဆုိ ပထမတစ္ေျကာင္းဖတ္တယ္.. ေနာက္တစ္ခါ readline() ဆုိ ေနာက္ ဒုတိယ တစ္ေျကာင္း ဖတ္တယ္ .. အဲ့
လိုမ်ိဳးနဲ .့ . တစ္ေျကာင္းခ်င္ ဖတ္သြားပါတယ္။
108
http://crossnetmm.com/
ဖုိင္ေတြ ဖြင့ထ
္ ားလား ပိတ္ထားလား.. ျပီးေတာ
့ ဘာ mode နဲ အ
့ လုပ္လုပ္ ေနလဲ file name စသည္ ျ
ဖင္ .့ . စစ္ခ်င္ရင္ေတာ
့ .. နာမည္စစ္မယ္ဆုိ fileobject.name() ။ ဖြင္တာ ပိတ္တာ စစ္မယ္ဆုိ
fileobject.closed ။ mode ကို စစ္မယ္ဆုိ fileobject.mode() ။ စသည္ျဖင့္ print ထုတ္ျကည့္နုိင္ပါတယ္။
ဘာလို အ
့ ့ လိ
ဲ ုေတြစစ္လဲ ဆုိေတာ
့ ကိုယ့္ script အရ ဖြင့တ
္ ့ ဲ mode ေတြ file ပိတ္ျပီးျပီလား ဖြင့ထ
္ ား
တုန္းလား.. စသည္ျဖင့္ စစ္ဖုိ့လိုလာရင္ စစ္လို ရ
့ ေအာင္ပါ။
109
http://crossnetmm.com/
ေအာက္က ဇယားကေတာ
့ python ရဲ ့ file mode ေတြနဲ ့ သူတ့ ရဲ
ုိ လ
့ ုပ္ေဆာင္ခ်က္ေတြပါ။
Mode Description
'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.
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 ဖုိင္ ကို ဖြင့ျ္ ကည့္လိုက္ရင္ ေအာက္ပါ အတုိင္း ေတြ ရ
့ မွာပဲ ျဖစ္ပါတယ္။
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/
Python ရဲ O
့ S module မွာရွိတ့ ဲ method ေတြသည္ file-processing လုပ္ရာမွာ အေထာက္အကူ ျ
ပဳပါတယ္။ ဘယ္လိုမ်ိဳးေတြလဲဆုိေတာ
့ ဖုိင္ေတြ ဖ်က္တာ နာမည္ေျပာင္းတာ directory တည္ေဆာက္တာ စ
တဲ့ နည္းလမ္းမ်ိဳးေတြြပဲ ျဖစ္ပါတယ္။ ဆက္ျပီး ေလ့လာျကည့္က် ရေအာင္ဗ်ာ ။
Remove() Method
112
http://crossnetmm.com/
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')ပဲျဖစ္ပါတယ္။
အဲ့လို runtime error ေတြ ျဖစ္လာတာနဲ ့ Python သည္ exception object ကို create လုပ္ပါတ
ယ္။ အဲ့ error exception ကို handle မလုပ္ခရ
ဲ့ င္ Python သည္ traceback လုပ္လ့ ရေအာင္
ို ဘယ္ေနရာ
မွာ ဘယ္လိုျဖစ္တယ္ ဘာေျကာင့္ျဖစ္တယ္ဆုိတာကို print ထုတ္ေပးပါတယ္။
113
http://crossnetmm.com/
114
http://crossnetmm.com/
RuntimeError Raised when an error does not fall under any other
category.
115
http://crossnetmm.com/
116
http://crossnetmm.com/
အေပၚမွာ ဆုိခသ
ဲ့ လို ပဲ.. Error ရွိရင္ exception ရွိတာမို .့ . ျဖစ္လာတဲ့ exception ကို handle မလု
ပ္ရင္ ခုလက္ရွိ run ေနတဲ p
့ rocess သည္ error ဘာေျကာင့္ျဖစ္တ့ ဲ ဆိုတ့ ဲ error message ကို ျမင္ရျပီးေ
တာ ့ stop ျဖစ္သြားပါတယ္။ ေျပာရရင္ေတာ
့ crash ျဖစ္သြားတာေပါ့ဗ်ာ .့ .
အေရွ က
့ 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: သည္ ဘာမွမလုပ္ေတာ
့ ပဲ ေက် ္ ာသြားပါတယ္။
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 ၃ခု ထုတ္ေပးပါတယ္။
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 ကို ထုတ္ေပးတာပါ။
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 ထုတ္ေပးပါတယ္။
120
http://crossnetmm.com/
အဲ့ေတာ
့ ကိုယ္က ကုတ္ေရးမယ့္သူပဲ.. ကိုယ့္ script/code ေတြကို ကိုယ္သံးု မယ့္ design နဲ က
့ ိုက္ေ
အာင္ စိတ္ျကိဳက္ထားပါ။
121
http://crossnetmm.com/
122
http://crossnetmm.com/
အဲ့လိုထြက္ဖုိ့ အတြက္ကေတာ
့ 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 ဆုိျပီး ခြဲထုတ္ထားပါတယ္။
124
http://crossnetmm.com/
result ကိုေတာ
့ ေအာက္ပါအတုိင္း ျမင္ေတြ့နုိင္ပါတယ္။
ဟုတ္ျပီး ဒီေလာကဆုိရင္ေတာ
့ try…except ကိုေတာ
့ နားလည္သေဘာေပါက္ေလာက္ျပီလို ယ
့ ူဆပါ
တယ္။ ေနာက္တစ္ခု ဆက္က် စို ။့
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/
127
http://crossnetmm.com/
User ကေနျပီးေတာ
့ input အမွား ရုိက္မိရင္လဲ program သည္ exception ကို handle လုပ္ထား
တဲ့ အတြက္ crash ျဖစ္မသြားေတာ
့ ပါဘူး။ အေျဖကို ေအာက္က result မွာ ျကည့္ပါ။
တစ္ခုမွထားရမွာက finally: block မွာရွိတဲ ့ code ကို အျမဲတန္း execute လုပ္ပါတယ္။ try:Block
မွာ ရွိတ့ ဲ code က မွားရင္ (error တက္ရင္) except: block ကို ေရာက္မွာ ျဖစ္ျပီး error မတက္ရင္ေတာ
့
else: block ကို ေရာက္ပါမယ္။ except ျဖစ္ျဖစ္ else ျဖစ္ျဖစ္ ကေန run ျပီးရင္ေတာ
့ finally: block က ကု
တ္ေတြကို အေပၚက ပံုမွ ေဖာ္ျပခဲသ
့ လိုပဲ အျမဲ execute လုပ္ကို လုပ္ပါတယ္။
128
http://crossnetmm.com/
ခုဒီကုတ္ေလးရဲ ့ ရည္ရြယ္ခ်က္ကေတာ
့ 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 တဲ့ အတြက္
ေျကာင့္ပါ။
129
http://crossnetmm.com/
ကဲ 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 လုိ ေ
့ ခၚတာပါ။
131
http://crossnetmm.com/
132
http://crossnetmm.com/
ဒီတစ္ခါက် ေတာ
့ 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/
Keyword Argument ေတြသည္ function call ေခၚတဲ့ေနရာမွာ argument လြဲတာ အစီအစဥ္ မက်
ျဖစ္တာမ်ိဳး မရွိေအာင္ လုပ္ေဆာင္ေပးပါတယ္။။ ဒီေနရာ မွာ တစ္ခု မွတ္ထားရမွာကေတာ
့ function call လုပ္
တဲ့အခါမွာ သံုးတဲ့ argument နာမည္နဲ f့ ucntion မွာ define လုပ္ခတ
ဲ့ ့ ဲ parameter နာမည္ကေတာ
့ တူရပါမ
ယ္။
135
http://crossnetmm.com/
အေရအတြက္ ျကိဳမသိနုိင္တ့ ဲ argument ေတြကို handle လုပ္မယ္ Python function ေလး တစ္ခု
ကို arbitrary argument ေတြသံုးျပီးေတာ
့ define လုပ္ျကည့္က် ရေအာင္ဗ်ာ ။။
136
http://crossnetmm.com/
137
http://crossnetmm.com/
ပား သိဖုိ က
့ ေတာ
့ python ထဲကို ထဲထဲ၀င္၀င္ ေရးတာျကာမွ ပိုျပီး သိျမင္လာပါလိမ့္မယ္။ ေလ့လာခါစမွာ အရ
မ္းျပီး pressure ထားျပီး မေလာပါနဲ ။့ ။ ခုေတာ
့ စမ္းျကည့္လိုက္ပါဦး.. ;-)
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/
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 ကို ခ်ေရးျပီး ေ
လ့လာျကည့္ပါ။ စာလို ေရးရတာဆုိေတာ
့ အတတ္နုိင္ဆံုး နားလည္ေအာင္ေတာ
့ ေရးေပးထားပါတယ္။ စာသင္ခ
န္းလိ့ မဟု
ု တ္ေတာ
့ ေကာင္းေကာင္းနားမလည္မွာ ဆုးိ လိ့ ပါ။
ု
139
http://crossnetmm.com/
Open Systems Interconnection model (OSI model) ကို Computer system ေတြႀကားမွာ
error-free
ဘယ္လိုေႀကာင့္လဲ ဆိုေတာ
့ .. ကြန္ပ်ဴတာ ထုတ္တဲ့ company ေတြ အမ်ားႀကီးရွိသလုိ ကြန္ပ်ဴတာေတြ
Netwrok
ေတြ အျပန္အလွန္ခ်ိတ္ဆက္ဖုိ့ device ထုတ္တဲ့ company ေတြ ကလဲ အမ်ားႀကီးပါ. မတူညီတ့ ဲ company
ေတြက
ထုတ္တဲ့ နည္းပညာ မတူတ့ ဲ device ေတြ ကႊန္ပ်ဴတာေတြ, Network ေတြ တစ္ခုန့ဲ တစ္ခု အျပန္အလွန္
ေခ်ာေခ်ာေမြ ေ
့ မြ ့
နဲ့ အခ်တ
ိ ္ အဆက္မိေစဖုိ့ စံသတ္မွတ္ေပးထားတဲ့ standard model တစ္ခု ခ်မွတ္ခဲတ
့ ာပါ. ေျပာရရင္ေတ့ာ
ဗ်ာ..
140
http://crossnetmm.com/
Computer ေတြ Node ေတြ တစ္ခုန့ဲ တစ္ခုႀကားမွာ သံုးမယ့္ physical media ေတြ Encrypting Type
ေတြ rule ေတြ
10.1.Physical Layer
ျပီးေတာ
့ 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/
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 ျဖစ္ပါတယ္..
143
http://crossnetmm.com/
144
http://crossnetmm.com/
ဘယ္လိုမ်ိဳးလဲဆုိေတာ
့ သူရဲ့ အေပၚ 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/
ပါျပီး. ;-)
လုိပါတယ္။
146
http://crossnetmm.com/
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 ကေတာ
့ အတူတူပါပဲ
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/
150
http://crossnetmm.com/
Lab စလုပ္လုပ္ခ်င္း ဒါမွမဟုတ္ ခုမွ စေလ့လာတဲ့ သူေတြ မွားတက္က် တာက ကိုယ္ဘယ္ mode ကို ေ
ရာက္ေနလဲ သတိမထားမိတာနဲ့.. Configuration command ေတြ mode မွားရိုက္တက္က် တာပဲ..
အဲ့ေတာ
့ မွတ္ထားရမွာက
switch# ဆုိ enable mode လိ့ ု ေခၚတဲ့ privilege mode သူက # sign ေလးနဲ .့ .
151
http://crossnetmm.com/
ပံုမွာ ျပထားတဲ့ အတိုငး္ exit နဲ့ဆုိ တစ္ဆင့္ခ်င္း ထြက္သြားမွ ျဖစ္ျပီး end/ ctrl+z ကုိနွိပ္ရင္ေတာ
့
enable mode ကို တန္းေရာက္သြားမွာပဲ ျဖစ္ပါတယ္။
152
http://crossnetmm.com/
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 က် ရင္ လုပ္ရင္းနဲ ့ မ်က္စိထဲ ပိုျမင္လာပါလိမ့္မယ္။
155
http://crossnetmm.com/
Dot1q မွာ native vlan ကို tag လုပ္ျပီးမသယ္ပါဘူး.. Native vlan ဆုိ
Untag ပါ။ default Native VLAN က VLAN 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/
VLAN Lab 2
Configure and implement VLan
157
http://crossnetmm.com/
Switch1 ရဲ့ vlan 10/20 မွာရွိတ့ ဲ PC ေတြကေန တစ္ျခားဘက္မွာရွိတ့ ဲ switch2 ရဲ့ VLAN10/20
က PC
ေတြကို ping ျကည့္ပါ။ ping လု့ ိ ရဦးမွာ မဟုတ္ပါဘူး..
####Verification######
#show interface fastethernet0/x switchport
#show vlan brief
158
http://crossnetmm.com/
#ping PC to PC
159
http://crossnetmm.com/
Switch#
#show interfaces trunk
160
http://crossnetmm.com/
ခု ဒီ 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 ေတြမွာပါ အဆင္ေျပတယ္။
162
http://crossnetmm.com/
ဘာလု့ လဲ
ိ ဆိုေတာ
့ .. VMware မွာက nested virtualization ကို support ေပးတဲ့အတြက္ေျကာင့္ပါ။
GNS3 VM မွာက ubridge ကိုအသံုးျပဳျပီးေတာ
့ compute server (Dynamips, QEMU,.etc) ေတြ တစ္ခုခု
နဲ့ တစ္ခုခု UTP tunnel လုပ္ျပီး ခ်ိတ္ဆက္တဲ့အခါက် nested virtualization ရွိမွာ အဆင္ေျပမွာပါ။ virtual
box သံုးမယ္ဆုိရင္ေတာ
့ ေနွးေကြးေနပါလိမ့္မယ္။ vbox version6 မွာေတာ
့ Nested virtualization ရသြား
ပါျပီ။
အဲ့ေတာ
့ ခုလုပ္မယ့္ task ကို ျပန္ေျပာမယ္..
1. Install gns3
2.Install VMware workstation/Player or Virtual Box
3.Install GNS3 VM on Virtual Machine
တစ္ခုမွတ္ထားရမွာက GNS3 က version 2.1.11 ဆို GNS3 VM ကလဲ version 2.1.11 ျဖစ္မွ ရမွာ
ပါ။ တစ္ျခား version ျဖစ္လ့ မရပါဘူ
ို း။
163
http://crossnetmm.com/
က ေ တ ာ့ linux ေကာ window မွာပါ အတူတူပါပဲ။ ခု ubuntu မွာဆို ppa(Personal Package Archive) အ
ရင္ဆံုး add လိုက္ပါ။
sudo add-apt-repository ppa:gns3/ppa
164
http://crossnetmm.com/
165
http://crossnetmm.com/
GNS3 တက္လာပါလိမ့္မယ္။
166
http://crossnetmm.com/
ဟုတ္ျပီး အဲ့လိ့ ု PPA add တ ာ souce list ထည့္တာေတြ မလုပ္ပဲ pip ကိုသံုးျပီး install လုပ္တ့ ဲ နည္းကို ျပမယ္။
Pip ကို သံုးမယ္ဆုိ သူက python/python3 run လု့ ရတဲ
ိ ့ စက္ေတြမွာ ဆုိ ထည့္လိ့ ု ရတယ္။က် ြန္ေတာ
္ ကေတာ
့ ခုေျပာတဲ့ န
ည္းကိုသံုးျဖစ္တာ ပိုမ်ားတယ္။ တစ္ခုမွတ္ထားရမွာက အေပၚမွာ ေျပာခဲတ
့ ာသည္ ppa/source ေတြ ထည့္ျပီး GNS3 ကို သြ
င္းတာ။
ကဲ စမယ္.. 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 လုပ္ပါ။
167
http://crossnetmm.com/
ျပီးေတာ
့ GNS3 VM မသံုးပဲ ကုိယ္လိုတာေတြပဲ (qemu, iouyap, ubridge, dynamips...). ထည့္သံုးမယ္ဆုိလဲ သံုးလိ့ ရ
ု
တယ္။
168
http://crossnetmm.com/
169
http://crossnetmm.com/
ကဲ လုိေနတာမရွိေတာ
့ ဘူးဆိုရင္ေတာ
့ ေခ်ာေခ်ာ ေမြ ေ
့ မြ ျ့ ပီးသြားျပီေပါ့။ တစ္ခါတစ္ေလ ကိုယ္သံုးတဲ့ linux desto မွာ
တစ္ျခား သူမ်ားနဲ့ မတူတ့ ဲ error မ်ိဳး တတ္တက္တယ္။ အဲ့တာက် googling လုပ္ျပီး သူ့ ဆုိင္ရာ ဆုိင္ရာ communityေတြ
site ေတြမွာ ေမြေနွာက္ဖက္ရတာေပါ့။ အေတြ့အျကံဳ ရပါတယ္။ စိတ္မပ်က္ပဲ စမ္းျကည့္က် ပါ။ မရရင္လဲ လာေမးလိ့ ရပါတယ
ု ္။
170
http://crossnetmm.com/
ကဲ တစ္ခုေတာ
့ ေတာ
့ ျပီးသြားျပီး.. GNS3 VM နဲ တ
့ ြဲ ျပီး lab လုပ္ဖုိ့အတြက္ VMware workstation/player လုိပါတ
ယ္..VMware Player က ေ တ ာ့ commercial use မဟုတ္ရင္ free သံုးလိ့ ရေတာ
ု ့ အဆင္ေျပမွာပါ။ VMware
Workstation ကို crack ရွိရင္လဲ သံုခ်င္သံုးေပါ့။
ခုဒီမွာေတာ
့ … VMware player ကို သြင္းျပထားပါတယ္။ vmplay သည္ commercial use မဟုတ္ရင္ free သံုးလို ရ
့ ပါတ
ယ္။
171
http://crossnetmm.com/
Download ရ လာမယ့္ linux အတြက္ install လုပ္ရမယ္ file သည္ *.bundle နဲ့ ဆံုး
ပါတယ္။ သူ့ကို executable permission ေပးျပီး execute လုပ္လုိက္ပါ။ ေအာက္မွာ
လုပ္ျပထားပါတယ္။
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/
အဲ့ေနာက္မွာေတာ့ ေနာက္ထပ္ လုိေနတာျဖစ္တ့ ဲ GNS3 VM ကို ေဒါင္းပါ။ ကိုယ္က VMware သံုးမွာလား.. Virtual
box သံုးမွာလား..
ESXI သံုးမွာလား.. သံုးမယ့္ေကာင္အတြက္ လုိအပ္တ့ ဲ GNS3 VM တစ္ခုကို ပဲ ေဒါင္းပါ။။ တစ္ခုမွတ္ထားဦးေနာ္.. GNS3
VM version သည္ GNS3 version နဲ တ ့ ူမွ အဆင္ေျပမွာပါ။
173
http://crossnetmm.com/
174
http://crossnetmm.com/
175
http://crossnetmm.com/
ျပီးမွ GNS3 ကို run ပါ။ Setup Wizard မွာ တစ္ခါတည္းေရြးေပးလိ့ ရသလု
ု ိ ...GNS3 menu ထဲက Edit >>
Perferences မွာ လဲ သြားျပီး ေရြးေပးလိ့ ရပါတယ
ု ္။
176
http://crossnetmm.com/
177
http://crossnetmm.com/
VMware လား VirtualBox လားေရြးေပးလိိုက္ရင္ auto GNS3 VM ကို select မွတ္ ပါတယ္။
တု့ ေတြ
ိ ကို ေနာက္ထပ္ ေမးလာမွာ လုပ္ရမွာက IOSေတြIOUေတြ စတာေတြကို ဘယ္လု့ ိ run မလဲ ေပါ့။ GNS VM
သံုးရင္ သူ့ေပၚမွာ run တာ အေကာင္းဆံုးပါပဲ။။
IOSေတြIOUေတြ ေဒါင္းဖုိ့ လင့္ပါ။
ေနာက္တစ္ခုကေတာ
့ SourceForge ကေန တင္ေပးထားတဲ့ GNS3 နဲ ပ
့ ါတ္သက္တဲ A
့ ppliance ေတြ Fileေတြ ပါ။
https://sourceforge.net/projects/gns-3/files/
178
http://crossnetmm.com/
179
http://crossnetmm.com/
GNS3 VM ေပၚမွာ run ဘယ္ ေျပာလိုက္ပါ။ အဲ့လိုမွ မဟုတ္ ကိုယ့္ စက္ local OS မွာ မွ run ခ်င္ရင္ေတာ
့ တစ္ျခားလိုတာေ
တြ ျဖစ္တ့ ဲIOU support ရေအာင္ သြင္းေပးဖုိ့လိုအပ္ပါတယ္။
If_you_want_IOU_support
180
http://crossnetmm.com/
IOU binary ဖုိင္ ကို ေရြးေပးပါ။ L2 ဆိုတာသည္ layer 3 image ျဖစ္ျပီး L3 က ေ တ ာ့ Layer 3 image ပါ။
181
http://crossnetmm.com/
182
http://crossnetmm.com/
ဖုိ့ရယ္ လုိပါတယ္။ ေပးထားတဲ့ ထဲမွာ iourc.txt ဆုိတာေလး ပါပါတယ္။ အဲ့ေကာင္ကိုBrowse လုပ္လုိက္ပါတယ္။ ခုေဘးမွာ
ျပတဲ့ ပံုအတုိင္းရ ပါလိမ့္မယ္။
License error တက္ရင္ python license generator ေလးကိုသံုးျပီးေတာ
့ ထုတ္လိ့ ရပါတယ
ု ္။
https://gist.githubusercontent.com/paalfe/8edd82f780c650ae2b4a/raw/
bd7b6b8a81c338359e6de4ff0ed0def9f7dc9146/CiscoKeyGen.py
183
http://crossnetmm.com/
ခုဆိုရင္ေတာ
့ GNS3 ကို GNS3 VM နဲ တ
့ ြဲသံုးျပီးIOUေတြန့ဲ ေကာင္းေကာင္း LAB လုပ္နုိင္ပါျပီး
184
http://crossnetmm.com/
12.8. Get Python Container & Ubuntu Docker image (GNS3 Appliance)
>>> https://gns3.com/marketplace/appliances
If_you_want_Docker_support
185
http://crossnetmm.com/
186
http://crossnetmm.com/
ကိုယ္သြင္းမယ့္ေကာင္ကို ယူလုိက္ပါ။
187
http://crossnetmm.com/
188
http://crossnetmm.com/
Docker သြင္းလိုက္တာပဲ ရွိပါေသးတယ္.. Container ကို pull မလုပ္ရေသးပါဘူး.. ကုိယ္သြင္းထားတဲ့ ေကာင္ကို topology
workspace မွာ Drug&Drop လုပ္လုိက္မွာ သြင္းသြားတာပါ။
189
http://crossnetmm.com/
အကုန္သြင္းျပီးသြားရင္ ကိုယ္စမ္းခ်င္တ့ ဲ device ကို right click ေထာက္ျပီိး run လုိက္ပါ အဲ့ေနာက္ right click ျပန္ေထာ
က္ျပီး console က ေ န connect လုပ္ပါ။ အဲ့တာဆုိ ရပါျပီး။
https://www.youtube.com/watch?v=KraZsFiZzMQ&t=87s
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
192
http://crossnetmm.com/
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")
194
http://crossnetmm.com/
Topology ပံု
195
http://crossnetmm.com/
Na
t Cloud က DHCP support ေပးတဲ့ အတြက္ Ubuntu ရဲ့ eth0 ကို dhcp on ေပးလိုက္ပါ
196
http://crossnetmm.com/
197
http://crossnetmm.com/
198
http://crossnetmm.com/
>>>print("Helloworld")
Helloworld
>>>
တု့ ေတြ
ိ 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/
202
http://crossnetmm.com/
203