Python之路,Day01-Python基礎知識

本節內容

1.Python介紹php

2.瞭解IDLE窗口html

3.函數+模塊=標準庫java

4.anaconda介紹python

5.變量、賦值、數據linux

6.項目1 ios

7.循環嵌套 練習if elif P18c++

8.for 循環 內置函數range()git

9.random模塊程序員

10.項目及練習github

 

 

一 python介紹

python的創始人爲吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。 

最新的TIOBE排行榜,Python趕超C++佔據第3, Python崇尚優美、清晰、簡單,是一個優秀並普遍使用的語言。

 

 

 

 

編程語言主要從如下幾個角度爲進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,每一個分類表明什麼意思呢,咱們一塊兒來看一下。

編譯和解釋的區別是什麼?

編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機能夠直接以機器語言來運行此程序,速度很快; 

解釋器則是隻在執行程序時,才一條一條的解釋成機器語言給計算機來執行,因此運行速度是不如編譯後的程序運行的快的. 

這是由於計算機不能直接認識並執行咱們寫的語句,它只能認識機器語言(是二進制的形式)

 

1、低級語言與高級語言

最初的計算機程序都是用0和1的序列表示的,程序員直接使用的是機器指令,無需翻譯,從紙帶打孔輸入便可執行獲得結果。後來爲了方便記憶,就將用0、1序列表示的機器指令都用符號助記,這些與機器指令一一對應的助記符就成了彙編指令,從而誕生了彙編語言。不管是機器指令仍是彙編指令都是面向機器的,統稱爲低級語言。由於是針對特定機器的機器指令的助記符,因此彙編語言是沒法獨立於機器(特定的CPU體系結構)的。但彙編語言也是要通過翻譯成機器指令才能執行的,因此也有將運行在一種機器上的彙編語言翻譯成運行在另外一種機器上的機器指令的方法,那就是交叉彙編技術。

高級語言是從人類的邏輯思惟角度出發的計算機語言,抽象程度大大提升,須要通過編譯成特定機器上的目標代碼才能執行,一條高級語言的語句每每須要若干條機器指令來完成。高級語言獨立於機器的特性是靠編譯器爲不一樣機器生成不一樣的目標代碼(或機器指令)來實現的。那具體的說,要將高級語言編譯到什麼程度呢,這又跟編譯的技術有關了,既能夠編譯成直接可執行的目標代碼,也能夠編譯成一種中間表示,而後拿到不一樣的機器和系統上去執行,這種狀況一般又須要支撐環境,好比解釋器或虛擬機的支持,Java程序編譯成bytecode,再由不一樣平臺上的虛擬機執行就是很好的例子。因此,說高級語言不依賴於機器,是指在不一樣的機器或平臺上高級語言的程序自己不變,而經過編譯器編譯獲得的目標代碼去適應不一樣的機器。從這個意義上來講,經過交叉彙編,一些彙編程序也能夠得到不一樣機器之間的可移植性,但這種途徑得到的移植性遠遠不如高級語言來的方便和實用性大。

 

2、編譯與解釋

編譯是將源程序翻譯成可執行的目標代碼,翻譯與執行是分開的;而解釋是對源程序的翻譯與執行一次性完成,不生成可存儲的目標代碼。這只是表象,兩者背後的最大區別是:對解釋執行而言,程序運行時的控制權在解釋器而不在用戶程序;對編譯執行而言,運行時的控制權在用戶程序。

解釋具備良好的動態特性和可移植性,好比在解釋執行時能夠動態改變變量的類型、對程序進行修改以及在程序中插入良好的調試診斷信息等,而將解釋器移植到不一樣的系統上,則程序不用改動就能夠在移植瞭解釋器的系統上運行。同時解釋器也有很大的缺點,好比執行效率低,佔用空間大,由於不只要給用戶程序分配空間,解釋器自己也佔用了寶貴的系統資源。

編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機能夠直接以機器語言來運行此程序,速度很快;
而解釋器則是隻在執行程序時,才一條一條的解釋成機器語言給計算機來執行,因此運行速度是不如編譯後的程序運行的快的.

 

