2016年12月12日 星期一

Python 好用的網路資源


  • https://pypi.python.org/pypi/sshtunnel

2016年8月8日 星期一

使用 Django 後台管理程式 Admin

設定目標:
  • 利用 Django 的後台管理程式,進行站台管理
快速操作流程:
  1. 先移植一個管理樣板進到 Admin 工具內:
    #python manage.py migrate
    
  2. 利用 createsuperuser 指令,建立一個 super user 帳號:
    # ./manager.py createsuperuser
    
  3. 啟動 Django Web 站台:
    #./manage.py runserver 192.168.5.104:8081
    
  4. 利用瀏覽器登入後台系統:
    #firefox http://192.168.5.104:8081/admin
    
參考文獻:
  • https://djangogirlstaipei.gitbooks.io/django-girls-taipei-tutorial/content/django/admin.html
  • http://dokelung-blog.logdown.com/posts/220832-django-notes-6-manage-your-system-admin

利用 supervisor 來管理 Django 的程序

設定目標:
  • 安裝 supervisor 來進行 Django 程序管理
  • 為配合 nginx ,請參考這一篇安裝好 Nginx 以及 Django
快速安裝流程:
  1. 利用 pip 工具,安裝 supervisor 套件:
    #pip install supervisor
    
  2. 利用 supervisor 工具,產生 supervisor 設定檔:
    #echo_supervisord_conf > /etc/supervisord.conf
    
  3. 編輯 supervisor 設定檔:
    #vim /etc/supervisord.conf
    (在檔案最尾端,加上下列幾行設定:)
    [program:mysite]
    command=/bin/uwsgi --http :8081 --chdir /usr/share/nginx/html/mysite --module mysite.wsgi
    directory=/usr/share/nginx/html/mysite
    startsecs=0
    stopwaitsecs=0
    autostart=true
    autorestart=true
    
  4. 啟動 supervisor 服務:
    #supervisord -c /etc/supervisord.conf
    
  5. 動新啟動 mysite 站台運作:
    #supervisorctl -c /etc/supervisord.conf restart mysite
    
    ※其他操作 supervisorctl 的指令:supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]
  6. 開啟防火牆設定:
    #firewall-cmd --permanent --add-port=8081/tcp
    #firewall-cmd --reload
    
  7. 利用 ini 文件來結合 nginx 運作:
    #vim /usr/share/nginx/html/mysite/mysite.ini
    [uwsgi]
    socket = /tmp/mysite.sock
    chdir=/usr/share/nginx/html/mysite
    wsgi-file = mysite/wsgi.py
    touch-reload=/usr/share/nginx/html/mysite/reload
    
    processes = 1
    threads = 2
    
    chmod-socket = 664
    chown-socket=nginx:nginx
    
  8. 重新編輯 supervisor 設定檔:
    #vim /etc/supervisord.conf
       :
       :(略過...)
    [program:mysite]
    command=/bin/uwsgi --ini /usr/share/nginx/html/mysite/mysite.ini
    directory=/usr/share/nginx/html/mysite
    startsecs=0
    
  9. 動新啟動 mysite 站台運作:
    #supervisorctl -c /etc/supervisord.conf restart mysite
    
  10. 在 Nginx 上,新增 mysite 設定檔:
    #vim /etc/nginx/conf.d/mysite.conf
    server {
        listen      8081;
        server_name 192.168.5.104;
        charset     utf-8;
    
        client_max_body_size 75M;
    
        location /media  {
            alias /usr/share/nginx/html/mysite/media;
        }
    
        location /static {
            alias /usr/share/nginx/html/mysite/static;
        }
        location / {
            uwsgi_pass  unix:///tmp/mysite.sock;
            include     /etc/nginx/uwsgi_params;
        }
    }
    
    
  11. 重新啟動 Nginx :
    #systemctl restart nginx
    

參考文獻:
  • http://www.aahyhaa.com/archives/587
  • http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
  • https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and-nginx-on-centos-7
  • https://www.restran.net/2015/04/09/centos-uwsgi-nginx-django/

2016年8月4日 星期四

Django 程式開發初體驗

