Adsense

OUO Banner

Latest Posts

Python2 Lesson 12


Lesson 1 ၾကည့္ရန္ link  >> Click Here
Lesson 2 ၾကည့္ရန္ link  >> Click Here
Lesson 3 ၾကည့္ရန္ link  >> Click Here
Lesson 4 ၾကည့္ရန္ link >> Click Here
Lesson 5 ၾကည့္ရန္ link >> Click Here

Lesson 6 ၾကည့္ရန္ link >> Click Here
Lesson 7 ၾကည့္ရန္ link >> Cl
ick Here
Lesson 8 ၾကည့္ရန္ link >> Click Here
Lesson 9 ၾကည့္ရန္ link >> Click Here
Lesson 10 ၾကည့္ရန္ link >> Click Here

Lesson 11 ၾကည့္ရန္ link >> Click Here
.
အဆက္
.
Python Programming
ဒီေန႔မွာေတာ့ Python Programming lesson ေတြထဲက Error နည္းေအာင္ လုပ္နည္း၊ Error ရွာေဖြနည္းေတြကို ေဆြးေႏြးသြားပါမယ္။
idle ေလးကို ဖြင့္လိုက္ပါ။ ျပီးရင္ file new လုပ္မေနဘဲ သည္တိုင္းေလးပဲ ရိုက္ထည့္ရေအာင္ေနာ္။
>>> name = float(raw_input("Enter any number : "))
Enter any number : hi
name ဆိုျပီး သတ္မွတ္အျပီးမွာ ေမးလာတဲ့ေနရာမွာ hi လို႔ ေျဖျပီး Enter လိုက္ပါတယ္။
ေအာက္ပါ error တက္လာတာကို ျမင္ရပါမယ္။ ကဲ ၾကည့္ရေအာင္ဗ်။
.
Traceback (most recent call last):
  File "", line 1, in
    name = float(raw_input("Enter any number : "))
ValueError: could not convert string to float: hi
.
foat မွာ hi လို႔ ရိုက္ထည့္လိုက္တာေၾကာင့္ ခုလို error တက္လာတာကို ေတြ႔ရတာပါ။
ရွင္းျပပါမယ္။
Data Types ေလးေတြကို ေအာက္ပါအတိုင္း မွတ္ထားႏိုင္ပါတယ္။
Integer = 1,2,3,4,5,... (int)
Float   = 0.1, 0.2, 0.3, ...
String  = texts (hi, hello, ....)
ဒါဆို ဒီ ေဒတာပံုစံေလးေတြကို သိေလာက္ျပီေပါ့။ ၾကည့္ရေအာင္ဗ်။
ကြ်န္ေတာ္တို႔ ခု တက္လာတဲ့  error ကို ျပန္ဖတ္ၾကည့္။ ေအာက္ဆံုးေၾကာင္းမွာ error ကို ရွင္းျပထားတယ္။
ValueError: could not convert string to float: hi
ကြ်န္ေတာ္ ျဖည့္လိုက္တဲ့ hi ဆိုတာက string ျဖစ္ေနပါတယ္။ Float နဲ႔ Data Tpype မတူပါဘူး။ ဒါေၾကာင့္ error ျဖစ္ကို ျဖစ္ခမွာပါ။
အထက္ပါ error ကို ဘယ္လို ရွင္းမလဲ။
ဒါကေတာ့ လြယ္ပါတယ္။ ကိန္းဂဏန္း ရိုက္ထည့္လိုက္ရင္ error မတက္ဘူးေပါ့။ ဒါမွမဟုတ္ရင္လည္း Data Type မွာ စာသားပဲ လက္ခံတဲ့ပံုစံ ေျပင္းေရးေပါ့။ ဒါက ရွင္းပါတယ္။
ဒါေပမယ့္ ကြ်န္ေတာ္တို႔ စဥ္းစားရမွာက ခုနလိုပဲ Enter any number : မွာ  hi လို႔ ကြ်န္ေတာ္ျဖည့္ခဲ့သလို အျခားသူေတြလည္း မွားျဖည့္ႏိုင္တာမ်ိဳး ျဖစ္ႏိုင္တယ္ခင္ဗ်။ ဒါမ်ိဳးသိပ္မျဖစ္ရေအာင္ user ကို အမွန္အတိုင္း ျဖည့္သြင္းႏိုင္ေစဖို႔ ေဇာင္းေပးျပီး ေရးတဲ့ပံုစံ ေျပာင္းရပါမယ္။
................................................................................................
ေနာက္တစ္ခု ၾကည့္ၾကည့္ရေအာင္။
>>> x=5
>>> y=0
>>> x/y
x က ၅ , y က ၀ လို႔ သတ္မွတ္လိုက္ျပီး x ကို y နဲ႔ စားလိုက္တယ္။ အေျဖမထြက္ဘဲ ေအာက္ပါ error ရမယ္။
Traceback (most recent call last):
  File "", line 1, in
    x/y
