Python Basic Version 1 (Myanmar) PDF
Python Basic Version 1 (Myanmar) PDF
Python Basic Version 1 (Myanmar) PDF
com/
1
http://crossnetmm.com/
Table of contents
#Title# .Pag
e
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
http://crossnetmm.com/
2.8 Variable 31
2.8.1 Numbers 34
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
3
http://crossnetmm.com/
5. Python Loops 70
*** >> 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
6
http://crossnetmm.com/
Intro!!
အားလံးု ပဲ မဂၤလာပါဗ်ာ…. “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ျပန္ ေပးပါတယ္။
ေနာက္ေအာက္က block ျဖစ္တ့ ဲ mov rax, 60 ဆုိျပီး rax register ထဲ ကို 60 ထည့္လိုက္ပါတယ္။ 60
သည္ sys_exit ျဖစ္ပါတယ္။ အဲ့ေနာက္ rdi ကို 0 ေပးလိုက္ပါတယ္။ syscall ေခၚလိုက္တဲအခ်ိန္ က် program
သည္ ထြက္သြားပါလိ့မ္မယ္။ High Level programming မွာ ေတာ
့ compiler က တာ၀န္ယူေပမယ့္ ခု
assembly မွာေတ့ programmer က ေနျပီးေတာ
့ exit လုပ္ေပးရပါမယ္။ မပါခဲရ
့ င္ error တက္ပါတယ္ စမ္းျက
ည့္လိ့ ု ရပါတယ္။
19
http://crossnetmm.com/
ျပီးေတာ
့ Low Level Language ေတြမွာ compiler ေတြ interpeter ေတြ မလိုအပ္ပါဘူး တုိက္ရုိက္Run နုိင္ပါ
တယ္။ High Level Language ဆိုတာက် user-friendly ပိုျဖစ္ပါတယ္ လူသားေတြအေနနဲ့ နားလည္လြယ္တဲ့
Syntx ေတြ logic ေတြန့ဲ ေရးသားထားတဲ့ source code ကိုမွ Compiler ျဖစ္ျဖစ္ Interpeter ျဖစ္ျဖစ္ သံးု ျပီး
Computer နားလည္ေအာင္ Machine Code အေနနဲ့ ေျပာင္းလဲပါတယ္။
20
http://crossnetmm.com/
$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 ေပးလိုက္ယံုပဲ.. ;-)
21
http://crossnetmm.com/
22
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
23
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
24
http://crossnetmm.com/
$ make -j 8
$ python3.6 -V
Fedora/CentOS မွာဆုိ
25
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
26
http://crossnetmm.com/
$ make -j 8
$ python3.6 -V
27
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 ဆုိျပီး ရိုက္လုိက္ပါ။
28
http://crossnetmm.com/
အဲ့လို ရိုက္လိုက္တာနဲ ့ >>> (Greater than Sign သံုးခု) ဆိုတ့ ဲ သေကၤတေလးကို ျမင္ရပါလိမ့္မယ္။ အဲ့
>>> ကို chevron prompt လု့ ိ ေခၚတယ္။ သူက command line shell လိုပါပဲ.. user ကေနျပီးေတာ
့ input/
command တစ္ခုရိုက္လိုက္တာနဲ့ result/feedback ခ်က္ခ်င္းျပန္ရပါတယ္။ ခု အေပၚက >>> လေးကိုက
user ကေန လာျပီး တစ္ခုခု command/code တစ္ခု ၀င္လာမွာ ကို ေစာင့္ေနတဲ သ
့ ေဘာမ်ိဳးပါ။ ခု print
(‘Hello world’) လုိ ရ
့ ိုက္လိုက္တာနဲ ့ Hello world ဆုိျပီး result တန္းရပါတယ္။ အဲ့လိုမ်ိဳး အလုပ္ လုပ္ပံုကို
interactive လိုေခၚပါတယ္။
2. Script mode
သူက် ကေတာ
့ text editor တစ္ခုနဲ ့ code ေတြ ေရးျပီးေတာ
့ file တစ္ခု အေနနဲ s့ aveျပီး ..
အဲ့ ဖုိင္ကိုမွ python အေနနဲ e
့ xecute လုပ္တာပါ။ save ထားတာမို့ file သည္ မဖ်က္မခ်င္း ရွိေနပါတ
ယ္။
29
http://crossnetmm.com/
Python works on different platforms သူသည္ OS ေပၚကို မမွီခုိပါဘူး.. ဘယ္ OS ေနေန python ရွိရင္
အလုပ္ လုပ္ပါတယ္။ (Windows, Mac, android, Linux, Raspberry Pi, etc)
Python has simple syntax.. Python ရဲ s့ yntax တည္ေဆာက္ပံု ပံုစံ သည္ English စာလုိမ်ိဳး.. စာပိုဒေ
္ တြ
စာသား အေနနဲ အ
့ လုပ္လုပ္ပါတယ္။ ျကည့္လိုက္ရင္ ရိုးရွင္းတာကို ေတြ ရ
့ မွာပါ။ ျပိးေတာ
့ သူသည္ scripting
language ျဖစ္တ့ အတြ
ဲ က္ program ေရးတဲ့ သူေတြကို တစ္ျခား language ေတြထက္ code နဲနဲ ေလးနဲ ့Run
ပါတယ္။
2.5 Very first Program “Hello world” and its syntax, key-words
30
http://crossnetmm.com/
ထံုးစံအတုိင္း programming Language တစ္ခု စေလ့လာရင္ output ကို Hello, world! ထုတ္တာ
ကေတာ
့ အေရွ မ
့ ွာ Example အေနနဲ ့ အျကိမ္ျကိမ္ သံုးျပခဲတ
့ ာဆုိေတာ
့ ..
>>>print (‘Hello, world!’) ဆုိတ့ ဲ Hello, world! ဆိုတ့ စာသားကိ
ဲ ု output result အေနနဲ ့ ထုတ္ျပ
တဲ့ python code ကိုေတာ
့ ရင္းနွီးေနက် မွာပါ။ ;-)
အဲ့ေတာ
့ ဟုတ္ျပီ .. print ဆုိတ့ ဲ keyword ေနာက္က ကိ္ ယ
ု ္ ထည့္ ခ်င္တ့ ဲ စာသားထည္ရင္
output ထြက္တာေတာ
့ သိျပီ.. အဲ့ေတာ
့ ေအာက္က command ေတြရိုက္ရင္ေကာ? Oupt ထြက္မ
လား..
အဲ့လိုရိုက္လိုက္ရင္ invalid syntax, syntax error , Name [ ._. ] is not defined စသည္ ျ
ဖင့္ error ေတြ တက္ေနတာကို ေတြ ရ
့ မွာပါ။ အဲ့ဆုိ လူေတြ စကား ေျပာသလို ခိုင္း ျကည့္ ရင္ .. ဘယ္
လိ့ ု တုန္ ျ့ ပန္မလဲ?..
31
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 တု့ မွ
ိ ာ သြားရိုက္ရင္ ရမွာ မဟုတ္သလို ပါပဲ။
32
http://crossnetmm.com/
Python prompt >>> ကေန help() ေခၚလိုက္ပါ။ အဲ့ေနာက္ keywords လိ့ ု ရိုက္လိုက္ရင္ python
မွာ သူ အ
့ တြက္ ရွိေနတဲ့ keywords ေတြကို ျပ ေပးပါလိမ့္မယ္။ print ဆုိတ့ ဲ keyword ကိုရင္းနွီး ျပီးသားပါ။ if
ဆုိ condition စစ္တာ while ဆုိ while loop, for ဆုိ for looping အတြက္.. စသည္ျဖင့္ေပါ့.. ေနာင္ လာမယ့္
program ေတြက keyword ေတြ သံုးရင္းနဲ သ
့ ိလာမွာပါ။ ခု keyword ဘယ္လို ျကည့္ရတယ္။။ ဘယ္ေကာင္ေ
တြက keyword ေတြ ျဖစ္တယ္ဆုိတာ သိရင္ လံုေလာက္ျပီေလ။။။
33
http://crossnetmm.com/
Python2.7 မွာ က Print ထုတ္ခ်င္တ့ ဲ ေကာင္ကို print ဆုိတဲ k့ eyword ေနာက္ကေန ‘ (single quote) OR “
(double quote) နွစ္ခုျကားမွာပဲ ထားထား ‘ [output] ‘ .. လက္သည္းကြင္းရယ္() quotes ‘ ‘ ရယ္နဲ ့ အဖြင့္
အပိတ္ထားထား (‘ [output] ‘) .. အလုပ္လုပ္ပါတယ္ .. ေအာက္ကပံုကို ျကည့္လုိက္ရင္ ရွင္းသြားပါလိမ့္မ
ယ္။ နွစ္နည္းလံုးနဲ ့ လုပ္ လုပ္ေနတာကို ေတြ့ရပါလိမ့္မယ္။
Python3.x မွာေတာ
့ Print ထုတ္ခ်င္တ့ ဲ ေကာင္ကို print ဆုိတဲ k့ eyword ေနာက္ကေန လက္သည္းကြင္းရ
ယ္() quotes ‘ ‘ ရယ္နဲ ့ အဖြင့္ အပိတ္ တု့ ကိ
ိ ု ထားရပါမယ္။ (‘ [output] ‘) ဆုိတ့ ဲ ပံုစံန့ပ
ဲ ဲ .. အလုပ္လုပ္ပါတ
34
http://crossnetmm.com/
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
2.8 Variable
35
http://crossnetmm.com/
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 အမ်ိဳး
အစား ျဖစ္တယ္ဆုိတာကို result ထြက္လာပါတယ္။ အဲ့လိုပဲ Age သည္ ဘယ္လို type မ်ိဳးလဲ သိခ်င္ရင္
Type(Age) ဆုိျပီး ျကည့္လိုက္တာနဲ i့ nteger ျဖစ္တယ္ဆိုတာကို ေတြ ရ
့ မွာပါ။ Variable ေတြထဲက
data/value ထုတ္ခ်င္ရင္ေတာ
့ print ဆိုတ့ ဲ keyword ေနာက္ကေန variable ကို ထည့္ေပးလိုက္ယံု ပါပဲ။ ခု
အေပၚက ပံုမွာက interactive mode နဲ ့ ေရးသြားတာ .. အဲ့လိုမဟုတ္ပဲနဲ s့ critp တစ္ခု အေနနဲ ့ ေရးျကည့္က်
ရေအာင္။
36
http://crossnetmm.com/
37
http://crossnetmm.com/
2.8.1 Numbers
Numbers data type သည္ Numeric တန္ဖုိးေတြကို သိမ္းဆည္းဖုိ့အတြက္ပါ။ Number Type ကို
အမ်ိဳးအစား 4 ခု ခြဲျခားသတ္မွတ္လို ရ
့ ပါတယ္။
1. int (ကိန္းျပည့္)
2. float (ဒသမကိန္း)
3. long
4. complex
38
http://crossnetmm.com/
2.8.2 String
String မွာက်ေတာ
့ alphabet ေတြ သိမး္ ထားေပးတဲ ့ variable ပဲ ျဖစ္ပါတယ္။ string variable မွာ
သံုးလိ့ ရတဲ
ု ့ ဥပမာေလးေတြကို ျကည့္ ျကည့္က် ရေအာင္ဗ်ာ ..
String Concatenate
39
http://crossnetmm.com/
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 တု့ ျဖစ္
ိ ပါတယ္။
အခု အေပၚက ပံုမာွ ဆုိ x သည္ integer ျဖစ္တ့ အတြ
ဲ က္ vlaue ဆိုတ့ ဲ string type variable နဲ ေ
့ ပါင္းမရေတာ
့
မ်ိဳးတူေအာင္ လုပ္မွ ရမွာျဖစ္ပါတယ္။ ဆိုေတာ
့ ကာ. str() ဆိုတ့ ဲ function ကို သံုးျပီးေတာ
့ x variable ကို
string အေနနဲ ရ
့ မွ print ထုတ္လိ့ ရမွ
ု ာပါ။
40
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
41
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 ေတြအကုန္ ထြက္လာ
ပါလိမ့္မယ္။
42
http://crossnetmm.com/
print ထုတ္တာေတြဘာေတြကေတာ
့ အေပၚက Fruit တုန္းကထုတ္ခဲ့ သလို ထုတ္လိုက္ယံုပါပဲ။ list ေ
တြကို + ေလးသံုးျပီး ေပါင္းလိ့ ု ရပါတယ္။ print ထုတ္တဲ့ ေနရာမွာ print Fruit + Random_list ဆုိျပီး ထုတ္
လိ့ ရသလိ
ု ့ ု.. ေပါင္းလိ့ ရလာတဲ
ု ့ result ကို print combine ဆုိတ့ ထဲ
ဲ ထည့္ျပီးမွ print combine ဆုိျပီးလဲ ထုတ္
လိ့ ရပါတယ
ု ္။
43
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 ဆုိျပီး ထုတ္ျကည္ပါ။
ျပန္ဖယ္ထုတ္ခ်င္တယ္ ဆုိရင္ေတာ
့ 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 ထု
တ္ျကည့္ပါ။
44
http://crossnetmm.com/
Tuple သည္ list နဲ့ အတူတူပါပဲ။။ အဓိက ကြဲျပားသြားတာက list သည္ ေထာင့္ကြင္း [] နဲ ေ
့ ဖာ္ျပ ေရး
သားျပီး tuple ကိုေတာ
့ ()လက္သည္းကြင္းနဲ့ ေရးပါတယ္။ ျပီးေတာ
့ list ထဲမွာရွိတ့ ဲ elements/items ေတြကို ျ
ပဳျပင္ေျပာင္းလဲလ့ ို ရျပီးေတာ
့ Tuple ကေတာ
့ မရပါဘူး.. အဲ့တာေျကာင့္ သူ က
့ ို read-only လိ့ ု ေျပာက် ပါတ
ယ္။
45
http://crossnetmm.com/
Dictionary မွာကေတာ
့ အေရွ က
့ ေျပာခဲတ
့ ့ ဲ lists တု့ ိ tuples တု့ ိ နဲ့မတူပါဘူး.. သူသည္ data ေတြကို
သိမ္းဆည္းတဲ့ ေနရာမွာ key နဲ ့ value ကို တစ္တြဲ တြဲ ျပီး သိမ္းဆည္းပါတယ္။ key နဲ့ value ကို : နဲ့ ျခားထား
ပါတယ္။ key ကို ‘ or “ နဲ့ ထည့္ေရးရပါမယ္။ value ကေတာ
့ string/int/float ေပၚမူတည္ျပီး ေရးယံုပါပဲ။ ျပီးေ
တာ {} တြန္ က
့ ြင္း ကို အသံုးျပဳပါတယ္။
46
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 မဟုတ္ပဲ.. ျပဳျပင္ေျပာင္းလဲ လိ့ ု ရပါတယ္။
47
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 တက္ပါတယ္။
48
http://crossnetmm.com/
ခုဆက္ျပီး ထပ္ျကည့္က် မွာက ဖ်က္ပစ္တာ.. ထပ္ထည့္တာ ေတြကို pop() update() clear() del တု့ ကိ
ိ ု သံုးျပီး
စမ္းျကည့္က် မွာပါ။
49
http://crossnetmm.com/
clear() က dictionary ထဲက key+value pair ေတြ အကုန္လးံု ကို ဖ်က္ပစ္လိုက္တာပဲ ျဖစ္ပါတယ္။
print ထုတ္ျကည့္ရင္ data မရွိတ့ ဲ { } ကိုပဲ ေတြ့ရမွာ ျဖစ္ပါတယ္။ del dict123 ဆိုတာကက် ေတာ
့ dict123 ဆုိ
တဲ့ ေကာင္ျကီးကိုပါ ဖ်က္ပစ္လိုက္တာပဲ ျဖစ္ပါတယ္။ ;-)
3. Python Operator
Python ေတြ န
့ ုိင္မယ့္ operator ေတြကေတာ
့ ေအာက္ပါ အတုိင္းပဲ ျဖစ္ပါတယ္။
● Arithmetic Operators
● Comparison (Relational) Operators
● Assignment Operators
● Logical Operators
● Bitwise Operators
50
http://crossnetmm.com/
● Membership Operators
● Identity Operator
Arithmetic ကေတာ
့ သူ န
့ ာမည္အတုိင္းပဲ ေပါင္း ႏွဳတ္ ေျမွာက္ စား စတဲ့ .. သခ်ာၤတြက္ခ်က္ မွဳေတြကို ျ
ပဳလုပ္ေပးတာပဲ ျဖစ္ပါတယ္။
51
http://crossnetmm.com/
3.1.1 Addition ( + )
X = 10 ဆုိျပီးေတာ
့ variable x ထဲကို 10 ထည့္လိုက္ပါတယ္။ y ထဲ ကိုေတာ
့ 20 ထည့္ထားပါတယ္။ အဲ့ေနာ
က္ print x + y နဲ ့ x နဲ y့ ေပါင္းျပီး ရလာတဲ့ resulte ကို ထုတ္ျပထားပါတယ္။
3.1.2 Subtraction ( - )
52
http://crossnetmm.com/
ျပီးေတာ
့ python sub.py ျပီး run လိုက္ရင္ အေျခ 15 ဆိုျပီး ရပါတယ္။
3.1.3 Multiplication ( * )
Multiplication ဆုိတ့ ဲ အတုိငး္ ေျမွာင္မွာေပါ့။ python မွာ အေျမွာက္အတြက္ *(start) သေကၤတ ကို
သံုးပါတယ္။ ေအာက္က code ေလးကို ေရးျပီး Multi.py ဆိုတ့ ဲ နာမည္ နဲ့ သိမ္းလိုက္ပါတယ္။ ကိုယ္စိတ္ ျကိဳ
က္နာမည္ေပးလို ရ
့ တယ္ေနာ္။
53
http://crossnetmm.com/
Python 2.7 မွာဆုိရင္ user ဆီကေန input ယူဖုိ့အတြက္ သံုးနုိင္တ့ ဲ function က နွစ္ခု ရွိတယ္။
input() နဲ ့raw_input() တုိ ပ
့ ဲျဖစ္ပါတယ္။ အဲ့နွစ္ေကာင္ဘယ္လို ကြာျခားလဲဆုိတာကို တစ္ခ်က္ျကည့္ ျကည့္
က် ရေအာင္ ဗ်ာ။
54
http://crossnetmm.com/
ခု 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’ ဆုိျပီး ထြက္လာတာကို ေတြ ရ
့ မွာပဲ ျဖစ္ပါတယ္။
ေနာက္တစ္ခါ ‘123’ ဆိုျပီး string အေနနဲ ့ input ထည့္လိုက္ပါတယ္။ type() နဲ ့ ျကည့္ရင္ string ျဖစ္တယ္
ဆုိတာကို ေတြ ရ
့ မွာပါ။ အဲ့တာအျပင္ သိမ္းတဲ့ အခ်ိန္မွာ သူသည္ ‘(single quotes) ေတြကိုပါ ထည့္သိမ္းပါ
တယ္။ အဲ့ဒါေျကာင့္ xyz ထဲ က data ကို ျပန္ထုတ္တဲ့ အခ်ိန္မာွ “ ‘ 123 ‘ “ဆုိျပီး ျမင္ရတာပါ။
55
http://crossnetmm.com/
ဒီတစ္ခါမွာေတာ
့ ‘123’ ဆုိျပီး string အေနနဲ v့ ariable a ထဲကို user ကေန ရိုက္တဲ့ input ကို ထည့္လိုက္ပါတ
ယ္။ type() နဲ့ ျကည့္ရင္ str ဆုိတာကိုပဲ ေတြ ရ
့ ပါတယ္။ a ထဲက data ကို ျပန္ထုတ္ျကည့္တဲ့ အခါမွေတာ
့ “‘
123 ‘ “ ဆိုျပီးေတာ
့ ‘(single quotes) ေတြကိုပါ ထည့္သိမ္းထားတာကို ေတြ ရ
့ ပါမယ္။
56
http://crossnetmm.com/
အေပၚက ကုတ္ေတြကို multi_input.py ဆုိတ့ ဲ နာမည္တဲ့ save လိုက္ပါ။ အဲ့ script ဖုိင္ကို python
multi_input.py ဆုိျပီး execute လုပ္လိုက္ပါ။ ေအာက္ပါ result အတိုင္း ရရွိလာပါလိမ့္မယ္။
57
http://crossnetmm.com/
ရလာတဲ့ result သည္ Num1 (5) ကို Num2 (2) နဲ ့ စားလိုက္ရင္ division or quotient သည္ 2 ျဖစ္ျပီး
modulus သည္ 1 ျဖစ္ပါတယ္။ ျပီးေတာ
့ Num1 to the power Num 2 => 52 ျဖစ္တာမို့ 25 ျဖစ္ပါတယ္။
ဒါက Python 2.7 မွာ မို d
့ ivision နဲ ့ Floor division or quotient နဲ က
့ တူတာပါ။
58
http://crossnetmm.com/
ဟုတ္ျပီး ခုဆိုရင္ division သည္ float တန္ဖုိး ျဖစ္တ့ ဲ 2.5 ကို ေပးပါတယ္။ quotient ကေတာ
့ 2 ပါ။ အဲ့ေလာ
က္ဆုိ ရမယ္ လိ့ ု ေမွ်ာ္လင့္ပါတယ္။ တစ္ျခား ဂဏန္းေတြန့လ
ဲ ဲ စမ္းျကည့္ေစခ်င္ပါတယ္။ happy coding ;-)
Python မွာရွိတ့ ဲ variable/operand ေတြကို ႏွဳိင္းယွဥ္တ့ ဲ ေပးတဲ့ operator ေတြက ေအာက္ပါ။ အတုို
င္း ျဖစ္ပါတယ္။ သူတ့ ရဲ
ုိ ့ symbol သေကၤတေတြ အတုိငး္ အလုပ္ လုပ္တာပါ။ ကုတ္ေလးေတြ ေရးျပီး စမ္းျကည့္
က် ရေအာင္ ဗ်ာ။
59
http://crossnetmm.com/
ခု basic အေနနဲ ့ စမ္းမယ့္ OP 6 ခုကို စမ္းဖုိ့အတြက္ interactive mode မွာ စမ္းျကည့္က် ပါမယ္။ ထ
ည့္လိုက္တဲ ရ
့ လာတဲ့ input ေတြေပၚမူတည္ျပီး condition ကို စစ္ပါမယ္။ condition မွန္တယ္ ဆုိရင္ True
(boolean) ကို ရမွာ ျဖစ္ျပီး.. Condition မကိုက္ရင္ ေတာ
့ false ပါ။.. Comparison Opeator ဆုိတ့ ဲ အတိုင္း
operands ေတြကို compair(နွိဳင္းယွဥ္) လုပ္တာပါ။ လက္ေတြ့ ကုတ္ေတြ ေရးျကည့္ ရင္ မ်က္စိထဲ ပိုျမင္ပါလိ့မ္
မယ္။ စမ္းျကည့္က် စုိ ။့
60
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 ရရမယ္ေနာ္။
61
http://crossnetmm.com/
x = 30, x >= y ဆုိရင္လဲ True ပဲ ရပါတယ္။ x ထဲက 30 သည္ y ထဲက 20 ထက္ ျကီးတာမုိ .့ . True ပါ။
ဟုိုးအေရွ မ
့ ွာတုနး္ က simple assignment operator ေလးတစ္ခုျဖစ္တ့ ဲ = (equal) အလုပ္ လုပ္ပံုကို
မွတ္မိတယ္ ဟုတ္? သူက i = 5 မွာဆုိရင္ ညာဘက္က 5 သည္ ဘယ္ဘက္က variable i ထဲကို assign လု
ပ္ေပးရမယ္ value တစ္ခုပဲျဖစ္ပါတယ္။ ေျပာခ်င္တာက ညာဘက္မွာရွိတာသည္ assign လုပ္မယ့္ေကာင္ ဘယ္
62
http://crossnetmm.com/
အေပၚက code ေတြကို run လိုက္ရင္ ေအာက္ပါ အတုိင္း result ထြက္ပါတယ္။ ဟုတ္ မဟုတ္ ကို တ
စ္ဆင့္ခ်င္း ျပန္ ျကည့္ က် ရေအာင္။
63
http://crossnetmm.com/
Logical Operator နဲ B
့ itwise Operator အေျကာင္းကို ေနာင္က် မွ ဆက္ရွင္းပါတယ္။ ခု လက္ရွိ အသံုးလိုမယ့္
Membership Operator နဲ I့ dentity Operator အေျကာင္းကို အရင္ ေလ့လာပါမယ္။
64
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 ရ
ပါတယ္။
65
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.
66
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”)
67
http://crossnetmm.com/
If သည္ သူ ေ
့ နာက္က condition မွန္မွ (true ရမွ) သူနဲ သ
့ က္ဆုိုင္တဲ (့ Block of code) statement ေတြကို
ဆက္ျပီး အလုပ္ လုပ္ပါတယ္။ condition မကိုက္ရင္ (False ရရင္) .. သက္ဆုိင္ရာ if ရဲ ့ statemnt
ေတြကိုေက် ္ ာသြြားျပီးေတာ
့ ေအာက္က ေကာင္ေတြကို ဆက္လုပ္ပါတယ္။
68
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 ကို သံုးထား
ပံုပါ။
69
http://crossnetmm.com/
70
http://crossnetmm.com/
ခု အေပၚက ကုတ္မွာဆုိ Line 1 ⇒ သည္ input ေတာင္လ့ ို ရလာတဲ့ data ကို variable ထဲ ကို ထည့္တာပါ။
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 ထုတ္မွာပါပဲ။
71
http://crossnetmm.com/
72
http://crossnetmm.com/
ေရးျပီး run လိုက္လိ့ ု အသက္ေမးရင္ ၁၈ လိ့ ု ထည့္လိုက္ရင္ if(Age >= 18) condition က true ျဖစ္တာမုိ့ သူ့
ေအာက္က code နွစ္ေျကာင္းအလုပ္လုပ္ပါတယ္။
73
http://crossnetmm.com/
Age က 10 ျဖစ္တာမုိ ့ if(Age >= 18) ဆုိတ့ ဲ condition သည္ False ျဖစ္သြားပါတယ္။ အဲ့တာေျကာင့္ else
statement ေတြက လုပ္ လုပ္ပါတယ္။
74
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 ျကည့္လိုက္ပါ။
75
http://crossnetmm.com/
ခုဆိုရင္ ေတာ
့ အဆင္ေျပေနိလမ့္မယ္။ အကယ္လိ့ ု x < 22 သည္ အစီအစဥ္ တက် (logic က် ) မဟုတ္ပဲ အေ
ပၚဆံုးေရာက္ေနမယ္ ဆုိရင္ ?
76
http://crossnetmm.com/
ေယာကၤ
် ားေလးဆုိရင္ အသက္၁၈ ႏွစ္နဲ အ
့ ထက္ ျဖစ္ရင္ beer ၀ယ္လိ့ ရမယ
ု ္ ။ မိန္းကေလးဆုိရင္ေတာ
့ အသက္
၂၀ ေက် ္ ာမွ ၀ယ္လိ့ ရမယ
ု ္ ။ အဲ့အတြက္ေျကာင့္ user ဆီကေန Age နဲ G
့ ender ကို Input အေနနဲ ေ
့ တာင္းလို
က္ပါတယ္။ အဲ့တြက္ ပထမ if block သည္ အသက္ကို စစ္ျပီးမွ ေနာက္ if block သည္ Gender ကို စစ္ျပီး
အေျဖ result ျပန္ေပးပါတယ္။
77
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
78
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 ေလးကိုျကည့္
လိုက္ရင္ ရွင္းသြားပါလိမ့္မယ္။
79
http://crossnetmm.com/
80
http://crossnetmm.com/
ဟုတ္ျပီး အဲ့ေတာ
့ execise အေနနဲ f့ or loop ပါတ္ျပီး print ထုတ္ျကည့္က် ရေအာင္။
81
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 မဟုတ္ဘူးေနာ္..
82
http://crossnetmm.com/
83
http://crossnetmm.com/
ထပ္ျပီး ေတာ
့ ဘာစမ္းျကည့္ဦးမလဲဆုိေတာ
့ စံုကိန္းေတြ သတ္သတ္ထုတ္မယ္ မကိနး္ ေတြ သတ္သတ္ ထုတ္ျ
ကည့္မယ္။ ေအာက္ကုတ္ကို မျကည့္ပဲ စမ္းေရးျကည့္ပါ။
English စာမွာ ရွိတ့ ဲ while ကို သံုးသလိုပါပဲ။ ေအာက္က sentence ေလးကို တစ္ခ်က္ ျကည့္ ျကည့္ပါ။
He read the book while waiting for the bus
84
http://crossnetmm.com/
85
http://crossnetmm.com/
Line2 => While loop စပါတ္ပါတယ္။ ေနာက္က condition အရ loop သည္ count 9 နဲ 9
့ ေအာက္ ငယ္ေန
ရင္ looping ပါတ္ေနဦးမွာပါ။ 9 ေက် ္ ာသြားတာနဲ ့ condition သည္ false ျဖစ္သြားတာမို w
့ hile loop ကေန
ထြက္သြားပါမယ္။
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 ထုတ္ေပးပါတယ္။
ခု num = 1 ဆုိျပီးေတာ
့ num ထဲ ကို 1 ထည့္လိုက္ပါတယ္။ while( num == 1) ဆုိျပီး ေတာ
့ loop
စပါတ္ပါတယ္။ ျပီးေတာ
့ Enter your name ဆုိျပီးေတာ
့ user ဆီကေန input နာမည္တစ္ခုေတာင္းတယ္။
အဲ့ေနာက္ hello ဆုိျပီး နာမည္ ကို ျပန္ထုတ္တယ္။ while loop ရဲ ့ num==1 ဆိုတ့ ဲ condition မွန္ေနသမွ်
86
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 ကေတာ
့ အကုန္ လံးု ျပီး သြားမွ သူ့ဆီေရာက္လာမွ အလုပ္ လုပ္တာပါ။
87
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 ကို ျပန္တက္ ပါတယ္။
88
http://crossnetmm.com/
89
http://crossnetmm.com/
ျပန္ျပီးေတာ
့ run ျကည့္လိုက္ပါ။
Loop ေတြ ပံုမွန္ အတုိင္း loop ေနတာ sequence အလိုက္သြားေနတာ ကို control လုပ္ဖုိ့ အတြက္နုိ
င္တ့ ဲ statement 3 ခု ရွိပါတယ္။
● Break statement
● continue statement
● pass statement
90
http://crossnetmm.com/
ေနာက္ထပ္ example တစ္ခုေလာက္ ထပ္ျကည့္က် ရေအာင္။ Quit လု့ ိ မရိုက္မခ်င္း inpute ၀င္လာတဲ့
string ေတြရဲ l့ en ကို ေဖာ္ျပေပးမယ့္ .. program ေလး တစ္ခု ေရးျကည့္ပါ။
91
http://crossnetmm.com/
92
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 ကို တ
စ္ခ်က္ ျကည့္ ျကည့္လိုက္ပါ။
93
http://crossnetmm.com/
94
http://crossnetmm.com/
ရလာတဲ့ result မွာ date ေကာ time ေကာ အကုန္ ပါေနတာကို ေနတာကို ေတြ့ရပါတယ္။ date ကိုပဲ
ျကည့္ခ်င္တယ္ဆုိရင္ေတာ
့ ..
အခုလို ့ လက္ရွိ ရွိေနတဲ့ date, time တင္မဟုတ္ပဲ ကိုယ့္စိတ္ျကိဳက္ data ထည့္ျပီးလဲ format က် ေ
အာင္ ျပန္ထုတ္လိ့ ရပါတယ
ု ္။
95
http://crossnetmm.com/
ေအာက္က ပုံေလးနဲ ရ
့ ွင္းျပထားတာကို ျကည့္လိုက္ရင္ ပိုရွငး္ သြားပါလိမ့္မယ္။
96
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 ကို ရလာပါလိမ့္မယ္
97
http://crossnetmm.com/
** import [ module ] **
Import ဆုိျပီး ေနာက္က module ပဲ ေရးထားတဲ့ အတြက္ အဲ့ module ေအာက္က ေကာင္ေတြကို ေ
ခၚသံုးလို ရ
့ တယ္။
ကိ္ ယ
ု ့္ သံုးခ်င္တ့ ဲ item ကို ပဲ ယူတာျဖစ္လ့ ို သံုးမယ့္ item ေတြကို control လုပ္နုိင္တယ္။
သူက code ေခၚသံုးတဲ့ အခ်ိန္က် ေရးရတာသက္သာတယ္။ အေရွက
့ box အထုပ္ ဥပမာ နဲ ့ ျပန္ေျပာရရင္
from module import [ ] သည္ box ကို ဖြင္ ေ
့ ပးထားတာနဲ တူပါတယ္။ ဒီတုိင္း ယူသံုးလိုက္ယံုပါပဲ။
98
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 တဲ ျ့ ပသနာရွိပါတယ္။
99
http://crossnetmm.com/
platform = ‘parrotsec’
from sys import *
အေပၚက နွစ္ေျကာင္းမွာဆုိ platform ထဲကို ‘parrotsec’ ဆိုတဲ ့ string ထည့္ထားပါတယ္။ ေနာက္ျပီး sys
module မွာရွိတ့ ဲ ေကာင္ေတြ အားလံုးကိုလဲ import လုပ္ထားပါတယ္။ sys ထဲ က platform လဲ အပါ အ၀င္ ေ
ပါ့။ အဲ့တာဆုိ >>> မွာ platform လို ေ
့ ခၚလိုက္ရင္ ဘယ္ေကာင္ရဲ r့ esult ထြက္လာမလဲ ဆုိေတာ
့ ‘cygwin’
ဆုိျပီးေတာ
့ ရပါတယ္။ sys module ထဲ က ေကာင္ကို ေခၚသံုးလိုက္တာပဲ ျဖစ္ပါတယ္။ from sys import *
သည္ platform = ‘parrotsec’ ကို overwrite လုပ္လိုက္တဲ သေဘာမ်ိဳး ျဖစ္သြားလိ့ ပါ။
ု
100
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 ထြက္ပါလိမ့္မယ္။
101
http://crossnetmm.com/
strftime() Method သည္ date ေတြ time ေတြကို string အေနနဲ ့ ျပန္ထုတ္ေပးတဲ့ေကာင္ပါ။
ေအာက္က ကုတ္ေတြကို ကိုယ့္စိတ္ျကိဳက္နာမည္ တစ္ခုနဲ ့save ပါ။ က် ြန္ေတာ
္ ကေတာ
့ kp.txt ဆုိျပီးေတာ
့ သိ
မ္းခဲပ
့ ါတယ္။
Line1 => က datetime module ထဲက datetime class ကို import လုပ္လိုက္တာပါ။
102
http://crossnetmm.com/
Line3 => datetime အတြက္ object တစ္ကို တည္ေဆာက္လိုက္ပါတယ္။ now ဆုိတ့ ဲ variable သည္ ခုလ
က္ရွိ date နဲ t့ ime ပါ၀င္ေနတဲ့ datetime object တစ္ခုပါ။
103
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 ထုတ္ျပထားပါတယ္။
104
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://bootstrap.pypa.io/get-pip.py ကေနျပီးေတာ
့ python script ေလးကို ေဒါင္းျပီး run လိုက္
ရင္ ရပါျပီး။ အေသးစိတ္ သိခ်င္ရင္ေတာ
့ .. ေအာက္ပါလင့္ကေနတစ္ဆင့္ ဖတ္ျကည္ပါ။
https://www.makeuseof.com/tag/install-pip-for-python/
105
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 ကို သံုးျပီး တည္ေဆာက္ လိုက္ပါ
တယ္။
106
http://crossnetmm.com/
Line 8 to 10 သည္လဲ ထုိနည္းတူစြာ အလုပ္လုပ္ပါတယ္။ result ကို ေအာက္က screenshot မွာ ျကည့္ပါ။
Python ရဲ s့ leep() function ကို program အျကီးျကီးေတြ run တဲ့ အခါ processing လုပ္ရတာမ်ား
လိ့ ..
ု က် န္ေနတဲ့ code ေတြကို ဆက္မ run ပဲ ခန နားျပီးမွ ဆက္ run ခ်င္တာမ်ိဳးပဲ ျဖစ္ျဖစ္
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 လုပ္ပါတယ္။
107
http://crossnetmm.com/
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 ရဲ
့condition သည္ True ပဲ ျဖစ္ေနတာမုိ .့ . loop ဆက္ပါတ္ေနပါေတာ
့ တယ္။
က် ြန္ေတာ
္ တု့ ိ Network သမားေတြအေနနဲ ့ ကေတာ
့ က် ြန္ေတာ
္ တု့ ေတြ
ိ ရဲ ့data ကို file ေတြထဲကို ထ
ည့္တာ.. ဒါမွမဟုတ္.. File ထဲမွာ store လုပ္ထားတဲ့ data ကိုျပန္ယူဖုိ အ
့ တြက္ စသည္ျဖင့္ သံုးက် ပါတယ္၊ File
handling က Web application သမားေတြအတြက္လဲ အေရးျကီးပါတယ္။ ကဲ စလိုက္က် ရေအာင္ ဗ်ာ။
108
http://crossnetmm.com/
Python ကေနျပီးေတာ
့ print() လိုက္တဲ့အခ်ိန္မွာ hello ေနာက္က { name } ကိုေတြ ေ
့ တာ
့
keyword name မွာ ရွိတ့ ဲ data ျဖစ္တ့ ဲ dear ကို ထုတ္ယူလိုက္ပါတယ္။ အဲ့ေနာက္ {greeting} မွာရွိတ့ ဲ data ျ
ဖစ္တ့ ဲ GoodNight ကို လဲ ထုတ္ယူလိုက္ျပီး အကုန္စုေပါင္းျပီး format က်က် print ထုတ္ျပပါတယ္။
ခုအေပၚမွာ ေျပာခဲတ
့ ့ ဲ နည္းလမ္းကို သံးု လို ရ
့ သလို C programming မွာ တုန္းကလို % operator ကို
သံုးျပီးေတာ
့ လဲ print ထုတ္မယ့္ string ကို format ခ် လိ့ ရပါတယ
ု ္။
Name ဆိုတ့ ဲ variable ထဲ ကို ‘John’ ဆိုတ့ ဲ string value တစ္ခု ထည့္ထားပါတယ္။ print ထုတ္လို
က္တဲ့ အခ်ိန္မာွ %s ဆိုတာသည္ string variable မွာ ရွိတ့ ဲ data ကို ထုတ္ရမယ့္ ေနရာကို ညြန္းဆုိထားတာ
ပါ။ အဲ့တာေျကာင့္ Hello, ေနာက္မွာ John ဆုိျပီး ထြကလာတာပါ။
109
http://crossnetmm.com/
110
http://crossnetmm.com/
အေရွ မ
့ ွာတုန္းက detail မေျပာခဲရ
့ ေတာ
့ .. အဲ့တာေလးကို သိေစခ်င္လို ပ
့ ါ။ ကဲ အဓိက အေျကာင္း
အရာ ျဖစ္တ့ ဲ file ေတြ ဖြင့တ
္ ာပိတ္ထား data အသြင္း အထုတ္ လုပ္တာ။။ ဖ်က္ပစ္တာ စတာေတြကို ေလ့လာ
က် စို ။့
print(myfile.read()) ဆုိျပီးေတာ
့ read() method ကို သံုးျပီး ဖတ္လိ့ ရလာတာေတြ
ု ကို user ျမင္ရေ
အာင္ print ထုတ္ျပပါတယ္။
111
http://crossnetmm.com/
read() နဲ ဖ
့ တ္လိုက္တဲ့ အခ်ိန္မွာ kp.txt ထဲမွာ ရွိသမွ် အကုန္ ထြက္လာပါတယ္။ အဲ့လိုမဟုတ္ပဲ ကိုယ္
ဖတ္ခ်င္သေလာက္ စာလံုးအေရးအတြက္နဲ ပ
့ ဲ ျဖစ္ျဖစ္ တစ္ေျကာင္းခ်င္းပဲ ျဖစ္ျဖစ္လဲ ဖတ္လို ရ
့ ပါတယ္။ read(5)
ဆုိရင္ေတာ
့ 5 သည္ ဖတ္မယ့္ စာလံးု အေရအတြက္ ၅ လံးု ဖတ္မယ္လို ့ ေျပာတာပါ။ အကယ္လိ့ ု 10 ဆုိရင္ စာ
လံုးေရ ၁၀ လံုး ထိ ဖတ္ျပီး print ထုတ္ေပးသြားမွာပဲ ျဖစ္ပါတယ္။
readline() ကေတာ
့ တစ္ေျကာင္းခ်င္းစီ ဖတ္ျပီးေတာ
့ print ထုတ္ေပးတဲ ပ
့ ံုစံပါ။ readline() တစ္ခါဆုိ
ပထမတစ္ေျကာင္းဖတ္တယ္.. ေနာက္တစ္ခါ readline() ဆုိ ေနာက္ ဒုတိယ တစ္ေျကာင္း ဖတ္တယ္ .. အဲ့လို
မ်ိဳးနဲ .့ . တစ္ေျကာင္းခ်င္ ဖတ္သြားပါတယ္။
112
http://crossnetmm.com/
ဖုိင္ေတြ ဖြင့ထ
္ ားလား ပိတ္ထားလား.. ျပီးေတာ
့ ဘာ mode နဲ အ
့ လုပ္လုပ္ ေနလဲ file name စသည္ ျ
ဖင္ .့ . စစ္ခ်င္ရင္ေတာ
့ .. နာမည္စစ္မယ္ဆုိ fileobject.name() ။ ဖြင္တာ ပိတ္တာ စစ္မယ္ဆုိ
fileobject.closed ။ mode ကို စစ္မယ္ဆုိ fileobject.mode() ။ စသည္ျဖင့္ print ထုတ္ျကည့္နုိင္ပါတယ္။
ဘာလို အ
့ ့ လိ
ဲ ုေတြစစ္လဲ ဆုိေတာ
့ ကိုယ့္ script အရ ဖြင့တ
္ ့ ဲ mode ေတြ file ပိတ္ျပီးျပီလား ဖြင့ထ
္ ားတု
န္းလား.. စသည္ျဖင့္ စစ္ဖုိ့လိုလာရင္ စစ္လို ရ
့ ေအာင္ပါ။
ေအာက္က ဇယားကေတာ
့ python ရဲ ့ file mode ေတြနဲ ့ သူတ့ ရဲ
ုိ လ
့ ုပ္ေဆာင္ခ်က္ေတြပါ။
113
http://crossnetmm.com/
Mode Description
114
http://crossnetmm.com/
'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.
ခုဒီ အေပၚက ဥပမာမွာ ဆုိရင္ kp.txt ဖုိင္ အတြက္ write mode နဲ ့ myfile ဆိုတ့ ဲ object တစ္ခု တ
ည္ေဆာက္လိုက္ပါတယ္။ အဲ့ေနာက္ write() ထဲ မွာ ထည့္ေရးမယ့္ စာသားေတြကို ေရးပါတယ္။ write() မွာ \
n ကို သံုးျပီး တစ္ေျကာင္း ခ်င္းဆီ ျဖစ္ေအာင္ ေရးထားပါတယ္။ code ေတြကို execute လုပ္ျပီးေနာက္ kp.txt
ဖုိင္ ကို ဖြင့ျ္ ကည့္လိုက္ရင္ ေအာက္ပါ အတုိငး္ ေတြ ရ
့ မွာပဲ ျဖစ္ပါတယ္။
115
http://crossnetmm.com/
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 လုပ္ပါတယ္။
116
http://crossnetmm.com/
Python ရဲ O
့ S module မွာရွိတ့ ဲ method ေတြသည္ file-processing လုပ္ရာမွာ အေထာက္အကူ ျပဳ
ပါတယ္။ ဘယ္လိုမ်ိဳးေတြလဲဆုိေတာ
့ ဖုိင္ေတြ ဖ်က္တာ နာမည္ေျပာင္းတာ directory တည္ေဆာက္တာ စတဲ့ န
ည္းလမ္းမ်ိဳးေတြြပဲ ျဖစ္ပါတယ္။ ဆက္ျပီး ေလ့လာျကည့္က် ရေအာင္ဗ်ာ ။
Remove() Method
mkdir()
mkdir() method ကို လက္ရွိ directory မွာ directory တစ္ခု ထပ္ေဆာက္ဖုိ့အတြက္ သံုးပါတယ္။
mkdir ဆုိတာသည္ make directory ပါ။ သူ ့ syntax ကေတာ ့ os.mkdir("newdir")ပဲျဖစ္ပါတယ္။
chdir()
chdir() method က် ေတာ
့ ခုလက္ရွိ ရွိေနတဲ့ directory ကေန တစ္ျခား directory ကို သြားခ်င္ ေျပာ
င္းခ်င္တ့ ဲ အခါမ်ိဳးမွာ သံုးပါတယ္။ သူ ့ syntax ကေတာ
့ os.chdir("newdir")ပဲျဖစ္ပါတယ္။ သူသည္ different
path လမ္း ေျကာင္းမွာ ရွိတ့ ဲ directory ေတြကို သြားေရာက္နုိင္ပါတယ္။
117
http://crossnetmm.com/
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 ထုတ္ေပးပါတယ္။
118
http://crossnetmm.com/
119
http://crossnetmm.com/
RuntimeError Raised when an error does not fall under any other
category.
120
http://crossnetmm.com/
အေပၚမွာ ဆုိခသ
ဲ့ လို ပဲ.. Error ရွိရင္ exception ရွိတာမို .့ . ျဖစ္လာတဲ့ exception ကို handle မလုပ္
ရင္ ခုလက္ရွိ run ေနတဲ p
့ rocess သည္ error ဘာေျကာင့္ျဖစ္တ့ ဲ ဆိုတ့ ဲ error message ကို ျမင္ရျပီးေတာ ့
stop ျဖစ္သြားပါတယ္။ ေျပာရရင္ေတာ
့ crash ျဖစ္သြားတာေပါ့ဗ်ာ .့ .
121
http://crossnetmm.com/
အေရွ က
့ 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: သည္ ဘာမွမလုပ္ေတာ
့ ပဲ ေက် ္ ာသြားပါတယ္။
122
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 ကို ထုတ္ေပးတာပါ။
123
http://crossnetmm.com/
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 ထုတ္ျပပါတယ္။
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
ထုတ္ေပးပါတယ္။
124
http://crossnetmm.com/
အဲ့ေတာ
့ ကိုယ္က ကုတ္ေရးမယ့္သူပဲ.. ကိုယ့္ script/code ေတြကို ကိုယ္သံုးမယ့္ design နဲ က
့ ိုက္ေ
အာင္ စိတ္ျကိဳက္ထားပါ။
125
http://crossnetmm.com/
126
http://crossnetmm.com/
127
http://crossnetmm.com/
အဲ့လိုထြက္ဖုိ့ အတြက္ကေတာ
့ traceback module ကို import လုပ္ရမယ္ ျပီးေတာ
့
traceback.format_exc() ကို သံုးျပီးေတာ
့ sys.exc_info() လိုမ်ိဳး restule ကို print ထုတ္ေပးပါမယ္။
Zero input ေပးလိုက္ရင္ ေအာက္ပါအတိုင္း result ရပါတယ္။ format နွစ္မ်ိဳးကို ကြဲျပီး ျမင္ေအာင္
error format 1, error format 2 ဆုိျပီး ခြဲထုတ္ထားပါတယ္။
128
http://crossnetmm.com/
result ကိုေတာ
့ ေအာက္ပါအတုိင္း ျမင္ေတြ့နုိင္ပါတယ္။
129
http://crossnetmm.com/
ဟုတ္ျပီး ဒီေလာကဆုိရင္ေတာ
့ try…except ကိုေတာ
့ နားလည္သေဘာေပါက္ေလာက္ျပီလို ယ
့ ူဆပါ
တယ္။ ေနာက္တစ္ခု ဆက္က် စို ။့
Else: block သည္ try block ထဲကုတ္ေတြ ERROR မတက္မွ အလုပ္လုပ္တာပါ။ စမ္းျကည့္က် ရေအာ
င္ဗ်ာ။ အရင္ if….else တုန္းက beer ၀ယ္ဖုိ ့ အသက္စစ္တ့ ဲ program ေလးကို မွတ္မိမယ္ ထင္ပါတယ္။
130
http://crossnetmm.com/
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 ေရးလိုက္ပါတယ္။
except block မွာက် ေတာ
့ print ('You have entered an invalid value.') ဆုိျပီးေတာ
့ integer တန္းဖုးိ မဟု
တ္တဲ့ ေကာင္ေတြရိုက္ရင္ လက္မခံတ့ ဲ အေျကာင္း print ထုတ္ျပပါတယ္။ else block မွာက် ေတာ
့ မွ ၀င္လာတဲ့
input ကိုျကည့္ျပီး beer ၀ယ္ခြင့ရ
္ မရ ကို if…else နဲ စ
့ စ္ျပထားတာာပါ။
131
http://crossnetmm.com/
User ကေနျပီးေတာ
့ input အမွား ရုိက္မိရင္လဲ program သည္ exception ကို handle လုပ္ထားတဲ့
အတြက္ crash ျဖစ္မသြားေတာ
့ ပါဘူး။ အေျဖကို ေအာက္က result မွာ ျကည့္ပါ။
132
http://crossnetmm.com/
တစ္ခုမွထားရမွာက finally: block မွာရွိတဲ ့ code ကို အျမဲတန္း execute လုပ္ပါတယ္။ try:Block မွာ
ရွိတ့ ဲ code က မွားရင္ (error တက္ရင္) except: block ကို ေရာက္မွာ ျဖစ္ျပီး error မတက္ရင္ေတာ
့ else:
block ကို ေရာက္ပါမယ္။ except ျဖစ္ျဖစ္ else ျဖစ္ျဖစ္ ကေန run ျပီးရင္ေတာ
့ finally: block က ကုတ္ေတြကို
အေပၚက ပံုမွ ေဖာ္ျပခဲသ
့ လိုပဲ အျမဲ execute လုပ္ကို လုပ္ပါတယ္။
133
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 တဲ့ အတြက္ ေျကာ
င့္ပါ။
134
http://crossnetmm.com/
ကဲ run ျကည့္က် စို ။့ အရင္ဆံုး error တက္ရင္ exception ကို handle လုပ္နုိင္ မလုပ္နို္င္ စမ္းျကည့္
က် ရေအာင္။ data ကို အမွားေလးေတြထည့္ ျကည့္က် ရေအာင္။
Line no.12 အရ ၀င္လာမယ့္ input သည္ integer ျဖစ္မွ အဆင္ေျပမွာပါ။ character string ကို
integer ေျပာင္းလု့ ိ အဆင္မေျပပါဘူး.. error တက္တဲ့အတြက္ except: block ကို ေရာက္ျပီးေတာ
့
ValueError ဆုိတ့ ဲ result ထြက္လာပါေတာ
့ တယ္။
135
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 လုိ ေ
့ ခၚတာပါ။
136
http://crossnetmm.com/
ေအာက္ကေတာ
့ user-defined function အတြက္ syntax ပံုစံကို ေရးျပေပးထားတာပါ။
def function_name(parameters):
"""Docstring"""
statement(s)
return
137
http://crossnetmm.com/
မပါဘူး.. line no.5 မွာ printHW() ဆုိျပီး function ကို ေခၚလိုက္မွ အလုပ္စလုပ္ျပီး hello, world ကို print
ထုတ္ေပးတာပါ။
ဒီတစ္ခါက် ေတာ
့ function မွာက return ျပန္ရင္ function ကေန ထြက္သြားတယ္ ဆုိတာကို လက္ေ
တြ သ
့ ိေအာင္ စမ္းေရးျကည့္ပါ။ ေအာက္က ကုတ္မွာဆုိရင္ return ရဲ ေ
့ ပၚမွာေကာ ေအာက္မွာေကာ print ထု
တ္ထားပါတယ္။ line no.3 ကို print ထုတ္ျပီး line no.4 က return ျဖစ္တာမို ့ function ကေန ထြက္သြားျပီ ျ
ဖစ္လို ့ line no.5 က print သည္ ထြက္မလာေတာ
့ ပါဘူး… လက္ေတြ စ
့ မ္းေရးျကည့္ပါ။
138
http://crossnetmm.com/
Function ေတြ့ရဲ .့ . First line မွာေရးထားတဲ f့ unction document ကို ဖတ္ခ်င္တယ္ ဆုိရင္ေတာ
့
FunctionName.__doc__ ပဲ ျဖစ္ပါတယ္။
ေနာက္ထပ္ example တစ္ခု နဲ .့ . ထပ္ျပီး ေလ့လာျကည့္ပါ။ ခု ေအာက္က code ေတြမွာ ဆုိ function အတြ
က္ argument နွစ္ခု လိုပါတယ္။ fucntion ကို ေခၚတဲ့အခါမွာ data တန္ဖိုး နွစ္ခုနဲ ပ
့ ဲ.. အစီအစဥ္ တက် ေခၚမွ
ရမွာပါ။
ခုတုိင္းဆုိရင္ေတာ
့ Hello Monica, Good morning! ဆိုတ့ ဲ စာသားထြက္လာမွာပါ။ greet() ကို ေခၚ
တဲ့ အခ်ိန္မွာ variable data တန္ဖုိးက တစ္ခုပဲ ရွိေနခဲမ
့ ယ္ ဆုိရင္ေတာ
့ error တက္ပါလိမ့္မယ္။
139
http://crossnetmm.com/
ေအာက္မွာ ေနာက္ထပ္ example တစ္ခုပါ run ျကည့္ပါပါ။ function ကို ေခၚလိုက္တဲ့ အခ်ိန္မာွ ရလာတဲ့ data
ကို တြက္လိုက္ျပီး return ျပန္ေပးတဲ့ ပံုစံပါ။
Keyword Argument ေတြသည္ function call ေခၚတဲ့ေနရာမွာ argument လြဲတာ အစီအစဥ္ မက် ျ
ဖစ္တာမ်ိဳး မရွိေအာင္ လုပ္ေဆာင္ေပးပါတယ္။။ ဒီေနရာ မွာ တစ္ခု မွတ္ထားရမွာကေတာ
့ function call လုပ္
တဲ့အခါမွာ သံုးတဲ့ argument နာမည္နဲ f့ ucntion မွာ define လုပ္ခတ
ဲ့ ့ ဲ parameter နာမည္ကေတာ
့ တူရပါမ
ယ္။
140
http://crossnetmm.com/
အေရအတြက္ ျကိဳမသိနုိင္တ့ ဲ argument ေတြကို handle လုပ္မယ္ Python function ေလး တစ္ခု ကို
arbitrary argument ေတြသံုးျပီးေတာ
့ define လုပ္ျကည့္က် ရေအာင္ဗ်ာ ။။
141
http://crossnetmm.com/
142
http://crossnetmm.com/
ခုအေပၚက ပံုမာွ ဆို lambda function ကို တန္းေခၚသံုးလိုက္တာပါ။ အဲ့လိုမဟုတ္ပဲ variable object
တစ္ခု lambda function အတြက္ တည္ေဆာက္ျပီး သံးု လဲရပါတယ္။ traditional def function နဲ ့ ဆင္ပါတ
ယ္။
143
http://crossnetmm.com/
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 ျဖစ္လား တစ္ နဲ ့ ညီ ျ
ပီလား ဆုိတာကို စစ္ပါတယ္။ ညီခရ
ဲ့ င္ 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 ဘက္လွည့္က် ဦး
စို ။့
144
http://crossnetmm.com/
145