快速開發與測試:
  1. 修改 urls.py 檔案內容:
    #vim urls.py
        :
    from views import here  #加入此行
        :
        :
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^here/$', here),  #加入這一行
    ]
    
    
  2. 新增 views.py 檔案:
    #vim views.py
    # -*- coding: utf-8 -*- 
    from django.http import HttpResponse
    
    def here(request):
        return HttpResponse("Hello World!")
    
    
  3. 啟動 django 站台:
    #../manage.py runserver 192.168.5.104:8080
    
  4. 使用 firefox 開啟網頁:
    #firefox http://192.168.5.104:8080/here/
    

Django 網路相關文章

教學文件:

  • http://www.ziqiangxuetang.com/django/django-nginx-deploy.html

在 CentOS7 / RHEL7 上安裝 Django

快速安裝流程:
  1. 安裝 Python 的 pip 工具:
    #yum install python-pip
    
  2. 利用 pip 工具安裝 Django:
    #pip install django
       :
       :
    Installing collected packages: django
    Successfully installed django-1.10
    
  3. 配置 Django 網頁目錄:
    #cd /usr/share/nginx/html/
    #django-admin startproject mysite
    
  4. 編修 settings.py 檔案內容:
    #cd mysite/mysite
    #vim settings.py
    (在檔案最後的一行下,加入下列程式碼:)
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
  5. 利用 manage.py 來產生"static"網頁資料匣:
    #cd ..
    #./manage.py collectstatic
    
  6. 開啟防火牆設定:
    #firewall-cmd --permanent --add-port=8080/tcp
    #firewall-cmd --reload
    
  7. 利用 manage.py 來測試網站是否正常運作:
    #./manage.py runserver 192.168.5.104:8080
    
  8. 安裝 uWSGI 套件:
    #yum install python-devel gcc
    #pip install uwsgi
    
  9. 利用 uWSGI 開啟網站:
    # uwsgi --http :8080 -w mysite.wsgi
    
  10. 利用 pip 更新 pip:
    #pip install --upgrade pip
    
參考文獻:

  1. http://www.jianshu.com/p/69b3b8e39bf4

2016年7月26日 星期二

Python 操作檔案目錄

Python 對於檔案處理的方法
  • 檔案處理方式:
    • 讀寫檔案內容!(上一章節)
    • 操作檔案目錄系統!
    • 執行檔案程式!(下一章節)
  • Python 常用的檔案操作函數:
    函數名稱說明所屬模組
    open(檔案名稱, 檔案操作類型)
    close()
    開啟檔案
    關閉檔案
    default
    exits('路徑/檔案名稱')測試檔案是否存在os.path
    isfile('檔案名稱')
    isdir('目錄名稱')
    檢查檔案類型os.path
    isabs('路徑名稱')檢查路徑名稱是否為路徑os.path
    copy('來源檔名','目的檔名')複製檔案shutil
    move('來源檔名','目的檔名')搬移檔案shutil
    rename('來源檔名','目的檔名')將檔案名稱更名os
    link('來源檔名','目的檔名')
    symlink('來源檔名','目的檔名')
    建立檔案連結os
    islink('檔案名稱')判斷是否為符號連結檔案os.path
    chmod('檔案名稱',0o權限值)更改檔案權限os
    chown('檔案名稱',uid,gid)更改檔案擁有權os
    abspath('檔案名稱')取得檔案絕對路徑名稱os.path
    realpath('檔案名稱')取得檔案符號連結路徑名稱os.path
    remove('檔案名稱')將檔案刪除os.path

  • Python 常用的目錄操作函數:
    函數名稱說明所屬模組
    mkdir('目錄名稱')建立目錄os
    rmdir('目錄名稱')刪除目錄os
    listdir('目錄名稱')列出目錄內容os
    chdir('目錄名稱')切換目錄os