ZeroDivisionError: integer division or modulo by zero
>>> error ရ႕ဲ ေအာက္ဆံုးေၾကာင္းကို ၾကည့္ပါ။
ZeroDivisionError: integer division or modulo by zero
ဆိုျပီး ေတြ႔ရပါမယ္။ ေက်ာင္းမွာလည္း သင္ခဲ့ဖူးတယ္ေနာ္။ ပိုင္းေျခမွာ သုည ျဖစ္လို႔ မရဘူး။ သုညကလြဲရင္ က်န္တာ အကုန္ ျဖစ္လို႔ရတယ္။ ပိုင္းေျခ သုည ဆိုရင္ undefine ပဲ။ ခုလည္း အဲလိုျဖစ္တာကို ဆိုလိုပါတယ္။ ZeroDivisionError ဆိုတာ သုညနဲ႔ စားထားမိလို႔ ျပတဲ့  error ေပါ့။
.
error ရွိတယ္ဆိုတာကို လက္ခံပါတယ္။ အသံုးျပဳသူက မွားယြင္းေျဖမိရင္ error ေတာ့ ေပၚမွာေပါ့။ ေကာင္းျပီ။ error ေတြ႔တိုင္း အေပၚမွာ ဆိုခဲ့သလို စာလံုးေတြနဲ႔ ေပၚေနရင္ အသံုးျပဳသူက ဘယ္လိုထင္မလဲ။ ကိုယ့္အတြက္လည္း အဆင္မေျပလွဘူး။ ေပၚလာတဲ့ error ႀကီးကို အသံုးျပဳသူက ဘာလုပ္ရမယ္ဆိုတာ သိဖို႔ မလြယ္ဘူး။
ဒီေတာ့ programmer အေနနဲ႔က စဥ္းစားရမွာရွိတယ္။ ဘာစဥ္းစားရမလဲဆိုေတာ့ ကိုယ္ျဖည့္သြင္းေစခ်င္တဲ့ ေဒတာပဲျဖည့္သြင္းႏိုင္ေအာင္ အသံုးျပဳသူကို ဆြဲေခၚရမယ္။ ေနာက္တစ္ခ်က္က အဲလိုဆြဲေခၚေနတဲ့ၾကားကမွ အသံုးျပဳသူက တန္ဖိုးမွားထည့္မိတဲ့အခါ ခုနလို စာတန္းေတြနဲ႔ error ေပၚေစမယ့္အစား ဘာေတာ့ျဖင့္ ဘယ္လိုမွားသြားတယ္ဆိုတဲ့ message မ်ိဳးကိုပဲ ထုတ္ျပႏိုင္ရမယ္။ ဒါမွသာ အသံုးျပဳသူအေနနဲ႔ ဆက္လက္ အသံုးျပဳႏိုင္မွာျဖစ္တယ္။
ေကာင္းျပီ ဒါျဖင့္ ဒီလိုလုပ္ရေအာင္။
1. လူတိုင္း မွားႏိုင္တယ္
2. မွားတဲ့အခါ
Traceback (most recent call last):
  File "", line 1, in
    x/y
