Thursday, November 23, 2017

Python3 Lesson 3



Lesson 1  မၾကည့္ရေသးသူမွာ ဒီစာေၾကာင္းကို ႏွိပ္ပါ
Lesson 2  မၾကည့္ရေသးသူမွာ ဒီစာေၾကာင္းကို ႏွိပ္ပါ
.
Python Programming
Using Comment in Python

မေန႔က ကြ်န္ေတာ္ နမူနာျပခဲ့တဲ့ python program အေသးေလးကို ျပန္ၾကည့္ရေအာင္။
Example Program
......................
#enter name
name = input("What is your name?")
print ("Hello, " + name + "!")

#enter age
age = input("How old are you?")
print ("That's great, " + name + "!")

#Asking temperature outside
temperature = float(input("What is the temperature outside, " + name + "?"))
if temperature > 70:
print ("Weather is so hot. Please, wear shorts")
print ("Enjoy your day, " + name + "!")
else:
print ("Wear long pants, " + name + "!")
print ("Get some exercise outside")
..............................
ကြ်န္ေတာ္ေရးျပခဲ့တဲ့ ပရိုဂရမ္မွာ အစဆံုးကေန စျပီး တစ္ပိုဒ္စီရဲ႕ အစတိုင္းမွာ # ခံေရးထားတဲ့ စာေၾကာင္းေလးေတြ ေတြ႔ရမွာပါ။
Program ကို RUN  ၾကည့္တဲ့အခါ ထိုစာလံုးေတြ ေပၚမလာတာကိုလည္း သတိထားမိၾကမွာပါ။ အဲဒါကို comment လို႔ ေခၚတယ္ဆိုျပီး ကိုယ္ေရးခ်င္တဲ့ မွတ္စု ကို ထည့္သြင္းမွတ္ထားႏိုင္တယ္ဆိုတာ ေျပာခဲ့ပါတယ္။
ဒီေန႔ ေဆြးေႏြးမွာက comment ကို ဘာေၾကာင့္ သံုးတာလဲ ဆိုတာပါ။
Program ေတြ ႀကီးလာတာနဲ႔အမွ် ပိုပိုျပီး ရႈပ္ေထြးလာၾကသလို ဖတ္ရတာလည္း ပိုပိုခက္လာပါတယ္။ ပရိုဂရမ္ ႀကီးလာတာနဲ႔အမွ် ရွာေဖြရတဲ့အပိုင္းေတြ ျပင္ဆင္ခ်င္တဲ့အပိုင္းေတြကို ျပန္ရွာရခက္သြားတယ္။ အဲသလိုပဲ
ကိုယ္ေရးခဲ့တုန္းက ဒီအပိုင္းက ဘာလုပ္ဖို႔ ေရးခဲ့တာ။ ဘာေၾကာင့္ ေရးခဲ့တာ စတာကို ျပန္ေတြးရ စဥ္းစားရတာကလည္း ပိုခက္လာပါတယ္။ ေရးခဲ့တဲ့ အစိတ္အပိုင္းထဲမွာ ကိုယ့္အေနနဲ႔ နားလည္လြယ္မယ့္ မွတ္သားခ်က္ တစ္ခုခု ထည့္သြင္းေရးဆြဲဖို႔ စိတ္ကူးမိတယ္ဆိုရင္ေတာ့ ဒါဟာ သိပ္ေကာင္းတဲ့ idea လို႔ ဆိုရမွာျဖစ္ျပီး အဲသလို ထည့္သြင္းမွတ္သားထားတဲ့ မွတ္စုေတြကို Python မွာ comment လို႔ ေခၚပါတယ္။ # ခံေရးရပါတယ္။ Enter မႏွိပ္မခ်င္း
အဲသည္စာတန္းကို ပရိုဂရမ္မာရဲ႕ မွတ္စုလို႔ စက္က သတ္မွတ္ထားမွာျဖစ္ျ္ပီး run တဲ့အခ်ိန္ ထုတ္ျပမွာမဟုတ္ပါဘူး။
Program ကို ျပန္ စစ္ေဆးတဲ့အခါေတြမွာလည္း ဒီ note ေလးေတြ ဖတ္ျပီး အလြယ္တကူ မွတ္မိႏိုင္ပါတယ္။ ဒါေၾကာင့္ ျပန္စဥ္းစားရတာ အခ်ိန္ တိုနဲ႔ ျပီးသြားတာေပါ့။