編譯型和解釋型
咱們先看看編譯型,其實它和彙編語言是同樣的:也是有一個負責翻譯的程序來對咱們的源代碼進行轉換,生成相對應的可執行代碼。這個過程說得專業一點,就稱爲編譯(Compile),而負責編譯的程序天然就稱爲編譯器(Compiler)。若是咱們寫的程序代碼都包含在一個源文件中,那麼一般編譯以後就會直接生成一個可執行文件,咱們就能夠直接運行了。但對於一個比較複雜的項目,爲了方便管理,咱們一般把代碼分散在各個源文件中,做爲不一樣的模塊來組織。這時編譯各個文件時就會生成目標文件(Object   file)而不是前面說的可執行文件。通常一個源文件的編譯都會對應一個目標文件。這些目標文件裏的內容基本上已是可執行代碼了,但因爲只是整個項目的一部分,因此咱們還不能直接運行。待全部的源文件的編譯都大功告成,咱們就能夠最後把這些半成品的目標文件「打包」成一個可執行文件了,這個工做由另外一個程序負責完成,因爲此過程好像是把包含可執行代碼的目標文件鏈接裝配起來,因此又稱爲連接(Link),而負責連接的程序就叫……就叫連接程序(Linker)。連接程序除了連接目標文件外,可能還有各類資源,像圖標文件啊、聲音文件啊什麼的,還要負責去除目標文件之間的冗餘重複代碼,等等,因此……也是挺累的。連接完成以後,通常就能夠獲得咱們想要的可執行文件了。 

上面咱們大概地介紹了編譯型語言的特色,如今再看看解釋型。噢,從字面上看,「編譯」和「解釋」的確都有「翻譯」的意思,它們的區別則在於翻譯的時機安排不大同樣。打個比方:假如你打算閱讀一本外文書,而你不知道這門外語,那麼你能夠找一名翻譯,給他足夠的時間讓他從頭至尾把整本書翻譯好,而後把書的母語版交給你閱讀;或者,你也馬上讓這名翻譯輔助你閱讀,讓他一句一句給你翻譯,若是你想往回看某個章節,他也得從新給你翻譯。 

兩種方式,前者就至關於咱們剛纔所說的編譯型:一次把全部的代碼轉換成機器語言,而後寫成可執行文件;然後者就至關於咱們要說的解釋型:在程序運行的前一刻,還只有源程序而沒有可執行程序;而程序每執行到源程序的某一條指令,則會有一個稱之爲解釋程序的外殼程序將源代碼轉換成二進制代碼以供執行,總言之,就是不斷地解釋、執行、解釋、執行……因此,解釋型程序是離不開解釋程序的。像早期的BASIC就是一門經典的解釋型語言,要執行BASIC程序,就得進入BASIC環境,而後才能加載程序源文件、運行。解釋型程序中,因爲程序老是以源代碼的形式出現,所以只要有相應的解釋器,移植幾乎不成問題。編譯型程序雖然源代碼也能夠移植,但前提是必須針對不一樣的系統分別進行編譯,對於複雜的工程來講,的確是一件不小的時間消耗,何況極可能一些細節的地方仍是要修改源代碼。並且,解釋型程序省卻了編譯的步驟,修改調試也很是方便,編輯完畢以後便可當即運行,沒必要像編譯型程序同樣每次進行小小改動都要耐心等待漫長的Compiling…Linking…這樣的編譯連接過程。不過凡事有利有弊,因爲解釋型程序是將編譯的過程放到執行過程當中,這就決定了解釋型程序註定要比編譯型慢上一大截,像幾百倍的速度差距也是不足爲奇的。 

編譯型與解釋型,二者各有利弊。前者因爲程序執行速度快,同等條件下對系統要求較低,所以像開發操做系統、大型應用程序、數據庫系統等時都採用它,像C/C++、Pascal/Object   Pascal(Delphi)、VB等基本均可視爲編譯語言,而一些網頁腳本、服務器腳本及輔助開發接口這樣的對速度要求不高、對不一樣系統平臺間的兼容性有必定要求的程序則一般使用解釋性語言,如Java、JavaScript、VBScript、Perl、Python等等。 