ZeroDivisionError: integer division or modulo by zero
ဒီလိုစာေတြနဲ႔ ထုတ္ျပမယ့္အစား ပိုျပီး ထိေရာက္တဲ့ နည္းလမ္းနဲ႔ ေဖာ္ျပရမယ္။
3. ဘက္စံု ထည့္ေတြးမွ အေကာင္းဆံုးအေျခအေနကို ရမယ္
စတဲ့ အခ်က္ ၃ခ်က္ကို အျမဲအေျခခံၾကရေအာင္။
Try , Except and Else Statement ေလးနဲ႔ ခုလို အခက္အခဲေတြကေန လြတ္ေျမာက္ဖို႔ ႀကိဳးစားၾကမယ္။
error ေတြ ေဖာ္ျပေနတဲ့ idle ကို ပိတ္လိုက္ရေအာင္။ idle အသစ္ျပန္ဖြင့္ျပီး သံုးမယ္။
...
python idle မွာ ေအာက္ပါအတိုင္း ရိုက္လိုက္ပါ။
>>> try:
name =float(raw_input("Enter a number : "))
except:
print "Please, type any number you like, 1,2,3,..... or 0.1, ... , 1.1, ..."
else:
print "OK! Your number is :  ", name

enter ၂ခ်က္ ဆင္းလိုက္တဲ့အခါမွာေတာ့ Enter a number : ဆိုျပီး ေမးလာပါျပီ။ နံပါတ္ မရိုက္ဘဲ ခုနလို စာေတြ ရိုက္ၾကည့္လိုက္ပါ။
Enter a number : kmn
Please, type any number you like, 1,2,3,..... or 0.1, ... , 1.1, ...
နံပါတ္ေတြသာ ရိုက္ရမယ္ဆိုျပီး ကိုယ္ေပးခ်င္တဲ့ message ေလး ေတြ႕ရပါလိမ့္မယ္။
File>> Save ကေန Desktop ေပၚမွာ d15.py ဆိုျပီး Save လိုက္ပါ။ ျပီးရင္ terminal ကေန ျပန္ Run ၾကည့္ပါဦး။
root@kmn:~# cd Desktop
root@kmn:~/Desktop# python d15.py
Enter a number : 1 ကြ်န္ေတာ္ျဖည့္လိုက္တာပါ။
.
OK! Your number is :   1.0
ဆိုျပီး ေနာက္တစ္လိုင္း ကူးသြားပါတယ္။ ကြ်န္ေတာ္ျဖည့္လိုက္တာက  ၁ ပါ။ ခု ၁.၀ ျဖစ္ေနပါတယ္။ ဘာလို႔လဲ???
Integer = 1,2,3,4,5,... (int)
Float   = 0.1, 0.2, 0.3, ...
String  = texts (hi, hello, words, ....)
ဆိုျပီး ကြ်န္ေတာ္ ေျပာထားခဲ့ပါတယ္ေနာ္။ ခု float ကို သံုးထားတဲ့အတြက္ ကြ်န္ေတာ္တို႔က ကိန္းျပည့္ထည့္လည္း ဒသမနဲ႔ ေပၚေနမွာပါပဲ။
zero နဲ႔ စားမိတဲ့ ဆီ သြားရေအာင္။
................................
idle အသစ္တစ္ခု ဖြင့္လိုက္ပါတယ္။ file new ကေန အသစ္ေခၚရိုက္လိုက္ပါတယ္။
..
x=5
y=0
try:
    result = x/y
except ZeroDivisionError:
    print "Hi, you cannot devide with zero. Choose another number...."
else:
    print "OK. You're right. Your answer is ....", result
raw_input("Press Enter to exit...")
အထက္ပါအတိုင္း run ၾကည့္လိုက္ပါ။ အနီေရာင္စာေတြနဲ႔ ရႈပ္ယွက္ခတ္ေနတဲ့ error ကို ေတြ႔ရမယ့္အစား message အေနနဲ႔သာ ေတြ႔ရပါလိမ့္မယ္။
သုညမဟုတ္ဘဲ အျခားကိန္းေတြနဲ႔ စမ္းၾကည့္ပါဦး။
x=5
y=2
try:
    result = x/y
except ZeroDivisionError:
    print "Hi, you cannot devide with zero. Choose another number...."
else:
    print "OK. You're right. Your answer is ....", result
raw_input("Press Enter to exit...")
y ေနရာ ၂ ေျပာင္းျပီး run ၾကည့္ပါဦး။ အေျဖ ဘာရပါသလဲ။။။
အေျဖ ၂ ပဲ ထြက္လာပါတယ္။ ဘာလို႔လဲ။ မွားလား မွန္လား။ မွားရင္ ဘယ္လိုျပင္ရင္ မွန္မလဲ။
ႀကိဳးစားၾကည့္ႏိုင္ပါတယ္။ တင္ေပးခဲ့ျပီးသမွ် သင္ခန္းစာေတြက ဒါေတြကို ျပင္ဆင္ႏိုင္ေစဖို႔ လမ္းဖြင့္ေပးထားျပီးသား ျဖစ္ေနလို႔ပါ။
...................................................................................
............................................................................................