快速測試:
  1. 開啟互動式指令:
    #python3
    Python 3.4.3 (default, Jan 26 2016, 02:25:35)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  2. 建立檔案:
    >>> test1 = open("test",'wt')
    >>> print('Hello World!',file=test1)
    >>> test1.close()
    
  3. 判斷檔案是否存在:
    >>> import os
    >>> os.path.exists('test')
    True
    
  4. 檢查檔案類型:
    >>> os.path.isfile('test')
    True
    >>> os.path.isdir('test')
    False
    >>> os.path.isdir('.')
    True
    >>> os.path.isdir('..')
    True
    >>> os.path.isabs('/tmp')
    True
    >>>
    
  5. 複製檔案:
    >>> import shutil
    >>> shutil.copy('test','test1')
    'test1'
    >>>
    
  6. 更改檔案名稱:
    >>> import shutil
    >>> shutil.move('test1','test2')
    'test2'
    >>> import os
    >>> os.rename('test2','test2_move')
    >>>
    
  7. 建立連結檔案:
    >>> os.link('test2_move','test2.txt')
    >>> os.symlink('test2.txt','test3.txt')
    >>> os.path.islink('test3.txt')
    True
    >>> os.path.islink('test2.txt')
    False
    >>>
    
  8. 更改檔案權限:
    >>> os.chmod('test2.txt',0o400)
    >>>
    
  9. 更改檔案擁有權:
    >>> os.chown('test2.txt',1000,5)
    >>>
    
  10. 取得檔案目前路徑:
    >>> os.path.abspath('test2.txt')
    '/home/student/python_HW/files/test2.txt'
    >>>
    
  11. 取得符號連結檔案路徑名稱:
    >>> os.path.realpath('test3.txt')
    '/home/student/python_HW/files/test2.txt'
    
  12. 刪除檔案:
    >>> os.remove('test3.txt')
    >>> os.path.exists('test3.txt')
    False
    >>>
    
  13. 建立目錄:
    >>> os.mkdir('work')
    >>> os.path.exists('work')
    True
    
  14. 刪除目錄:
    >>> os.rmdir('work')
    >>> os.path.exists('work')
    False
    >>>
    
  15. 列出目錄內容:
    >>> os.mkdir('work')
    >>> os.listdir('work')
    []
    >>> os.mkdir('work/test')
    >>> os.listdir('work/test')
    []
    >>>
    
  16. 改變目前工作路徑:
    >>> os.chdir('work')
    >>> os.listdir('.')
    ['test']
    >>>
    

Python 的檔案讀寫功能

Python 對於檔案處理的方法
  • 檔案處理方式:
    • 讀寫檔案內容!
    • 操作檔案目錄系統!(下一章節)
    • 執行檔案程式!(下一章節)
    • Python 常用的檔案讀寫函數:
      函數名稱說明
      write(資料內容)寫入資料到檔案內
      read()
      read(字元數量)
      一次讀出所有資料內容
      讀出多少字元數量
      readline()每次只讀取一行
      readlines()讀取全部內容,但每次只回傳一行
  • Python 開啟檔案內容的基本格式:
    檔案物件變數名稱 = open(檔案名稱, 檔案操作類型)
    
    ##檔案操作類型,共兩個字元###
    ####第一個字元####
    r : 讀取
    w : 寫入檔案(可新增檔案)
    x : 寫入檔案(不可新增檔案)
    a : 寫入檔案(附加在檔案結尾處)
    
    ####第二個字元####
    t : 代表文字
    b : 代表二進位
    
快速測試:
  1. 開啟互動式指令:
    #python3
    Python 3.4.3 (default, Jan 26 2016, 02:25:35)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  2. 對檔案進行寫入文字的動作:
    >>> text1 = "This is a test files!"
    >>> fileOut = open('test1.txt','wt')
    >>> fileOut.write(text1)
    21
    >>>quit()
    #
    
  3. 驗證寫入結果:
    $ cat test1.txt
    This is a test files!
    
  4. 編寫讀取檔案的程式:
    #vim readFiles.py
    class readFiles():
       def __init__(self):
          self.__name = ""
    
       def readFiles(self,name):
          self.__files = open(name,'rt').read()
          return self.__files
    
    
    testfiles = readFiles()
    print(testfiles.readFiles("test1.txt"))
    
  5. 執行程式:
    #python3 readFiles.py
    This is a test files!
    
  6. 修改一下檔案的程式:
    #vim readFiles.py
    class readFiles():
       def __init__(self):
          self.__name = ""
    
       def readFiles(self,name):
          self.__files = open(name,'rt')
          po = self.__files.read()
          self.__files.close()
          return po
    
       def readLines(self,name):
          self.__lines = open(name,'rt')
          lin = len(self.__lines.readlines())
          self.__lines.close()
          return lin
    
    testfiles = readFiles()
    print(testfiles.readFiles("test1.txt"))
    print("test1.txt has ",testfiles.readLines("test1.txt")," lines")
    
  7. 執行程式:
    #python3 readFiles.py
    This is a test files!
    Hello World !!
    This is the 3rd lines!!
    
    test1.txt has  3  lines
    