但既然編譯型與解釋型各有優缺點又相互對立,因此一批新興的語言都有把二者折衷起來的趨勢,例如Java語言雖然比較接近解釋型語言的特徵,但在執行以前已經預先進行一次預編譯,生成的代碼是介於機器碼和Java源代碼之間的中介代碼,運行的時候則由JVM(Java的虛擬機平臺,可視爲解釋器)解釋執行。它既保留了源代碼的高抽象、可移植的特色,又已經完成了對源代碼的大部分預編譯工做,因此執行起來比「純解釋型」程序要快許多。而像VB6(或者之前版本)、C#這樣的語言,雖然表面上看生成的是.exe可執行程序文件,但VB6編譯以後實際生成的也是一種中介碼,只不過編譯器在前面安插了一段自動調用某個外部解釋器的代碼(該解釋程序獨立於用戶編寫的程序,存放於系統的某個DLL文件中,全部以VB6編譯生成的可執行程序都要用到它),以解釋執行實際的程序體。C#(以及其它.net的語言編譯器)則是生成.net目標代碼,實際執行時則由.net解釋系統(就像JVM同樣,也是一個虛擬機平臺)進行執行。固然.net目標代碼已經至關「低級」,比較接近機器語言了,因此仍將其視爲編譯語言,並且其可移植程度也沒有Java號稱的這麼強大,Java號稱是「一次編譯,處處執行」,而.net則是「一次編碼,處處編譯」。呵呵,固然這些都是題外話了。總之,隨着設計技術與硬件的不斷髮展,編譯型與解釋型兩種方式的界限正在不斷變得模糊。

動態語言和靜態語言
一般咱們所說的動態語言、靜態語言是指動態類型語言和靜態類型語言。

(1)動態類型語言:動態類型語言是指在運行期間纔去作數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言,其餘的各類腳本語言如VBScript也多少屬於動態類型語言。

(2)靜態類型語言:靜態類型語言與動態類型語言恰好相反,它的數據類型是在編譯其間檢查的,也就是說在寫程序時要聲明全部變量的數據類型,C/C++是靜態類型語言的典型表明,其餘的靜態類型語言還有C#、JAVA等。

 

強類型定義語言和弱類型定義語言

(1)強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變量被指定了某個數據類型,若是不通過強制轉換,那麼它就永遠是這個數據類型了。舉個例子:若是你定義了一個整型變量a,那麼程序根本不可能將a看成字符串類型處理。強類型定義語言是類型安全的語言。

(2)弱類型定義語言:數據類型能夠被忽略的語言。它與強類型定義語言相反, 一個變量能夠賦不一樣數據類型的值。

強類型定義語言在速度上可能略遜色於弱類型定義語言,可是強類型定義語言帶來的嚴謹性可以有效的避免許多錯誤。另外,「這門語言是否是動態語言」與「這門語言是否類型安全」之間是徹底沒有聯繫的!
例如:Python是動態語言,是強類型定義語言(類型安全的語言); VBScript是動態語言,是弱類型定義語言(類型不安全的語言); JAVA是靜態語言,是強類型定義語言(類型安全的語言)。

 

經過上面這些介紹,咱們能夠得出,python是一門動態解釋性的強類型定義語言。

 

3、python的優缺點

先看優勢

  1. Python的定位是「優雅」、「明確」、「簡單」,因此Python程序看上去老是簡單易懂,初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是很是複雜的程序。
  2. 開發效率很是高,Python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,Python官方庫裏都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大下降開發週期,避免重複造輪子。
  3. 高級語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節
  4. 可移植性————因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工 做在不一樣平臺上)。若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就幾乎能夠在市場上全部的系統平臺上運行
  5. 可擴展性————若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用它們。
  6. 可嵌入性————你能夠把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。

python

1 print("hello world")
View Code

c++

1 #include <iostream>
2 int main(void)
3 {
4 std::cout<<"Hello world";
5 }
View Code

c

1 #include <stdio.h>
2 int main(void)
3 {
4 printf("\nhello world!");
5 return 0;
6 }
View Code

java

1 public class HelloWorld{
2   // 程序的入口
3   public static void main(String args[]){
4     // 向控制檯輸出信息
5     System.out.println("Hello World!");
6   }
7 }
View Code

php

1 <?php  
2             echo "hello world!";  
3 ?> 
View Code

ruby

puts "Hello world." 
View Code

再看缺點:

  1. 速度慢,Python 的運行速度相比C語言確實慢不少,跟JAVA相比也要慢一些,所以這也是不少所謂的大牛不屑於使用Python的主要緣由,但其實這裏所指的運行速度慢在大多數狀況下用戶是沒法直接感知到的,必須藉助測試工具才能體現出來,好比你用C運一個程序花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是很是誇張了,可是你是沒法直接經過肉眼感知的,由於一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數狀況下Python已經徹底能夠知足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種狀況下,固然仍是建議你用C去實現的。
  2. 代碼不能加密,由於PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認爲這算是一個缺點,若是你的項目要求源代碼必須是加密的,那你一開始就不該該用Python來去實現。
  3. 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的工具,使得任什麼時候刻僅有一個線程在執行,Python的線程是操做系統的原生線程。在Linux上爲pthread,在Windows上爲Win thread,徹底由操做系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即便在多核CPU平臺上,因爲GIL的存在,因此禁止多線程的並行執行。關於這個問題的折衷解決方法,咱們在之後線程和進程章節裏再進行詳細探討。

 