...............................................................................

ဒီတစ္ခါေတာ့ Variable အမည္ ေရြးခ်ယ္ျခင္းကို ေျပာျပပါမယ္
ကြ်န္ေတာ္တို႔ေတြဟာ variable ေတြ အမ်ိဳးမ်ိဳးေတာ့ သတ္မွတ္ေရးသားေနၾကပါတယ္။ variable တစ္ခုစီအတြက္ နာမည္ေရြးခ်ယ္မႈပိုင္းကအစ ဘယ္လို သတ္မွတ္ယူရတယ္ဆိုတာမ်ိဳး ခုထိ မေျပာရေသးပါဘူး။
ဒီေန႔ေတာ့ ေျပာျပီေနာ္။
သင့္အေနနဲ႔ python မွာ variable ေတြ ေပးဖို႔အတြက္ အမည္မ်ားစြာကို အသံုးျပဳႏိုင္မွာျဖစ္ပါတယ္။ ဒါေပမယ့္ သင့္အေနနဲ႔ variable အျဖစ္ ေပးလို႔မရတဲ့ နာမည္ေတြလည္း ရွိေနပါေသးတယ္။
Reserve Words ေတြကို သင့္အေနနဲ႔ variable အမည္အျဖစ္ အသံုးျပဳႏိုင္ျခင္း မရွိပါဘူး။ သံုးမိခဲ့ရင္ ပရိုဂရမ္က ဘာလုပ္ရမွန္းမသိဘဲ ရႈပ္ေထြးသြားမွာျဖစ္ပါယ္။ ဒါေၾကာင့္ သင့္အေနနဲ႔ အသံုးမျပဳရမယ့္ နာမည္ေတြကို သိေနဖို႔ေတာ့ လို႔ပါတယ္။
................................

Reserved Keywords for Python Programming

Keywords
Here is a list of the Python keywords.  ဒါကို အဓိက မွတ္ပါ။

False               def                 if                  raise
None              del                  import          return
True               elif                  in                 try
and                else                 is                 while
as                  except             lambda              with
assert              finally             nonlocal            yield
break               for                 not               
class               from                or               
continue            global             pass           

အထက္ပါ စကားလံုးေတြကေတာ့ Python Keywords  ေတြပဲ ျဖစ္ပါတယ္။ Variable သတ္မွတ္တဲ့အခါ သူတို႔ကို အသံုးျပဳလို႔ မရပါဘူး။ ဒီစာလံုးေတြကို အလြတ္မရရင္ေတာင္ သင္သံုးမိတဲ့အခါ သူက Orange အေရာင္နဲ႔ ျပေပးမွာျဖစ္လို႔ သင့္အေနနဲ႔ variable သတ္မွတ္လို႔ မရမွန္း တန္းသိပါမယ္။ variable သတ္မွတ္တဲ့အခါ အနက္ေရာင္စာလံုးသာ ျမင္ရမွာ ျဖစ္လို႔ပါပဲ။ ဥပမာ
IDLE 3 ဖြင့္ျပီး kmn = 5 လို႔ ေပးၾကည့္ပါ။ kmn ကို အနက္ေရာင္နဲ႔ ျမင္ရမွာပါ။ အထက္ပါ keywords ေတြထဲက class = 5 လို႔ ေရးၾကည့္ပါ။   class ေရးျပီးတာနဲ႔ ခ်က္ခ်င္း အေရာင္ေျပာင္းသြားတာကို ေတြ႕ရမွာျဖစ္ပါတယ္။
......................................................................

                           Modules