2016年7月25日 星期一

Python 隱藏物件的屬性

Python 隱藏屬性的方法
  • 將屬性元素隱藏的好處如下:
    • 外部程式只能使用公開的屬性,避免內部元素被濫用!
    • 限制程式設計師必須要遵守已制定的規範,避免開發過程混亂!
  • 可參考前一篇文章!
  • Python 隱藏屬性的基本格式:
    class 類別名稱():
        
        def 方法名稱(給定值名稱):
           self.__變數名稱 = 給定值名稱
             :
             :
    
    
快速測試:
  1. 修改 human.py 的內容:
    #vim human.py
    class Human():
    
      def __init__(self):
        self.__name = "I am a human"
    
      def showName(self):
        return self.__name
    
      def eat(self):
        print("eating food ...")
    
    
  2. 修改 asian.py 的內容:
    #vim asian.py
    from human import Human
    
    class Asian(Human):
       def __init__(self,name):
          super().__init__()
          self.__name = super().showName()+ "\n" + "I am a Asian!" + name
    
       def showName(self):
          return self.__name
    
       def eat(self):
          print("eating rise food ...")
    
    
  3. 修改 runprogram.py 的內容:
    #vim runprogram.py
    from asian import Asian
    from american import American
    
    peter = Asian("Peter")
    print(peter.showName())
    print(peter.__name)
    peter.eat()
    
    
  4. 執行程式:
    #python3 runprogram.py
    I am a human
    I am a Asian!Peter
    Traceback (most recent call last):
      File "runprogram.py", line 6, in 
        print(peter.__name)
    AttributeError: 'Asian' object has no attribute '__name'
    
    

Python 的覆寫方法與 super 應用

類別覆寫方法結構
  • 方法的覆寫,是利用物件導向的繼承功能來報成!好處如下:
    • 可開發相同名稱,但功能不一定同於父類別的方法程式!
    • 可任意擴充或縮限父類別的方法,免於被父類別的方法所限制!
    • 利用 super ,可善用父類別內的方法!
  • 可參考前一篇文章!
  • Python 覆寫方法的基本格式:
    class 類別名稱():
        def 方法名稱(屬性名稱[,...]):
           執行程式內容
             :
             :
    
    class 子類別名稱(父類別名稱):
        def 同於父類別的方法名稱(屬性名稱[,...]):
           super().父類別的方法名稱
           執行不同於父類別的程式內容
             :
             :
    
快速測試:
  1. 修改 human.py 的內容:
    #vim human.py
    class Human():
      def __init__(self):
        self.name = "I am a Human"
    
      def showName(self):
        return self.name
    
      def eat(self):
        print("eating food ...")
    
    
  2. 修改 asian.py 的內容:
    #vim asian.py
    from human import Human
    
    class Asian(Human):
       def __init__(self,name):
          super().__init__()
          self.name = super().showName()+ "\n" + "I am a Asian!" + name
    
       def showName(self):
          return self.name
    
       def eat(self):
          print("eating rise food ...")
    
    
  3. 修改 runprogram.py 的內容:
    #vim runprogram.py
    from asian import Asian
    from american import American
    
    peter = Asian("Peter")
    print(peter.showName())
    peter.eat()
    
    
  4. 執行程式:
    #python3 runprogram.py
    I am a Human
    I am a Asian!Peter
    eating rise food ...
    

Python 的類別繼承結構