二 瞭解IDLE窗口

 

回顧解釋型。什麼是IDE?Python還有哪些IDE? 

 

三 函數+模塊=標準庫 

 一、 python模塊類型

a.標準庫

b.開源模塊(github等)

c.自定義模塊

 二、觀察標準庫

1 import sys
2 sys.platform

1 print(sys.version)

1 import os
2 os.getcwd()

1 os.environ

1 import datetime
2 datetime.date.today()

1 import datetime
2 datetime.date.today().day
3 datetime.date.today().month
4 datetime.date.today().year

 

1 datetime.date.isoformat(datetime.date.today())

1 import time
2 time.strftime("%H:%M")
#%y 兩位數的年份表示(00-99)
#%Y 四位數的年份表示(000-9999)
#%m 月份(01-12)
#%d 月內中的一天(0-31)
#%H 24小時制小時數(0-23)
#%I 12小時制小時數(01-12)
#%M 分鐘數(00=59)
#%S 秒(00-59)
#%a 本地簡化星期名稱
#%A 本地完整星期名稱
#%b 本地簡化的月份名稱
#%B 本地完整的月份名稱
#%c 本地相應的日期表示和時間表示
#%j 年內的一天(001-366)
#%p 本地A.M.或P.M.的等價符
#%U 一年中的星期數(00-53)星期天爲星期的開始
#%w 星期(0-6),星期天爲星期的開始
#%W 一年中的星期數(00-53)星期一爲星期的開始
#%x 本地相應的日期表示
#%X 本地相應的時間表示
#%Z 當前時區的名稱
#%% %號自己
View Code

 

1 import html
2 html.escape("This HTML fragment contains a <script>script</script> tag.")
3 html.unescape("I &hearts; Python's &lt;standard library&gt;.")

 

 

問:怎麼知道標準庫的某個特定的模塊作什麼?

答:Python文檔給出了標準庫的全部答案:https://docs.python.org/3/library/index.html

 

標準庫

1.時間模塊:time與datetime

在Python中,一般有這幾種方式來表示時間:

1)時間戳 指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)到如今等秒數(UNIX誕生元年)。

1 import time
2 time.time()

2)格式化的時間字符串

按照本身等格式定義的字符串例如:(2019-08-25 08:30:56)等

3)元組(struct_time)共九個元素。因爲Python的time模塊實現主要調用C庫,因此各個平臺可能有所不一樣。

UTC(Coordinated Universal Time,世界協調時)亦即格林威治天文時間,世界標準時間。在中國爲UTC+8。DST(Daylight Saving Time)即夏令時。

 

 *help的使用

1 import time
2 help(time)
1 import time
2 time.localtime()
1 import time
2 time.sleep(2)
1 import time
2 #轉換成UTC
3 help(time.gmtime)
4 time.gmtime()

 

四 anaconda介紹(python的正確姿式)

python的通常安裝方法:

  windows:

  一、 https://www.python.org/downloads/ 選擇適合本身電腦的最新版本 (30M)

  二、配置環境變量 

  【右鍵計算機】 - - 》【屬性】 - - 》【高級系統設置】 - - 》【高級】 - - 》【環境變量】 - - 》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】  - - > 【Python安裝目錄追加到變值值中,用 ; 分割】
     如:原來的值;C:\python37,切記前面有分號
  
   mac、linux自帶。
 

管理工具爲:pip  例:

1 pip install request

 

anaconda介紹及安裝:

  Anaconda 是Python的一個開源發行版本,主要面向科學計算(數據分析、數據挖掘等)。(500-700M)

  預裝了很是多標準庫,例如numpy(矩陣計算)、PIL(圖像處理)、pandas(數據分析)等。

  anaconda安裝:

  一、https://www.anaconda.com/distribution/

  二、選擇自動配置環境變量,不須要手動配置。

  三、手動配置:(默認C:\ProgramData)

    C:\ProgramData\Anaconda3;
    C:\ProgramData\Anaconda3\Library\mingw-w64\bin;
    C:\ProgramData\Anaconda3\Library\usr\bin;
    C:\ProgramData\Anaconda3\Library\bin;
    C:\ProgramData\Anaconda3\Scripts;