BlindElephant       base64              imghdr              reprlib
CDROM               bdb                 imp                 requests
ChAP                binascii            importlib           resource
DLFCN               binhex              inspect             rfidiot-cli
IN                  binwalk             io                  rlcompleter
OpenGL              bisect              ipaddress           runpy
PIL                 brlapi              isotype             sched
PyQt4               builtins            itertools           scipy
TYPES               bz2                 jcopmifare          select
__future__          c1218               jcopsetatrhist      selectors
_ast                c1219               jcoptool            send_apdu
_bisect             c1222               json                serial
_bootlocale         cProfile            keyword             shelve
_bz2                cairo               lfxtype             shlex
_codecs             calendar            lib2to3             shutil
_codecs_cn          cardselect          linecache           signal
_codecs_hk          caribou             locale              sip
_codecs_iso2022     cgi                 logging             sipconfig
_codecs_jp          cgitb               loginall            sipconfig_nd5
_codecs_kr          chardet             louis               site
_codecs_tw          chunk               lsb_release         sitecustomize
_collections        cmath               lzma                six
_collections_abc    cmd                 macpath             smbc
_compat_pickle      code                macurl2path         smoke_zephyr
_compression        codecs              mailbox             smtpd
_crypt              codeop              mailcap             smtplib
_csv                collections         marshal             sndhdr
_ctypes             colorsys            math                socket
_ctypes_test        compileall          matplotlib          socketserver
_curses             concurrent          mifarekeys          sod
_curses_panel       configparser        mimetypes           speechd
_datetime           contextlib          miniterm            speechd_config
_dbm                copy                mmap                spwd
_dbus_bindings      copyreg             modulefinder        sqlite3
_dbus_glib_bindings copytag             mpl_toolkits        sre_compile
_decimal            crcelk              mrpkey              sre_constants
_dummy_thread       createfontdatachunk multiprocessing     sre_parse
_elementtree        crypt               multiselect         ssl
_functools          csv                 netrc               stat
_hashlib            ctypes              nis                 statistics
_heapq              cups                nntplib             string
_imp                cupshelpers         ntpath              stringprep
_io                 curses              nturl2path          struct
_json               cycler              numbers             subprocess
_locale             datetime            numpy               sunau
_lsprof             dateutil            opcode              symbol
_lzma               dbm                 operator            symtable
_markupbase         dbus                optparse            sys
_md5                deb822              orca                sysconfig
_multibytecodec     debconf             os                  syslog
_multiprocessing    debian              ossaudiodev         tabnanny
_opcode             debian_bundle       painter             tarfile
_operator           deblaze             parser              telnetlib
_osx_support        decimal             pathlib             tempfile
_pickle             decorator           pdb                 termineter
_posixsubprocess    demotag             pickle              termios
_pydecimal          difflib             pickletools         test
_pyio               dis                 pig                 textwrap
_random             distutils           pilconvert          this
_sha1               doctest             pildriver           threading
_sha256             dummy_threading     pilfile             thresholder
_sha512             eeprom              pilfont             time
_signal             email               pilprint            timeit
_sitebuiltins       encodings           pipes               tkinter
_smbc               enhancer            pkg_resources       token
_socket             enum                pkgutil             tokenize
_sqlite3            errno               platform            trace
_sre                explode             player              traceback
_ssl                faulthandler        plistlib            tracemalloc
_stat               fcntl               pn532emulate        transit
_string             fdxbnum             pn532mitm           tty
_strptime           filecmp             poplib              turtle
_struct             fileinput           posix               types
_symtable           fnmatch             posixpath           typing
_sysconfigdata      formatmifare1kvalue pprint              unicodedata
_sysconfigdata_m    formatter           profile             unique
_testbuffer         fpectl              pstats              unittest
_testcapi           fractions           pty                 uno
_testimportmultiple froschtest          pwd                 unohelper
_testmultiphase     ftplib              py_compile          urllib
_thread             functools           pyasn1              urllib3
_threading_local    gc                  pyatspi             uu
_tkinter            genericpath         pyclbr              uuid
_tracemalloc        getopt              pydoc               venv
_warnings           getpass             pydoc_data          viewer
_weakref            gettext             pyexpat             warnings
_weakrefset         gi                  pygtkcompat         wave
abc                 gifmaker            pylab               weakref
aifc                glob                pyparsing           webbrowser
antigravity         grp                 pyqtgraph           writelfx
apt                 gzip                pytz                writemifare1k
apt_inst            hashid              q5reset             wsgiref
apt_pkg             hashlib             queue               xdg
aptsources          heapq               quopri              xdrlib
argparse            hidprox             random              xml
array               hitag2brute         re                  xmlrpc
ast                 hitag2reset         readlfx             xxlimited
asynchat            hmac                readline            xxsubtype
asyncio             html                readmifare1k        zipapp
asyncore            http                readmifaresimple    zipfile
atexit              idlelib             readmifareultra     zipimport
audioop             imaplib             readtag             zlib