Picking and Shelving
ဒီအေၾကာင္း မေဆြးေႏြးမီေပါ့။ ပထမဆံုးအေနနဲ႔ Day15 ဆိုတဲ့ folder အလြတ္ေလးတစ္ခု Desktop ေပၚမွာ လုပ္ထားလိုက္ရေအာင္။
ျပီးရင္ idle ဖြင့္လိုက္ပါ။ idle >> file>> new ကေန ဖိုင္သစ္ ဖြင့္ပါ။ ျပီးရင္ေတာ့ ေအာက္ပါ line ေလးမ်ားကို ရိုက္လိုက္ပါ။
(import cPickle နဲ႔ import shelve ဆိုတာေတြကေတာ့ Picking and Shelving ဆိုတဲ့ import method ေတြအတြက္ command ေတြ ျဖစ္ပါတယ္။ )
...
import cPickle , shelve

one = [ "apple", "orange", "mango", "grape" ]
two = [ "fish", "meet", "beef" ]

write = open ('file.dat', 'w')
cPickle.dump(one, write)
cPickle.dump(two, write)
write.close()
....
အထက္ပါ command line ေလးေတြကို ရိုက္ျပီးတဲ့အခါမွာေတာ့ ခုန ကြ်န္ေတာ္တို႔ ဖန္တီးထားခဲ့တဲ့ Desktop ေပၚက Day15 ဆိုတဲ့  folder ထဲမွာ test ဆိုတဲ့ နာမည္နဲ႔ Save လိုက္ရပါမယ္။ idle ကို ပိတ္စရာမလိုပါ။ ခုန folder အသစ္ထဲမွာ ကြ်န္ေတာ္တို႔ ဖန္တီးလိုက္တဲ့  test.py ကို ေတြ႕ရပါမယ္။ တစ္ဖိုင္ပဲ ရွိပါေသးတယ္။ ကဲ ခုန ေရးထားတဲ့  idle ထဲမွာပဲ RUN လိုက္ရေအာင္။
...
run လိုက္ေပမယ့္ ဘာမွ ေတြ႔ရမွာမဟုတ္ဘဲ ရွိေနပါေသးတယ္။ ခုေန Desktop ေပၚက folder ကို ဖြင့္ၾကည့္လိုက္ရင္ေတာ့ file.dat ဆိုျပီး ေနာက္တစ္ဖိုင္ ေတြ႔ေနရမွာျဖစ္ပါတယ္။
ဟိုေန႔က သင္ခန္းစာ ၂ခု မွတ္မိပါလိမ့္ဦးမယ္။ writefile နဲ႔ readfile ပါ။ အဲသည္ပံုစံနဲ႔ ခုေဖာ္ျပတာနဲ႔ ဆင္တယ္ေနာ္။ .dat နဲ႔ .txt ပဲ ကြာေနတာ။ ဒါဆို ဖိုင္ကို စာေပၚလာေအာင္ ဘယ္လိုဆက္ရမလဲဆိုတာ ေတြးမိျပီေပါ့။
ကုဒ္လိုင္းေလးေတြ ေအာက္မွာ ဆက္ရိုက္ထည့္ရေအာင္ပါ။
.....
read = open ('file.dat', 'r')

readone= cPickle.load(read)
readtwo= cPickle.load(read)
print readone, "\n", readtwo
read.close()
အထက္ပါ လိုင္းေတြကို ခုန ေရးထားတဲ့ idle ဖိုင္ထဲမွာ ဆက္ေရးရပါမယ္။ ခုဆိုရင္ေတာ့ ဒီလိုျဖစ္သြားပါျပီ။
import cPickle , shelve

one = [ "apple", "orange", "mango", "grape" ]
two = [ "fish", "meet", "beef" ]

write = open ('file.dat', 'w')
cPickle.dump(one, write)
cPickle.dump(two, write)
write.close()

read = open ('file.dat', 'r')