管理工具:conda

1 conda install pandas

 

五  變量、賦值、數據

 變量用於存儲要在計算機程序中引用和操做的信息。它們還提供了一種用描述性名稱標記數據的方法,以便讀者和咱們本身可以更清楚地理解咱們的程序。將變量看做包含信息的容器是有幫助的。它們的惟一目的是在內存中標記和存儲數據。而後能夠在整個程序中使用這些數據。

 

聲明變量

1 #_*_coding:utf-8_*_
2 
3 name ="Zhichao Xu"

上述代碼聲明瞭一個變量,變量名爲: name,變量name的值爲:"Zhichao Xu"

 變量定義的規則:

    • 變量名只能是 字母、數字或下劃線的任意組合
    • 變量名的第一個字符不能是數字
    • 如下關鍵字不能聲明爲變量名
      ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda','not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

變量的命名(補充):

正確的姿式:

1 wait_time = 26
2 gf_of_liu = "Lucy" #_類型,比較經常使用的類型
3 GFOfLiu = "Lucy" #首字母大寫 
View Code

錯誤的一些例子:

1 2age = 18
2 and = "true"
3 $name ="James"
4 gender is = "male"
View Code

 

 

變量的賦值:

1 name = "Zhichao"
2 
3 name2 = name
4 print(name,name2)
5 
6 name = "Han-Teng"
7 
8 print("What is the value of name2 now?")

 

 

 

六 項目1

 1 from datetime import datetime
 2 
 3 odds = [  1, 3,  5,  7,  9, 11,13,15,17,19
 4              21,23,25,27,29,31,33,35,37,39
 5              41,43,45,47,49,51,53,55,57,59]    
 6 
 7 right_this_minute = datetime.today().minute
 8 
 9 if right_this_minute in odds:
10     print("This minute seems a little odd.")
11 else:
12     print("Not an odd minute.")
View Code

 注:if語句

   if 條件:
if-語句塊

if 條件:
if-語句塊
else:
else-語句塊

if 條件:
if-語句塊
elif 條件:
elif-語句塊
...
else:
else-語句塊
能夠進行嵌套。 不要超過3層, 最多5層

七 循環嵌套 練習if elif P18

1 if today == "Saturday":
2     print("Party!")
3 elif today == "Sunday":
4     if condition == "Headache":
5         print("Recover, then rest.")
6     else:
7         print("Rest.")
8 else:
9     print("Work, work, work.")
View Code

 

八 for 循環 內置函數range()

用例1 循環迭代數字變量

1 for i in [1,2,3]:
2     print(i)

用例2 循環迭代字符串變量

1 for ch in "Hi!":
2     print(ch)

用例3 迭代指定的次數

1 for num in range(5):
2     print('Head First Rocks!')

 range 實驗:

 1 range(5)
 2 
 3 list(range(5))
 4 
 5 list(range(5,10))
 6 
 7 list(range(0,10,2))
 8 
 9 list(range(10,0,-2))
10 
11 list(range(10,0,2))
12 
13 list(range(99,0,-1))
View Code

 

九 random模塊

1 import random
2 print(random.random())
3 #random.random()用於生成一個0到1的隨機符點數: 0 <= n < 1.0
1 print (random.randint(1,7)) 
2 #random.randint()的函數原型爲:random.randint(a, b),用於生成一個指定範圍內的整數。
3 # 其中參數a是下限,參數b是上限,生成的隨機數n: a <= n <= b

 大腦 P35測試 (改):

 1 from datetime import datetime
 2 
 3 import random
 4 import time
 5 
 6 odds = [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59]
 7 
 8 for i in range(5):
 9     right_this_second = datetime.today().second
10     if right_this_second in odds:
11         print("This second seems a little odd.")
12     else:
13         print("Not an odd second.")
14     wait_time = random.randint(1,5)
15     time.sleep(wait_time)
View Code

 

十 練習

題目1:暫停一秒輸出

題目2:輸入某年某月某日,判斷該日是這一年的第幾天?

題目3:暫停一秒輸出,並格式化當前的時間

附加題:一、有四個數字:一、234,能組成多少個互不相同且無重複數字的三位數?各是多少?

         二、嘗試輸出9*9乘法表

相關文章
相關標籤/搜索