အထက္ပါ စကားလံုးေတြက python ရဲ႕ module ေတြ ျဖစ္တာေၾကာင့္ variable နာမည္ေတြဟာ သူတို႔နဲ႔ မတူညီရပါဘူး။
သံုးမိခဲ့ရင္ ဒီတိုင္းစမ္းၾကည့္ရင္ေတာ့ ရေပမယ့္ module ေတြ run တဲ့အခါေတာ့ ရႈပ္သြားတတ္ပါတယ္။
........................................................................................
Symbols

!=                  *=                  <<                  ^
"                   +                   <<=                 ^=
"""                 +=                  <=                  _
%                   ,                   <>                  __
%=                  -                   ==                  `
&                   -=                  >                   b"
&=                  .                   >=                  b'
'                   ...                 >>                  j
'''                 /                   >>=                 r"
(                   //                  @                   r'
)                   //=                 J                   |
*                   /=                  [                   |=
**                  :                   \                   ~
**=                 <                   ]                 
အထက္ပါ သေကၤတေတြဟာလည္း Symbols ေတြ ျဖစ္လို႔ variable နာမည္ မထည့္ရပါဘူး။

..............................................................................................
Topics
Here is a list of available topics.

ASSERTION           DELETION            LOOPING             SHIFTING
ASSIGNMENT          DICTIONARIES        MAPPINGMETHODS      SLICINGS
ATTRIBUTEMETHODS    DICTIONARYLITERALS  MAPPINGS            SPECIALATTRIBUTES
ATTRIBUTES          DYNAMICFEATURES     METHODS             SPECIALIDENTIFIERS
AUGMENTEDASSIGNMENT ELLIPSIS            MODULES             SPECIALMETHODS
BASICMETHODS        EXCEPTIONS          NAMESPACES          STRINGMETHODS
BINARY              EXECUTION           NONE                STRINGS
BITWISE             EXPRESSIONS         NUMBERMETHODS       SUBSCRIPTS
BOOLEAN             FLOAT               NUMBERS             TRACEBACKS
CALLABLEMETHODS     FORMATTING          OBJECTS             TRUTHVALUE
CALLS               FRAMEOBJECTS        OPERATORS           TUPLELITERALS
CLASSES             FRAMES              PACKAGES            TUPLES
CODEOBJECTS         FUNCTIONS           POWER               TYPEOBJECTS
COMPARISON          IDENTIFIERS         PRECEDENCE          TYPES
COMPLEX             IMPORTING           PRIVATENAMES        UNARY
CONDITIONAL         INTEGER             RETURNING           UNICODE
CONTEXTMANAGERS     LISTLITERALS        SCOPING           
CONVERSIONS         LISTS               SEQUENCEMETHODS   
DEBUGGING           LITERALS            SEQUENCES         
အထက္ပါ topic ေတြကိုလည္း variable name မွာ မသံုးသင့္ပါဘူး။။။။။။။။။။။။။။။။။။။။။။။။။။။။
....................................................................................................
မသံုးရမွာေတြက မ်ားလိုက္တာ ဘယ္လိုမွတ္မိမလဲ လို႔ ေမးစရာရွိပါတယ္။ ဒါဆိုရင္ေတာ့ ကြ်န္ေတာ္တို႔ ေရွ႕ပိုင္းမွာ ေလ့က်င့္ခဲ့တဲ့ သင္ခန္းစာေတြထဲက variables ေတြထဲမွာ ဒီစာလံုးေတြ တစ္လံုးမွ မပါခဲ့တာက သက္ေသပါပဲ။
တမင္သာမဟုတ္ရင္ ဒီစာလံုးေတြကို variable name ေပးမိဖို႔ေတာင္ မရွိပါဘူး။ Keywords ေတြသာ မွားႏိုင္ေျခရွိပါတယ္။ Keywords တစ္မ်ိဳးတည္းကိုသာ အေသမွတ္ထားပါ။
.......................................................................................................


Python Programming
.
Debugging
မမွန္ကန္တဲ့ variable name ကို သံုးမိရင္ အမ်ားဆံုး ေပၚေလ့ရွိတာက Syntax error ပါ။  IDLE3 မွာ ရိုက္ၾကည့္ပါ။
>>> kmn = 5    သတ္မွတ္လို႔ ရေပမယ့္
>>> class = 6
SyntaxError: invalid syntax
ဆိုျပီး ေပၚလာမွာျဖစ္ပါတယ္။ class ေရးကတည္းက အေရာင္ ေျပာင္းေနတာ သတိထားမိရင္ ခုလို ေပၚစရာ မရွိေတာ့ဘူးေပါ့။
ေနာက္တစ္ခု ၾကည့္ရေအာင္ပါ။ IDLE3 မွာပါပဲ။ ခုန ေအာက္မွာ ဆက္ရိုက္ၾကည့္ပါ။
>>>bag name = 5
SyntaxError: invalid syntax
>>> ဘာမွ မပါဘဲနဲ႔ ဘာျဖစ္တာလဲ ေမးစရာရွိပါလိမ့္မယ္။ variable name ေတြမွာ space ျခားထားလို႔ပါပဲ။ Space ျခားလိုက္တဲ့အတြက္ python က operand ၂ခု အေနနဲ႔ ျမင္သြားပါတယ္။ operator မပါတဲ့ operands အေနနဲဲ႔ ျမင္သြားလို႔ error တက္လာျခင္း ျဖစ္ပါတယ္။ ဥပမာေျပာရရင္ if နဲ႔ ဆင္တူပါတယ္။
name =  "Aye Aye"
if name == "Mg Mg":
    print "Mg Mg, you have no permission to enter."
elif name == "Ag Ag":
    print "Ag Ag, you have no permission to enter."
elif name == "Ma Ma":
    print "Ma Ma, you have no permission to enter."
elif name == "Aye Aye":
    print "Hello! Aye Aye, welcome to our admin team."
else:
    print "Sorry, you have no permission to enter."
ဒီနမူနာေလးကို ေရွ႕တုန္းက သင္ခဲ့ျပီးျပီေနာ္။  အေပၚေၾကာင္းပဲ ျဖတ္ျပီးရွင္းျပပါမယ္။
name =  "Aye Aye" လို႔ variable သတ္မွတ္လိုက္တယ္။
if name ==  if ဆိုတဲ့ operator ေနာက္မွာ ခုန variable name  အဲပံုစံနဲ႔ လုိက္ပါတယ္။ ဒါေၾကာင့္
bag name = ဆိုျပီး variable သတ္မွတ္လို႔ မရတာျဖစ္ပါတယ္။ ဒါဆို ဘယ္လိုလုပ္မလဲ။ variable ကိုလည္း bag name လို႔ ေပးမွ တြက္ရ ျပန္ရွာရ လြယ္မွာ/
မခက္ပါဘူး။ ဒီလို ေပးလိုက္ရင္ ရပါျပီ။
bag_name = 5 ဘာ error မွ မတက္ေတာ့ပါဘူး။ အဓိကကေတာ့ space  မျခားဖို႔ပါပဲ။
SyntaxError: invalid syntax ျပီးျပီဆိုေတာ့ ဒီခါ Run Time Error အေၾကာင္း ဆက္ရေအာင္
...........................
RUN Time Error
ဒါကိုေတာ့ ကြန္ပ်ဴတာ သံုးသူေတြ ေတြ႔ဖူးေနက် ျဖစ္ႏိုင္ပါတယ္။ ေတြ႔ဖူးခ်င္မွလည္း ေတြ႔ဖူးပါလိမ့္မယ္။  ဂိမ္းကစားရင္း time limit ကုန္သြားတဲ့ RUN Time Error ကို ေျပာတာမဟုတ္ပါဘူး။
RUN  တဲ့ အခ်ိန္(time) မွာ လြဲေခ်ာ္မႈေၾကာင့္ error တက္တာေပါ့။ ဥပမာ သင္က variable မသတ္မွတ္ရေသးခင္ variable ကို သံုးမိတယ္ဆိုပါေတာ့။ Run Time Error တက္လာမွာပါ။
နမူနာ စမ္းရေအာင္ ဖြင့္ထားတဲ့ IDLE ရွိရင္ ပိတ္။ IDLE အသစ္သံုးျပီး စမး္ရေအာင္။
>>> kmn
Traceback (most recent call last):
  File "", line 1, in
    kmn
NameError: name 'kmn' is not defined
kmn က ဘာ ဆိုတဲ့  သတ္မွတ္ခ်က္ မသတ္မွတ္ရေသးဘဲ ေခၚသံုးမိတာကိုး။
>>> if kmn == 5:
print ("Birthday")

*****enter ၂ခ်က္ ႏွိပ္မွ ရမယ္ေနာ္။******
Traceback (most recent call last):
  File "", line 1, in
    if kmn == 5:
NameError: name 'kmn' is not defined
>>> ဒါလည္း ထို႔အတူပါပဲ။ အစမွာ ဘာမွ မသတ္မွတ္ရေသးဘဲ သံုးမိတာကိုး။
တစ္ကယ္တမ္း ျဖစ္ရမွာက variable  သတ္မွတ္ျပီးမွ ေခၚသံုးရမွာပါ ေအာက္ပါအတိုင္းေပါ့
ခုန IDLE 3 မွာပဲ ဆက္ရိုက္လည္း ရတယ္။ အသစ္မွာလည္း ရပါတယ္။
>>> kmn = 5 (သတ္မွတ္လိုက္တယ္)
>>> kmn
5 (ေခၚသံုးၾကည့္တာ အေျဖထြက္လာတယ္)
>>> if kmn == 2:
print ("Hello")
else:
print ("No")


No
................
if kmn == 2 လို႔ ေရးထားခဲ့လို႔ enter ၂ခ်က္ဆင္းေတာ့ else အေျဖ ထြက္တာပါ။ အေပၚမွာ သတ္မွတ္ခဲ့တာက kmn = 5 ျဖစ္လို႔ပါပဲ။ IDLE  မွာ ေရးတဲ့ခါ else အေၾကာင္း မေရးခင္ ေရွ႕ကို ျပန္သြားဖို႔ မေမ့နဲ႔ေနာ္။
..................
ဒီခါ ကြ်န္ေတာ္ ေဆြးေႏြးသြားမွာက Python Strings  ေတြကိုပါ။
.
Introduction to Strings
(Manipulating Strings)
Strings are lines of text that are declared with single quotes or double quotes. တဲ့။ သူ႔ရဲ႕ မူလ defination ကိုက ၾကည့္လိုက္တာနဲ႔ ရွင္းပါတယ္။
Strings ဆိုတာဟာ single quote ('abcd') or double quotes ("abcd")  ထဲမွာ ေရးထားတဲ့ စာေတြကို ဆိုလိုပါတယ္တဲ့။
>>> "Happy" + " " + "Birthday!"
'Happy Birthday!'
>>> မ်က္ေတာင္အဖြင့္ အပိတ္လို႔ ကြ်န္ေတာ္တို႔ ေခၚခဲ့ၾကတဲ့  quotes ေတြထဲမွာ ေရးရျပီး အစိမ္းေရာင္ စာလံုးေလးေတြနဲ႔ IDLE 3 မွာ ျမင္ရမယ့္ စာေတြကို ဆိုလိုပါတယ္။
တစ္ခါတစ္ခါ string ေတြကို တစ္ေၾကာင္းတည္း တစ္ပံုစံတည္းေဖာ္ျပဖို႔ ခက္တဲ့အခါ ဒီပံုစံမ်ိဳး သံုးျပီး ေဖာ္ျပရပါေသးတယ္။

Triple quoted String
e.g.
>>> kmn = '''
There are many needs for large programs:
1. Hi
2. Hello
3. Hey
4. Wow!
'''
>>> print (kmn)

There are many needs for large programs:
1. Hi
2. Hello
3. Hey
4. Wow!

>>> kmn = ဆိုျပီးတဲ့ေနာက္မွာ triple quotes ကို အသံုးျပဳလိုက္ပါတယ္။  (' ' ') or (" " ") ပါ။ အဖြင့္နဲ႔ အပိတ္ တူဖို႔လိုပါတယ္။ ေနာက္ျပီး သံုးခုကို တစ္ဆက္တည္း ရိုက္သြားရပါမယ္။
...............................


Object Orientation
Python is an Object-Oriented Programming language (OOP). Every piece of data and even functions and types are objects.
Python သည္ bject-Oriented Programming language (OOP) ျဖစ္ပါတယ္။ ေဒတာ အပိုင္းအစေတြ ဖန္ရွင္ေတြနဲ႔ ပံုစံတိုင္းက Object ေတြ ျဖစ္ၾကပါတယ္

စာလံုး အႀကီးအေသး ေျပာင္းလဲ အသံုးျပဳႏိုင္တဲ့ function ေလးကို စမ္းၾကည့္ပါဦး။
>>> s="Hello!"
>>> s.upper()
'HELLO!'
>>> s.lower()
'hello!'
...........................
အထက္ပါ ဥပမာ ကို ရွင္းရရင္ upper ဆိုတာ method တစ္ခု ျဖစ္ျပီးေတာ့ string နဲ႔ တြဲဆက္နိုင္ string ထဲက စာေတြကို စာလံုးအႀကီးေတြခ်ည္း ေျပာင္းလဲေပးႏိုင္တဲ့ method ျဖစ္ပါတယ္။
အဲဒါကို သံုးႏိုင္ဖို႔အတြက္ variable သတ္မွတ္ရပါတယ္။ ျပီးရင္ေတာ့ variabel.upper() ပံုစံနဲ႔ အသံုးျပဳရတာျဖစ္ပါတယ္။ lower လည္း upper လိုပါပဲ။ စာလံုးႀကီးနဲ႔ အေသးသာ ကြာတာျဖစ္ပါတယ္။
ဒီေနရာမွာ ေတြးမိဖို႔ လိုတာက data type  တိုင္းက သူတို႔ေပၚ သက္ေရက္မႈရွိမယ့္ operation (methods) ေတြကို သိၾကတယ္ ဆိုတာေပါ့။

String ေပၚ သက္ေရာက္ေသာ Methods မ်ား
Methods on Strings
Strings ေတြဟာ   Operation ေပါင္းမ်ားစြာကို support ေပးပါတယ္။ ဒီ methods ေတြရဲ႕ list ကို dir("...") ဆိုတဲ့ built-in function ကို အသံုးျပဳရရွိႏိုင္ပါတယ္။
>>> dir ("")
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>>
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
>>>
...................................
Example
s.replace(sub, replacement, count) ဆိုတဲ့ ပံုစံက အလြန္ အသံုးမ်ားျပီး လိုအပ္တဲ့ ပံုစံ တစ္ခု ျဖစ္ပါတယ္။
s ဆိုတာက နမူနာ variable ပါ။ အေပၚမွာ s- "Hello!" ဆိုတာ ေျပာထားတာမို႔ ဆက္ေျပာလိုက္ျခင္း ျဖစ္ပါတယ္။
sub ကေတာ့ ကိုယ္ အစားထိုး ျဖည့္သြင္းမယ့္ sub လို႔ မွတ္ပါ။
replacement ဆိုတာကေတာ့ ကိုုယ္ အစားထိုး ျဖည့္သြင္းမယ့္ စကားလံုးပါ။
count ကေတာ့ အေရအတြက္ကို ျပတာေပါ့ဗ်ာ။
ကဲ ဒီတိုင္း နားမလည္ရင္ ဥပမာေလးနဲ႔ ၾကည့္ရေအာင္ဗ်
>>> s = '-123'                    ဒါက variable သတ္မွတ္တာ ရွင္းပါတယ္ေနာ္

>>> t = s.replace('-', '', 1) t ကို s က ကိန္းကိုပဲ  အစားထိုးမယ္လို႔ ေျပာလိုက္တာ။ အဲမွာ ဆက္ရွင္းျပရရင္
s.replace('-', '', 1)
sကို အစားထိုးမယ္ ('-ေနရာကို', ' 'ဘာမွ မျဖည့္ထားတာနဲ႔ , တစ္ၾကိမ္ အစားထိုးမယ္ေပါ့။


>>> t tကို print ၾကည့္တဲ့အခါ
'123' - ေနရာ ဘာမွျဖည့္မထားတဲ့အတြက္ ဘာမွ မရွိေတာ့တာ ေတြ႕ရပါမယ္။
>>>
ရွင္းသြားေအာင္ ေနာက္တစ္ခု ထပ္ၾကည့္ရေအာင္ပါ။
>>> p = '1, 1, 2, 2, 2, 3' p ကို variable သတ္မွတ္လိုက္တယ္။
>>> q = p.replace('2', '3', 3) q က်ေတာ့ p တန္ဖိုးေတြထဲက 2 ကို 3  နဲ႔ 3 ခါ အစားထိုးမယ္လို႔ ဆိုလိုတာပါ။
>>> q print လိုက္တဲ့အခါမွာေတာ့ q တန္ဖိုးမွာ p မွာတုန္းက ရွိခဲ့တဲ့ 2 သံုးလံုးေနရာမွာ  ၃ သံုးလံုး အစားထိုး ေရာက္လာတာကို ေတြ႕ရမွာျဖစ္ပါတယ္။
'1, 1, 3, 3, 3, 3'
............................
>>> s = '-123' ပထမဆံုးတစ္ခုပါပဲ
>>> t = s.replace('-', '', 1) - ေနရာမွာ ဘာမွမရွိတာနဲ႔ အစားထိုးတယ္
>>> t - ေပ်ာက္သြားျပီ
'123'
>>> o = s.replace('-', '+', 2) - ေနရာမွာ + နဲ႔ အစားထိုးတယ္။ ၂ႀကိမ္ အစားထိုးမယ္လို႔ ေရးမိထားတယ္။
>>> o
'+123' +123 ျဖစ္သြားျပီ။ + တစ္ခုပဲ အစားဝင္လာတယ္။ ၂ခုမလာဘူး။ အေၾကာင္းကေတာ့ အစားသြင္းစရာ ၂ ေနရာ မရွိလို႔ ျဖစ္တယ္။
........................
ရွင္းေလာက္ျပီလို႔ ယူဆပါတယ္။
ေနာက္တစ္ခု counting ထပ္လာပါမယ္။

s.count(sub) ပံုစံပါ။
ကဲ စျပီေနာ္

.....
>>> s = 'Once upon a time, there was a king in the forest. His name was King Naung.'
>>> s.count('o')
2
>>> s.count('o') ဆိုတာက s ဆိုတဲ့ string ထဲက  o အေရအတြက္ကို ေရတြက္မယ္လို႔ ဆိုလိုတာပါ။ o အေသးေနာ္။ အႀကီးေရခ်င္ရင္ အႀကီး ေရးရမယ္။
>>> s.count('was')
2
အတြဲလိုက္ကိုလည္း ရွာေဖြ ေရတြက္ႏိုင္ပါတယ္။ စာေတြ အရမ္းမ်ားသြားရင္ ရွာရတာ အဆင္ေျပတာေပါ့။
>>> s.count('')
75
အားလံုးကို ေရတြက္တာပါ။ စာလံုးေရ ၇၅ လံုး ရွိတယ္လို႔ အေျဖထြက္ပါတယ္။ မယံုရင္ ေရၾကည့္ပါ။
>>>s.count(' ')
15
space bar ခ်ထားတဲ့အေရအတြက္ပါ။ အထက္ပါ ၂ခု မွားတတ္တယ္ေနာ္ ေသခ်ာၾကည့္ ေရးပံုလံုးဝ မတူပါ။ space ေရခ်င္ရင္ '  ' ၾကားမွာ space ျခားရပါမယ္။



ဒီေန႔ေတာ့ ဒီေလာက္ပဲ မွတ္ရေအာင္ပါ။ အရမ္းမ်ားေနရင္ မမွတ္မိမွာစိုးလို႔

Python3 Lesson 4 ၾကည့္ရန္ ဒီစာေၾကာင္းကို ႏွိပ္ပါ

Thanks

Khit Minnyo

0 comments:

Post a Comment