readone= cPickle.load(read)
readtwo= cPickle.load(read)
print readone, "\n", readtwo
read.close()
............
Save ျပီး ျပန္ RUN ၾကည့္လိုက္ပါဦးဗ်။
ဒီခါေတာ့ ေတြ႕ရပါျပီေနာ္။
...
Desktop ေပၚက folder ထဲမွာရွိတဲ့ file.dat ကို Right-click >> Open with text editor နဲ႔ ဖြင့္ၾကည့္လိုက္ရင္ေတာ့
(lp1
S'apple'
p2
aS'orange'
p3
aS'mango'
p4
aS'grape'
p5
a.(lp1
S'fish'
p2
aS'meet'
p3
aS'beef'
p4
a.
ဆိုျပီး ေတြ႕ရပါျပီ။ ဒါေလးေရးတာမ််ား လို႔ မထင္ပါနဲ႔ဦး။  :)
ခုန idle ထဲမွာပဲ ထပ္ျပီး ရိုက္လိုက္ရေအာင္
ခုနစာေတြ ေအာက္မွာပဲေနာ္
shelvefile = shelve.open('newfile.dat')

shelvefile["one"] = ["What", "Who", "Which", "When", "Where", "Why", "How"]
shelvefile["two"] = ["I", "We", "You", "He", "She", "They", "It"]
shelvefile.sync()

for key in shelvefile.keys():
    print key, "", shelvefile[key]
အထက္ပါ လိုင္းေတြကို ရိုက္ျပီးရင္ Save လိုက္ပါ။ RUN ၾကည့္လိုက္ပါဦး။
ထပ္မံျဖည့္သြင္းလိုက္တာက shelve ပါ။ ဘာေတြ ထပ္ျဖည့္လိုက္လို႔ ဘယ္လိုေပၚတယ္ဆိုတာေလးကို ဂရုစိုက္မွတ္သားထားပါ။
ခုေနမွာ Desktop ေပၚက folder ထဲ ဖြင့္ၾကည့္မယ္ဆိုရင္ file.dat , newfile.dat ,  နဲ႔ test.py ဆိုျပီး ဖုိင္သံုးခု ေတြ႕ရပါျပီ။
...
Picking and Shelving Module ကို အသံုးျပဳျပီး .dat ေတြကို ဖန္တီးတာတို႔ ေဒတာျဖည့္တာတို႔ လုပ္တတ္ျပီထင္ပါတယ္။
ခု ေဆြးေႏြးတဲ့ တစ္ခု ကို ျပန္ၾကည့္ရင္ ခုလို ေတြ႕ရပါမယ္။
import cPickle , shelve

one = [ "apple", "orange", "mango", "grape" ]
two = [ "fish", "meet", "beef" ]

write = open ('file.dat', 'w')
cPickle.dump(one, write)
cPickle.dump(two, write)
write.close()

read = open ('file.dat', 'r')

readone= cPickle.load(read)
readtwo= cPickle.load(read)
print readone, "\n", readtwo
read.close()

shelvefile = shelve.open('newfile.dat')

shelvefile["one"] = ["What", "Who", "Which", "When", "Where", "Why", "How"]
shelvefile["two"] = ["I", "We", "You", "He", "She", "They", "It"]
shelvefile.sync()

for key in shelvefile.keys():
    print key, "", shelvefile[key]

ေသခ်ာ လုပ္ၾကည့္ေစလိုပါတယ္။
..........................................................................
..................................................................................

..................................
Python 2 ေနာက္ဆံုးအပိုင္း ၾကည့္ရန္ ဒီေနရာကို ႏွိပ္ပါ

လာေရာက္လည္ပတ္ပတ္မႈကို အထူး ေက်းဇူးတင္ပါသည္ခင္ဗ်ာ

ဒီ Website ကေလးမွာ တင္ထားတဲ့ အေၾကာင္းအရာအေတြကို က႑အလိုက္ ေရြးခ်ယ္ ၾကည့္လိုပါက
ဒီစာေၾကာင္းေလးကို ႏွိပ္ျပီးလည္း ေရြးခ်ယ္ၾကည့္ႏိုင္သလို Menu Box ကေနလည္း ေရြးခ်ယ္ၾကည့္ႏိုင္ပါေၾကာင္း ခင္ဗ်ာ

Thanks

Khit Minnyo

No comments