類別繼承結構
  • 繼承是物件導向重要精神,特徵如下:
    • 免於重複開發相同程式碼
    • 善用已開發好的類別物件!
  • Python 類別繼承基本格式:
    class 子類別名稱(父類別名稱):
        def 方法名稱(屬性名稱[,...]):
           執行程式內容
             :
             :
    
快速測試:
  1. 使用互動式指令:
    #python3
    Python 3.4.3 (default, Jan 26 2016, 02:25:35)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  2. 產生一個父類別 Car():
    >>> class Car():
    ...   def __init__(self):
    ...     print("I am a car !")
    ...
    
  3. 產生一個子類別 sedan(Car):
    >>> class Sedan(Car):
    ...   pass
    ...
    
  4. 產生一個 Car 物件以及 Sedan 物件:
    >>> myCar = Car()
    I am a car !
    >>> mySecCar = Sedan()
    I am a car !
    >>>
    
利用檔案測試:
  1. 編寫一個 Human() 類別:
    #vim human.py
    class Human():
      def __init__(self):
        self.name = "Human"
    
  2. 編寫一個 Asian() 類別,繼承 Human 類別:
    #vim asian.py
    from human import Human
    
    class Asian(Human):
       def __init__(self,name):
          self.name = name
       def showName(self):
          return self.name
    
  3. 編寫一個可執行程式:
    #vim  runprogram.py
    from asian import Asian
    
    peter = Asian("Peter")
    print(peter.showName())
    
  4. 執行程式:
    #python3  runprogram.py
    (執行結果)
    Peter
    

2016年7月20日 星期三

Python 的類別與物件

類別基本結構
  • 類別是物件產生的基本樣本,裡面包含了兩種元素:
    • 屬性:如同變數名稱
    • 方法:如同函式
  • Python 類別基本格式:
    class 類別名稱():
        def 方法名稱(屬性名稱[,...]):
           執行程式內容
             :
             :
    
  • Python 產生物件的基本方式:
    物件名稱 = 類別名稱(變數名稱)
    
    #物件名稱是自己命名的!
    #類別名稱必需要符合 class 的定義!
    #變數名稱需要有指定值!
    
  • Python 物件內屬性與方法的基本使用方式:
    #呼叫物件的某個屬性值:
    物件名稱.屬性名稱
    
    #使用物件的某個方法:
    物件名稱.方法名稱
    

快速測試:
  1. 使用互動式指令:
    #python3
    Python 3.4.3 (default, Jan 26 2016, 02:25:35)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  2. 建立一個 person 類別,並且將定義 name 屬性與 list_name 方法:
    >>> class person():
    ...   def __init__(self,name):
    ...     self.name = name
    ...   def list_name():
    ...     return self.name
    ...
    
  3. 產生 person 物件,並且列出名字:
    >>> peter = person("Peter")
    >>> print(peter.name)
    Peter
    >>>
    >>>quit()
    $
    
  4. 利用編寫 python 程式檔:
    $vim human.py
    class Human():
      def __init__(self,name):
         self.name = name
      def list_name(self):
         return self.name
    
    peter = Human("Peter")
    print(peter.list_name())
    
  5. 執行 python 程式檔:
    $python3 human.py
    Peter
    

Python 的函式定義與使用

函式基本結構
  • Python 函式基本定義:
    def 函式名稱(參數名稱[,...]):
        執行程式內容
           :
           :
    
  • Python 函式基本使用方式:
    函式名稱(參數名稱)
    

快速測試:
  1. 使用互動式指令:
    #python3
    Python 3.4.3 (default, Jan 26 2016, 02:25:35)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  2. 定義函式,並且執行:
    >>> def agree():
    ...   return "right"
    ...
    >>> print(agree())
    right
    >>> quit()
    $
    
  3. 編寫 python 程式檔:
    $vim def1.py
    def agree():
      return True
    
    def disagree():
      return False
    
    if agree():
       print("No Problem")
    else:
       print("Not OK")
    
  4. 執行 python 程式檔:
    $python3 def1.py
    No Problem
    

2016年7月18日 星期一

Python 的字串與串列(二)

字串格式化:
  1. 善用 print() 函式 !!
    • 範例 1:
      #python38
      Python 3.8.3 (default, Aug 31 2020, 16:03:14) 
      [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>>
      >>> name = 'Peter'
      >>> print('Hello, ', name)
      Hello,  Peter
      
    • 範例 2:
      >>> name = 'Peter'
      >>> print('Hello', end = '')
      Hello>>> print(name)
      Peter
      (end = '' 表示不換行!)
      
    • 範例 3:
      >>> name = 'Peter'
      >>> print('Hello', name, sep = ', ')
      Hello, Peter
      (sep = ', ' 表示使用逗點作為分隔符號!)
      
  2. 善用 format() 字串格式化函式:
    • 範例 1:
      >>> '{} / {} = {}'.format(10,3,10/3)
      '10 / 3 = 3.3333333333333335'
      (按 {} 順序,一個蘿蔔一個坑地填入數字!)
      
    • 範例 2:
      >>> '{2} / {1} = {0}'.format(10/3,3,10)
      '10 / 3 = 3.3333333333333335'
      (在{}中,使用數字指定填入的資料!)
      
    • 範例 3:
      >>> '{a} / {b} = {results}'.format(results=10/3,b=3,a=10)
      '10 / 3 = 3.3333333333333335'
      (在{}中,使用變數名稱指定填入的資料!)
      
    • 範例 4:
      >>> '{a:5d} / {b:5d} = {results:.2f}'.format(results=10/3,b=3,a=10)
      '   10 /     3 = 3.33'
      (在{}中,指定填入資料的格式,5d 表示整個欄位有5個字元,沒有字元的地方,填入空白字元!)
      
    • 範例 5:
      >>> '{a:<5d} / {b:<5d} = {results:.2f}'.format(results=10/3,b=3,a=10)
      >>> '10    / 3     = 3.33'
      (在{}中,指定填入資料的格式,<5d 表示整個欄位有5個字元,並且靠左對齊!)
      
    • 範例 6:
      >>> '{a:>5d} / {b:>5d} = {results:.2f}'.format(results=10/3,b=3,a=10)
      >>> '   10 /     3 = 3.33'
      (在{}中,指定填入資料的格式,<5d 表示整個欄位有5個字元,並且靠右對齊!)
      
  3. 善用 f-string 進行字串運算:
    • 範例 1:
      >>> name = "Peter"
      >>> f'Hello, {name}'
      'Hello, Peter'
      
    • 範例 2:
      >>> name = "Peter"
      >>> f'Hello, {"Mac" if name == "Peter" else name}'
      'Hello, Mac'
      

Python 的基本資料型態(一)

內建數值型態:
  • 整數:int 不分整數或長整數
  • 浮點數:float
  • 字串:" " 與 ' ' 內的字元串
  • 布林:True 與 False
    • None、False、0、0.0、0j、''、()、{}、[] 以上均被 bool() 視為 False,其餘均為 True
  • 複數:使用 a+bj 的形式使用
  • Python 是一種「強類型」語言,物件的類型無法變更!

  • Python 的四則運算:
    運算子說明範例結果
    +加法3 + 58
    -減法3 - 5-2
    *乘法3 * 515
    /有小數點的除法3 / 50.6
    //沒有小數點的除法3 // 50
    %取餘數3 % 53
    **算次方3 ** 5243
  • 運算順序:先乘除,後加減!有括號,先算括號內部!

  • Python 常用四則運算的縮寫:
    運算子範例展開說明
    += a += 3 a = a + 3
    -= a -= 3 a = a - 3
    *= a *= 3 a = a * 3
    /= a /= 3 a = a / 3
    //= a //= 3 a = a // 3
    %= a %= 3 a = a % 3
    **= a **= 3a = a ** 3

  • Python 基數:
    • 二進位:0b 或 0B
    • 八進位:0o 或 0O
    • 十六進位:0x 或 0X

快速測試:
  1. 使用互動式指令(REPL):
    #python3
    Python 3.4.3 (default, Jan 26 2016, 02:25:35)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  2. 四則運算:
    >>> 3 - 5
    -2
    >>> 3 / 5
    0.6
    >>> 3 // 5
    0
    >>> 3 % 5
    3
    >>> 3 ** 5
    243
    >>> 3 + 5
    8
    >>> 3 * 5
    15
    >>> 2 + 3 * 5
    17
    >>> ( 2 + 3 ) * 5
    25
    >>> a = 3 + 2j
    >>> b = 2 + 3j
    >>> a + b
    (5+5j)
    
  3. 四則運算縮寫的使用方式:
    >>> a = 3
    >>> a %= 3
    >>> print(a)
    0
    >>> a = 2
    >>> a **= 3
    >>> print(a)
    8
    
  4. 基數展現方式:
    >>> 0b101011
    43
    >>> 0o732641
    243105
    >>> 0xFABC5D
    16432221
    

Python 的迴圈結構

基本迴圈結構:
  • Python 基本迴圈 while 結構:
    while (判斷式):
        執行程式內容
           :
           :
    
  • Python 基本迴圈 for 結構:
    for 變數名稱 in 有多個內容的變數:
        執行程式內容
           :
           :
    
  • Python 迴圈常用的關鍵字:
    關鍵字名稱說明
    break中斷迴圈執行
    continue跳過迴圈執行
    else檢查迴圈運作

快速測試:
  1. 使用互動式指令:
    #python3
    Python 3.4.3 (default, Jan 26 2016, 02:25:35)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  2. While 迴圈基本練習:
    >>> count = 1
    >>> while count <= 5:
    ...    print("Right")
    ...    count += 1
    ... else:
    ...    print("Left")
    ...
    (執行結果)
    Right
    Right
    Right
    Right
    Right
    Left
    
    
  3. 離開互動式指令:
    >>> quit()
    
  4. 編寫 python 程式檔案(while 迴圈):
    $ vim while1.py
    count = 1
    while count <= 5:
      print(count,"\t","Right")
      if (count == 3):
        print("break")
        break
      count += 1
    else:
      print("Left")
    
  5. 執行 python 程式檔案:
    $ python3 while1.py
    1        Right
    2        Right
    3        Right
    break
    
    
  6. 編寫 python 程式檔案(For 迴圈):
    $ vim for1.py
    cats = ["Peter","John","Tom","Judy"]
    for cat in cats:
      if cat == "Tom":
        print(cat,"\t","is Running Away ...")
        continue
      print (cat, "\t","is sitting here..")
    else:
      print ("Cats are All")
    
    
  7. 執行 python 程式檔案:
    $ python3 for1.py
    Peter    is sitting here..
    John     is sitting here..
    Tom      is Running Away ...
    Judy     is sitting here..
    Cats are All
    
    
  8. 編寫更複雜的 For 迴圈程式:
    $ vim for2.py
    cats = {'Persian':'Peter',
            'Aegean':'Judy'}
    for cat in cats.values():
      print ("Cats are :", cat)
    
    for kinds in cats.keys():
      print ("Cats' catogary has:", kinds)
    
    for catogary, cat in cats.items():
      print (catogary," has the cats:",cat)
    
    
  9. 執行 python 程式檔案:
    $ python3 for2.py
    Cats are : Judy
    Cats are : Peter
    Cats' catogary has: Aegean
    Cats' catogary has: Persian
    Aegean  has the cats: Judy
    Persian  has the cats: Peter
    
    

Python 的控制結構

基本控制結構:
  • Python 的註解:#
  • Python 的字串換行延續:放在字串尾端的 \
  • Python 基本判斷控制結構:
    if (判斷式):
        執行程式內容
    else:
        執行程式內容
    
  • Python 常用的比較運算字:
    運算子說明
    ==等於
    !=不等於
    >=大於等於
    <=小於等於
    >大於
    <小於
    in 有哪些項目
    and , or , not多重條件判斷

快速測試:
  1. 使用互動式指令:
    #python3
    Python 3.4.3 (default, Jan 26 2016, 02:25:35)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  2. 基本練習:
    >>> Hello = True
    >>> if Hello:
    ...    print("Right")
    ... else:
    ...    print("Left")
    ...
    Right
    

Python 的字串與串列(一)

字串基本認知:
  • Python3 支援 Unicode 標準,可容納任何語言文字!
  • Python 的字元是不可變的!
  • 字串:字元一個一個串起來的結果!
  • Python 處理字串常用函數:
    函數名稱說明
    str()將資料類型轉換成字串
    print()在螢幕上列出內容
    len()計算字元長度
    split()利用特定分隔符號來分解字串
    join()結合字串
    strip()修剪兩端的字元
    capitalize()第一個字母改成大寫
    title()每個字的第一個字元改成大寫
    upper()所有字元改成大寫
    lower()所有字元改成小寫
    swapcase()大小寫互換
    center()置中字串
    ljust()靠左對齊
    rjust()靠右對齊
    replace()置換字串
    \跳脫字元設定
    \n換行
    \t空出一個間隔來對齊文字
    +結合字串
    *複製字串
    []擷取字元
    [開始:結束:間隔]擷取字串中的某一段字元組

快速測試:
  1. 使用互動式指令:
    #python3
    Python 3.4.3 (default, Jan 26 2016, 02:25:35)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  2. 字串練習:
    >>> str(123)
    '123'
    >>> abc = "Hello,\n This is a book!,\n"
    >>> print(abc)
    Hello,
     This is a book!,
    
    >>> deg = "He is a boy,\t and She is a girl!\t"
    >>> print(abc+deg)
    Hello,
     This is a book!,
    He is a boy,     and She is a girl!
    >>> abc[5]
    ','
    >>> abc[15]
    ' '
    >>> abc[8]
    'T'
    >>> abc[3:15:2]
    'l, hsi'
    >>> abc[-3]
    '!'
    >>> len(abc)
    25
    >>> abc.title()
    'Hello,\n This Is A Book!,\n'
    >>> abc.upper()
    'HELLO,\n THIS IS A BOOK!,\n'
    >>> abc.lower().capitalize()
    'Hello,\n this is a book!,\n'
    >>> abc.swapcase()
    'hELLO,\n tHIS IS A BOOK!,\n'
    >>> abc.center(50)
    '            Hello,\n This is a book!,\n             '
    >>> abc.ljust(50)
    'Hello,\n This is a book!,\n                         '
    >>> abc.rjust(50)
    '                         Hello,\n This is a book!,\n'
    >>> abc.replace('book','pen')
    'Hello,\n This is a pen!,\n'
    

Python 的變數名稱

變數命名規則:
  • 名稱的第一個字元,不可以使用數字!
  • 底線開頭的變數名稱,將被視為有特殊用途!
  • 變數名稱可用大小寫字母、數字、底線!
  • 不可以使用 Python 保留字!
  • 變數值指派方式:
    變數名稱 = 資料值
    

快速測試:
  1. 使用互動式指令:
    #python3
    >>> a = 123
    >>> print(a)
    123
    >>> type(a)
    <class 'int'>
    >>> a = 1.234
    >>> print(a)
    1.234
    
  2. 使用 Python 檔案:
    #vim Hello.py
    (寫入下列兩行:)
    test_sentence = "Hello World"
    print(test_sentence)
    
    (存檔後,執行下列指令:)
    #python3 Hello.py
    Hello World
    

在 CentOS7/RHEL7 上安裝 Python 3.4

設定目標:
  • 在 CentOS7 /RHEL7 上安裝 Python 3.4!

快速設定流程:
  1. 安裝 EPEL:
    #yum install epel-release
    
  2. 安裝 Python 3.4:
    #yum install python34
    
  3. 安裝 Python 3.4 其他相關套件:
    #yum install  python34-setuptools python34-tools
    
  4. 測試 Python 3.4 (一):
    # python3
    Python 3.4.3 (default, Jan 26 2016, 02:25:35)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> quit()
    
    
  5. 測試 Python 3.4 (二):
    #vim Hello.py
    print("Hello World")
    
    #python3 Hello.py
    Hello World
    
  6. 你應該要知道的 Python 風格
    # python3
    Python 3.4.3 (default, Jan 26 2016, 02:25:35)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import this
    The Zen of Python, by Tim Peters
    
    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!
    >>>