1. 程式人生 > >python基礎1:認識python和基礎知識

python基礎1:認識python和基礎知識

第一章 認識python和基礎知識

本章目錄

        1.1. 認識python(瞭解)
        1.2. 第一個python程式
        1.3. 註釋
        1.4. 變數以及型別
        1.5. 標示符和關鍵字
        1.6. 輸出
        1.7. 輸入
        1.8. 運算子
        1.9. 資料型別轉換
        1.10. 判斷語句介紹
        1.11. if語句
        1.12. 比較、關係運算符
        1.13. 作業
        1.14. 附錄-推薦的python電子書

1.1認識python(瞭解)

1.1.1. Python發展歷史

    起源

    Python的作者,Guido von Rossum,荷蘭人。1982年,Guido從阿姆斯特丹大學獲得了數學和計算機碩士學位。然而,儘管他算得上是一位數學家,但他更加享受計算機帶來的樂趣。用他的話說,儘管擁有數學和計算機雙料資質,他總趨向於做計算機相關的工作,並熱衷於做任何和程式設計相關的活兒。

    在那個時候,Guido接觸並使用過諸如Pascal、C、Fortran等語言。這些語言的基本設計原則是讓機器能更快執行。在80年代,雖然IBM和蘋果已經掀起了個人電腦浪潮,但這些個人電腦的配置很低。比如早期的Macintosh,只有8
MHz的CPU主頻和128KB的RAM,一個大的陣列就能佔滿記憶體。所有的編譯器的核心是做優化,以便讓程式能夠執行。為了增進效率,語言也迫使程式設計師像計算機一樣思考,以便能寫出更符合機器口味的程式。在那個時代,程式設計師恨不得用手榨取計算機每一寸的能力。有人甚至認為C語言的指標是在浪費記憶體。至於動態型別,記憶體自動管理,面向物件…… 別想了,那會讓你的電腦陷入癱瘓。 這種程式設計方式讓Guido感到苦惱。Guido知道如何用C語言寫出一個功能,但整個編寫過程需要耗費大量的時間,即使他已經準確的知道了如何實現。他的另一個選擇是shell。Bourne Shell作為UNIX系統的直譯器已經長期存在。UNIX的管理員們常常用shell去寫一些簡單的指令碼,以進行一些系統維護的工作,比如定期備份、檔案系統管理等等。shell可以像膠水一樣,將UNIX下的許多功能連線在一起。許多C語言下上百行的程式,在shell下只用幾行就可以完成。然而,shell的本質是呼叫命令。它並不是一個真正的語言。比如說,shell沒有數值型的資料型別,加法運算都很複雜。總之,shell不能全面的調動計算機的功能。 Guido希望有一種語言,這種語言能夠像C語言那樣,能夠全面呼叫計算機的功能介面,又可以像shell那樣,可以輕鬆的程式設計。ABC語言讓Guido看到希望。ABC是由荷蘭的數學和計算機研究所開發的。Guido在該研究所工作,並參與到ABC語言的開發。ABC語言以教學為目的。與當時的大部分語言不同,ABC語言的目標是“讓使用者感覺更好”。ABC語言希望讓語言變得容易閱讀,容易使用,容易記憶,容易學習,並以此來激發人們學習程式設計的興趣。比如下面是一段來自Wikipedia的ABC程式,這個程式用於統計文字中出現的詞的總數: HOW TO RETURN words document: PUT {} IN collection FOR line IN document: FOR word IN split line: IF word not
.in collection: INSERT word IN collection RETURN collection HOW TO用於定義一個函式。一個Python程式設計師應該很容易理解這段程式。ABC語言使用冒號和縮排來表示程式塊。行 尾沒有分號。forif結構中也沒有括號() 。賦值採用的是PUT,而不是更常見的等號。這些改動讓ABC程式讀起來像一段文字。 儘管已經具備了良好的可讀性和易用性,ABC語言最終沒有流行起來。在當時,ABC語言編譯器需要比較高配置的電腦才能執行。而這些電腦的使用者通常精通計算機,他們更多考慮程式的效率,而非它的學習難度。除了硬體上的困難外,ABC語言的設計也存在一些致命的問題: 可拓展性差。ABC語言不是模組化語言。如果想在ABC語言中增加功能,比如對圖形化的支援,就必須改動很多地方。 不能直接進行IO。ABC語言不能直接操作檔案系統。儘管你可以通過諸如文字流的方式匯入資料,但ABC無法直接讀寫文 件。輸入輸出的困難對於計算機語言來說是致命的。你能想像一個打不開車門的跑車麼? 過度革新。ABC用自然語言的方式來表達程式的意義,比如上面程式中的HOW TO 。然而對於程式設計師來說,他們更習慣 用function或者define來定義一個函式。同樣,程式設計師更習慣用等號來分配變數。儘管ABC語言很特別,但學習難度 也很大。 傳播困難。ABC編譯器很大,必須被儲存在磁帶上。當時Guido在訪問的時候,就必須有一個大磁帶來給別人安裝ABC編 譯器。 這樣,ABC語言就很難快速傳播。 1989年,為了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python's Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。Guido作為一個語言設計愛好者,已經有過設計語言的嘗試。這一次,也不過是一次純粹的hacking行為。 一門語言的誕生 1991年,第一個Python編譯器誕生。它是用C語言實現的,並能夠呼叫C語言的庫檔案。從一出生,Python已經具有了 :類,函式,異常處理,包含表和詞典在內的核心資料型別,以及模組為基礎的拓展系統。 Python語法很多來自C,但又受到ABC語言的強烈影響。來自ABC語言的一些規定直到今天還富有爭議,比如強制縮排。 但這些語法規定讓Python容易讀。另一方面,Python聰明的選擇服從一些慣例,特別是C語言的慣例,比如迴歸等號賦值。Guido認為,如果“常識”上確立的東西,沒有必要過度糾結。 Python從一開始就特別在意可拓展性。Python可以在多個層次上拓展。從高層上,你可以直接引入. py檔案。在底層,你可以引用C語言的庫。Python程式設計師可以快速的使用Python寫. py檔案作為拓展模組。但當效能是考慮的重要因素時,Python程式設計師可以深入底層,寫C程式,編譯為.so檔案引入到Python中使用。Python就好像是使用鋼構建房一樣,先規定好大的框架。而程式設計師可以在此框架下相當自由的拓展或更 改。 最初的Python完全由Guido本人開發。Python得到Guido同事的歡迎。他們迅速的反饋使用意見,並參與到Python的改進。Guido和一些同事構成Python的核心團隊。他們將自己大部分的業餘時間用於hack Python。隨後,Python拓 展到研究所之外。Python將許多機器層面上的細節隱藏,交給編譯器處理,並凸顯出邏輯層面的程式設計思考。Python程 序員可以花更多的時間用於思考程式的邏輯,而不是具體的實現細節。這一特徵吸引了廣大的程式設計師。Python開始流行。 人生苦短,我用python 時勢造英雄 我們不得不暫停我們的Python時間,轉而看一看瞬息萬變的計算機行業。1990年代初,個人計算機開始進入普通家庭。Intel釋出了486處理器,windows釋出window 3.0開始的一系列視窗系統。計算機的效能大大提高。程式設計師開始關注計算機的易用性,比如圖形化介面。 Windows 3.0 由於計算機效能的提高,軟體的世界也開始隨之改變。硬體足以滿足許多個人電腦的需要。硬體廠商甚至渴望高需求軟 件的出現,以帶動硬體的更新換代。C++和Java相繼流行。C++和Java提供了面向物件的程式設計正規化,以及豐富的物件庫。在犧牲了一定的效能的代價下,C++和Java大大提高了程式的產量。語言的易用性被提到一個新的高度。我們還記得 ,ABC失敗的一個重要原因是硬體的效能限制。從這方面說,Python要比ABC幸運許多。 另一個悄然發生的改變是Internet。1990年代還是個人電腦的時代,windows和Intel挾PC以令天下,盛極一時。儘管Internet為主體的資訊革命尚未到來,但許多程式設計師以及資深計算機使用者已經在頻繁使用Internet進行交流,比如 使用email和newsgroup。Internet讓資訊交流成本大大下降。一種新的軟體開發模式開始流行:開源。程式設計師利用 業餘時間進行軟體開發,並開放原始碼。1991年,Linus在comp.os.minix新聞組上釋出了Linux核心原始碼,吸引大批hacker的加入。Linux和GNU相互合作,最終構成了一個充滿活力的開源平臺。 硬體效能不是瓶頸,Python又容易使用,所以許多人開始轉向Python。Guido維護了一個maillist,Python使用者就通過郵件進行交流。Python使用者來自許多領域,有不同的背景,對Python也有不同的需求。Python相當的開放,又容 易拓展,所以當用戶不滿足於現有功能,很容易對Python進行拓展或改造。隨後,這些使用者將改動發給Guido,並由Gu ido決定是否將新的特徵加入到Python或者標準庫中。如果程式碼能被納入Python自身或者標準庫,這將極大的榮譽。由於Guido至高無上的決定權,他因此被稱為“終身的仁慈獨裁者”。 Python被稱為“Battery Included”,是說它以及其標準庫的功能強大。這些是整個社群的貢獻。Python的開發者來自不同領域,他們將不同領域的優點帶給Python。比如Python標準庫中的正則表達是參考Perl,而lambda, map, filter, reduce等函式參考了Lisp。Python本身的一些功能以及大部分的標準庫來自於社群。Python的社 區不斷擴大,進而擁有了自己的newsgroup,網站,以及基金。從Python 2.0開始,Python也從maillist的開發方式,轉為完全開源的開發方式。社群氣氛已經形成,工作被整個社群分擔,Python也獲得了更加高速的發展。 到今天,Python的框架已經確立。Python語言以物件為核心組織程式碼,支援多種程式設計正規化,採用動態型別,自動進行記憶體回收。Python支援解釋執行,並能呼叫C庫進行拓展。Python有強大的標準庫。由於標準庫的體系已經穩定,所以Python的生態系統開始拓展到第三方包。這些包,如Django、web.py、wxpython、numpy、matplotlib、PIL,將Python升級成了物種豐富的熱帶雨林。 啟示錄 Python崇尚優美、清晰、簡單,是一個優秀並廣泛使用的語言。Python在TIOBE排行榜中排行第八,它是Google的第三大開發語言,Dropbox的基礎語言,豆瓣的伺服器語言。Python的發展史可以作為一個代表,帶給我許多啟示。 在Python的開發過程中,社群起到了重要的作用。Guido自認為自己不是全能型的程式設計師,所以他只負責制訂框架。如果問題太複雜,他會選擇繞過去,也就是cut the corner。這些問題最終由社群中的其他人解決。社群中的人才是異常豐富的,就連建立網站,籌集基金這樣與開發稍遠的事情,也有人樂意於處理。如今的專案開發越來越複雜,越來越龐大,合作以及開放的心態成為專案最終成功的關鍵。 Python從其他語言中學到了很多,無論是已經進入歷史的ABC,還是依然在使用的C和Perl,以及許多沒有列出的其他 語言。可以說,Python的成功代表了它所有借鑑的語言的成功。同樣,Ruby借鑑了Python,它的成功也代表了Python某些方面的成功。每個語言都是混合體,都有它優秀的地方,但也有各種各樣的缺陷。同時,一個語言“好與不好”的評 判,往往受制於平臺、硬體、時代等等外部原因。程式設計師經歷過許多語言之爭。其實,以開放的心態來接受各個語言,說不定哪一天,程式設計師也可以如Guido那樣,混合出自己的語言。

1.1.2.關鍵點常識

    Python的發音與拼寫
    Python的意思是蟒蛇,源於作者喜歡的一部電視劇 (C呢?)
    Python的作者是Guido van Rossum(龜叔)
    Python是龜叔在1989年聖誕節期間,為了打發無聊的聖誕節而用C編寫的一個程式語言
    Python正式誕生於1991年
    Python的直譯器如今有多個語言實現,我們常用的是CPython(官方版本的C語言實現),其他還有Jython(可以執行在Java平臺)、IronPython(可以執行在.NET和Mono平臺)、PyPy(Python實現的,支援JIT即時編譯)
    Python目前有兩個版本,Python2和Python3,最新版分別為2.7.123.5.2,現階段大部分公司用的是Python2
    Life is shot, you need Python. 人生苦短,我用Python。
    20171月份 程式語言流行排行榜 程式語言排行榜

1.1.3. Python優缺點

優點

    簡單————Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程式就感覺像是在讀英語一樣,儘管這個英語的要求非常嚴格!Python的這種虛擬碼本質是它最大的優點之一。它使你能夠專注於解決問題而不是去搞明白語言本身。

    易學————就如同你即將看到的一樣,Python極其容易上手。前面已經提到了,Python有極其簡單的語法。

    免費、開源————Python是FLOSS(自由/開放原始碼軟體)之一。簡單地說,你可以自由地釋出這個軟體的拷貝、閱讀它的原始碼、對它做改動、把它的一部分用於新的自由軟體中。FLOSS是基於一個團體分享知識的概念。這是為什麼Python如此優秀的原因之一——它是由一群希望看到一個更加優秀的Python的人創造並經常改進著的。

    高層語言————當你用Python語言編寫程式的時候,你無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節。

    可移植性————由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程式無需修改就可以在下述任何平臺上面執行。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC、Symbian以及Google基於linux開發的Android平臺!

    解釋性————這一點需要一些解釋。一個用編譯性語言比如C或C++寫的程式可以從原始檔(即C或C++語言)轉換到一個你的計算機使用的語言(二進位制程式碼,即01)。這個過程通過編譯器和不同的標記、選項完成。當你執行你的程式的時候,連線/轉載器軟體把你的程式從硬碟複製到記憶體中並且執行。而Python語言寫的程式不需要編譯成二進位制程式碼。你可以直接從原始碼執行程式。在計算機內部,Python直譯器把原始碼轉換成稱為位元組碼的中間形式,然後再把它翻譯成計算機使用的機器語言並執行。事實上,由於你不再需要擔心如何編譯程式,如何確保連線轉載正確的庫等等,所有這一切使得使用Python更加簡單。由於你只需要把你的Python程式拷貝到另外一臺計算機上,它就可以工作了,這也使得你的Python程式更加易於移植。

    面向物件————Python既支援面向過程的程式設計也支援面向物件的程式設計。在“面向過程”的語言中,程式是由過程或僅僅是可重用程式碼的函式構建起來的。在“面向物件”的語言中,程式是由資料和功能組合而成的物件構建起來的。與其他主要的語言如C++和Java相比,Python以一種非常強大又簡單的方式實現面向物件程式設計。

    可擴充套件性————如果你需要你的一段關鍵程式碼執行得更快或者希望某些演算法不公開,你可以把你的部分程式用C或C++編寫,然後在你的Python程式中使用它們。

    豐富的庫————Python標準庫確實很龐大。它可以幫助你處理各種工作,包括正則表示式、文件生成、單元測試、執行緒、資料庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV檔案、密碼系統、GUI(圖形使用者介面)、Tk和其他與系統有關的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的“功能齊全”理念。除了標準庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python影象庫等等。

    規範的程式碼————Python採用強制縮排的方式使得程式碼具有極佳的可讀性。

缺點

    執行速度,有速度要求的話,用C++改寫關鍵部分吧。
    國內市場較小(國內以python來做主要開發的,目前只有一些web2.0公司)。但時間推移,目前很多國內軟體公司,尤其是遊戲公司,也開始規模使用他。
    中文資料匱乏(好的python中文資料屈指可數)。託社群的福,有幾本優秀的教材已經被翻譯了,但入門級教材多,高階內容還是隻能看英語版。
    構架選擇太多(沒有像C#這樣的官方.net構架,也沒有像ruby由於歷史較短,構架開發的相對集中。Ruby on Rails 構架開發中小型web程式天下無敵)。不過這也從另一個側面說明,python比較優秀,吸引的人才多,專案也多。

1.1.4. Python應用場景

    Web應用開發

    Python經常被用於Web開發。比如,通過mod_wsgi模組,Apache可以執行用Python編寫的Web程式。Python定義了WSGI標準應用介面來協調Http伺服器與基於Python的Web程式之間的通訊。一些Web框架,如Django,TurboGears,web2py,Zope等,可以讓程式設計師輕鬆地開發和管理複雜的Web程式。

    作業系統管理、伺服器運維的自動化指令碼

    在很多作業系統裡,Python是標準的系統元件。 大多數Linux發行版以及NetBSD、OpenBSD和Mac OS X都集成了Python,可以在終端下直接執行Python。有一些Linux發行版的安裝器使用Python語言編寫,比如Ubuntu的Ubiquity安裝器,Red Hat Linux和Fedora的Anaconda安裝器。Gentoo Linux使用Python來編寫它的Portage包管理系統。Python標準庫包含了多個呼叫作業系統功能的庫。通過pywin32這個第三方軟體 包,Python能夠訪問Windows的COM服務及其它Windows API。使用IronPython,Python程式能夠直接呼叫.Net Framework。一般說來,Python編寫的系統管理指令碼在可讀性、效能、程式碼重用度、擴充套件性幾方面都優於普通的shell指令碼。

    科學計算

    NumPy,SciPy,Matplotlib可以讓Python程式設計師編寫科學計算程式。

    桌面軟體

    PyQt、PySide、wxPython、PyGTK是Python快速開發桌面應用程式的利器。

    伺服器軟體(網路軟體)

    Python對於各種網路協議的支援很完善,因此經常被用於編寫伺服器軟體、網路爬蟲。第三方庫Twisted支援非同步網路程式設計和多數標準的網路協議(包含客戶端和伺服器),並且提供了多種工具,被廣泛用於編寫高效能的伺服器軟體。

    遊戲

    很多遊戲使用C++編寫圖形顯示等高效能模組,而使用Python或者Lua編寫遊戲的邏輯、伺服器。相較於Python,Lua的功能更簡單、體積更小;而Python則支援更多的特性和資料型別。

    構思實現,產品早期原型和迭代

    YouTube、Google、Yahoo!、NASA都在內部大量地使用Python。

1.2 第一個python程式

<1>編寫python程式方法1

    1.開啟“超級終端”
    2.輸入python3 ,輸入python3表示用的python這門程式語言的第3個版本,如果只輸入python的話表示用的是python的第2個版本
    3.輸入以下程式碼

          print('hello world')

<2>編寫python程式方法2

    1.開啟編輯軟體sublime
    2.把以下程式碼,編寫如下程式碼: print('hello world')
    3.儲存程式碼:ctrl+s
    4.執行程式:python3 hello.py 

<3>另外一種執行python的程式的方法

    在程式碼第一行寫入執行時的python直譯器路徑(#!/usr/bin/env python)
    編輯完後需要對此python檔案新增'x'許可權(chmod 777 hello.py)
    執行python檔案(./hello.py)

<4>練一練

要求:編寫一個程式,輸出itcast.cn

<5>小總結

    對於編寫python程式,上面有3種方法,那到實際開發中哪一種用的比較多呢?一般是用第2或者第3種,即儲存在xxx.py檔案中,這樣可以直接下一次執行執行;而如果用第一種方法的話,每一次執行程式都需要重新進行輸入,費時費力

1.3 註釋

1. 3.1註釋的作用

    通過用自己熟悉的語言,在程式中對某些程式碼進行標註說明,這就是註釋的作用,能夠大大增強程式的可讀性

1.3.2註釋的分類

<1> 單行註釋

#開頭,#右邊的所有東西當做說明,而不是真正要執行的程式,起輔助說明作用

print('hello world')   # 我是註釋,可以在裡寫一些功能說明之類的哦

<2> 多行註釋

    ''' 我是多行註釋,可以寫很多很多行的功能說明
        這就是我牛X指出
        哈哈哈。。。
    '''

    ''' 
        下面的程式碼完成 ,列印一首詩
        名字叫做:春江花月夜
        作者,忘了
    '''

    print('╔═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╗')
    print('║ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │  ║')
    print('║ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ║')
    print('║ │春│灩│江│空│江│江│人│不│白│誰│可│玉│此│鴻│昨│江│斜│不│ ║')
    print('║ │江│灩│流│裡│天│畔│生│知│雲│家│憐│戶│時│雁│夜│水│月│知│ ║')
    print('║ │潮│隨│宛│流│一│何│代│江│一│今│樓│簾│相│長│閒│流│沉│乘│ ║')
    print('║ │水│波│轉│霜│色│人│代│月│片│夜│上│中│望│飛│潭│春│沉│月│ ║')
    print('║ │連│千│繞│不│無│初│無│待│去│扁│月│卷│不│光│夢│去│藏│幾│ ║')
    print('║春│海│萬│芳│覺│纖│見│窮│何│悠│舟│徘│不│相│不│落│欲│海│人│ ║')
    print('║江│平│裡│甸│飛│塵│月│已│人│悠│子│徊│去│聞│度│花│盡│霧│歸│ ║')
    print('║花│,│,│,│,│,│,│,│,│,│,│,│,│,│,│,│,│,│,│ ║')
    print('║月│海│何│月│汀│皎│江│江│但│青│何│應│搗│願│魚│可│江│碣│落│ ║')
    print('║夜│上│處│照│上│皎│月│月│見│楓│處│照│衣│逐│龍│憐│潭│石│月│ ║')
    print('║ │明│春│花│白│空│何│年│長│浦│相│離│砧│月│潛│春│落│瀟│搖│ ║')
    print('║ │月│江│林│沙│中│年│年│江│上│思│人│上│華│躍│半│月│湘│情│ ║')
    print('║ │共│無│皆│看│孤│初│望│送│不│明│妝│拂│流│水│不│復│無│滿│ ║')
    print('║ │潮│月│似│不│月│照│相│流│勝│月│鏡│還│照│成│還│西│限│江│ ║')
    print('║ │生│明│霰│見│輪│人│似│水│愁│樓│臺│來│君│文│家│斜│路│樹│ ║')
    print('║ │。│。│。│。│。│?│。│。│。│?│。│。│。│。│。│。│。│。│ ║')
    print('║ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ║')
    print('║ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ║')
    print('╚═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╝')

1.3.3 python程式中,中文註釋

如果直接在程式中用到了中文,,此時直接執行程式,程式會出錯,
解決的辦法為:在程式的開頭寫入如下程式碼,這就是中文註釋

    #coding=utf-8

修改之後的程式:

    #coding=utf-8
    print('你好')

執行結果:

    你好

注意:在python的語法規範中推薦使用的方式:

# -*- coding:utf-8 -*-

1.4 變數及變數型別

<1>變數的定義

在程式中,有時我們需要對2個數據進行求和,那麼該怎樣做呢?
大家類比一下現實生活中,比如去超市買東西,往往咱們需要一個菜籃子,用來進行儲存物品,等到所有的物品都購買完成後,在收銀臺進行結賬即可
如果在程式中,需要把2個數據,或者多個數據進行求和的話,那麼就需要把這些資料先儲存起來,然後把它們累加起來即可

在Python中,儲存一個數據,需要一個叫做變數的東西,如下示例:

    num1 = 100           # num1就是一個變數,就好一個小菜籃子
    num2 = 87            # num2也是一個變數
    result = num1 + num2 # 把num1和num2這兩個"菜籃子"中的資料進行累加,然後放到 result變數中

    說明:
        所謂變數,可以理解為菜籃子,如果需要儲存多個數據,最簡單的方式是有多個變數,當然了也可以使用一個
        程式就是用來處理資料的,而變數就是用來儲存資料的

想一想:我們應該讓變數佔用多大的空間,儲存什麼樣的資料?

<2>變數的型別

    為了更充分的利用記憶體空間以及更有效率的管理記憶體,變數是有不同的型別的,如下所示:

—–此處缺少圖片—–

<3>檢視變數型別

        在python中,只要定義了一個變數,而且它有資料,那麼它的型別就已經確定了,不需要咱們開發者主動的去說明它的型別,系統會自動辨別
        可以使用type(變數的名字),來檢視變數的型別

15 標示符和關鍵字

<1>標示符

        開發人員在程式中自定義的一些符號和名稱

        標示符是自己定義的,如變數名 、函式名等

<2>標示符的規則

    標示符由字母、下劃線和數字組成,且數字不能開頭

        思考:下面的標示符哪些是正確的,哪些不正確為什麼
           fromNo12
           from#12
           my_Boolean
           my-Boolean
           Obj2
           2ndObj
           myInt
           test1
           Mike2jack
           My_tExt
           _test
           test!32
           haha(da)tt
           int
           jack_rose
           jack&rose
           GUI
           G.U.I

    python中的識別符號是區分大小寫的
        Andy != andy

<3>命名規則

見名知意
起一個有意義的名字,儘量做到看一眼就知道是什麼意思(提高程式碼可 讀性) 比如: 名字 就定義為 name , 定義學生 用 student
駝峰命名法
小駝峰式命名法(lower camel case): 第一個單詞以小寫字母開始;第二個單詞的首字母大寫,例如:myName、aDog
大駝峰式命名法(upper camel case): 每一個單字的首字母都採用大寫字母,例如:FirstName、LastName
其他命名法
不過在程式設計師中還有一種命名法比較流行,就是用下劃線“_”來連線所有的單詞,比如send_buf

<4>關鍵字

什麼是關鍵字
        python一些具有特殊功能的標示符,這就是所謂的關鍵字

        關鍵字,是python已經使用的了,所以不允許開發者自己定義和關鍵字相同的名字的標示符

檢視關鍵字:
          and     as      assert     break     class      continue    def     del
          elif    else    except     exec      finally    for         from    global
          if      in      import     is        lambda     not         or      pass
          print   raise   return     try       while      with        yield

可以通過以下命令進行檢視當前系統中python的關鍵字:
    In [1]: import keyword
    In [2]: keyword.kwlist
    Out[2]: 
    ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del',......]

關鍵字的學習以及使用,咱們會在後面的課程中依依進行學習

1.6 輸出

<1> python中變數的輸出

    # 列印提示
    print('hello world')
    print('給我的卡---印度語,你好的意思')

<2> 格式化輸出

1.格式化操作的目的

    比如有以下程式碼:
        pirnt("我今年10歲")
        pirnt("我今年11歲")
        pirnt("我今年12歲")
        ...

    想一想: 在輸出年齡的時候,用了多次"我今年xx歲",能否簡化一下程式呢???

    答: 字串格式化

<2>什麼是格式化

    看如下程式碼:
        age = 10
        print("我今年%d歲"%age)

        age += 1
        print("我今年%d歲"%age)

        age += 1
        print("我今年%d歲"%age)

        ...

    在程式中,看到了%這樣的操作符,這就是Python中格式化輸出。

        age = 18
        name = "xiaohua"
        print("我的姓名是%s,年齡是%d"%(name,age))

<3>常用的格式符號

    下面是完整的,它可以與%符號使用列表:
        格式符號    轉換
        %c  # 字元
        %s  # 通過str() 字串轉換來格式化
        %i  # 有符號十進位制整數
        %d  # 有符號十進位制整數
        %u  # 無符號十進位制整數
        %o  # 八進位制整數
        %x  # 十六進位制整數(小寫字母)
        %X  # 十六進位制整數(大寫字母)
        %e  # 索引符號(小寫'e')
        %E  # 索引符號(大寫“E”)
        %f  # 浮點實數
        %g  # %f和%e 的簡寫
        %G  # %f和%E的簡寫

<3> 換行輸出

在輸出的時候,如果有\n那麼,此時\n後的內容會在另外一行顯示

    print("1234567890-------") # 會在一行顯示
    print("1234567890\n-------") # 一行顯示1234567890,另外一行顯示-------

<4> 練一練

    編寫程式碼完成以下名片的顯示

    ==================================
    姓名: dongGe    
    QQ:xxxxxxx
    手機號:131xxxxxx
    公司地址:北京市xxxx
    ==================================

1.7 輸入

<1> python2版本中輸入

1 raw_input()

在Python中,獲取鍵盤輸入的資料的方法是採用 raw_input 函式(至於什麼是函式,咱們以後的章節中講解),那麼這個 raw_input 怎麼用呢?

看如下示例:

    password = raw_input("請輸入密碼:")
    print '您剛剛輸入的密碼是:', password

執行結果:

注意:
    raw_input()的小括號中放入的是,提示資訊,用來在獲取資料之前給使用者的一個簡單提示
    raw_input()在從鍵盤獲取了資料以後,會存放到等號右邊的變數中
    raw_input()會把使用者輸入的任何值都作為字串來對待

2 input()

input()函式與raw_input()類似,但其接受的輸入必須是表示式。

>>> a = input() 
123
>>> a
123
>>> type(a)
<type 'int'>
>>> a = input()
abc
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'abc' is not defined
>>> a = input()
"abc"
>>> a
'abc'
>>> type(a)
<type 'str'>
>>> a = input()
1+3
>>> a
4
>>> a = input()
"abc"+"def"
>>> a
'abcdef'
>>> value = 100
>>> a = input()
value
>>> a
100

input()接受表示式輸入,並把表示式的結果賦值給等號左邊的變數

<2>python3版本中

沒有raw_input()函式,只有input()       # 注意只有input()

並且 python3中的input與python2中的raw_input()功能一樣

運算子

python支援以下三種運算子

1.算術運算子

下面以a=10 ,b=20為例進行計算

運算子 描述 例項
+ 兩個物件相加 a + b 輸出結果 30
- 得到負數或是一個數減去另一個數 a - b 輸出結果 -10
* 兩個數相乘或是返回一個被重複若干次的字串 a * b 輸出結果 200
/ x除以y b / a 輸出結果 2
// 取整除 返回商的整數部分 9//2 輸出結果 4 , 9.0//2.0 輸出結果 4.0
% 取餘 返回除法的餘數 b % a 輸出結果 0
** 返回x的y次冪 a**b 為10的20次方, 輸出結果 100000000000000000000

例子

>> 9/2.0
4.5
>> 9//2.0
4.0

2.賦值運算子

運算子 描述 例項
= 賦值運算子 把=號右邊的結果給左邊的變數 num=1+2*3 結果num的值為7

例子

>> a, b = 1, 2
>> a
1
>> b
2

3.複合賦值運算子

運算子 描述 例項
+= 加法賦值運算子 c += a 等效於 c = c + a
-= 減法賦值運算子 c -= a 等效於 c = c - a
*= 乘法賦值運算子 c = a 等效於 c = c a
/= 除法賦值運算子 c /= a 等效於 c = c / a
%= 取模賦值運算子 c %= a 等效於 c = c % a
**= 冪賦值運算子 c = a 等效於 c = c a
//= 取整除賦值運算子 c //= a 等效於 c = c // a

1.9 資料型別轉換

常用的資料型別轉換

函式 說明
int(x [,base ]) 將x轉換為一個整數
long(x [,base ]) 將x轉換為一個長整數
float(x ) 將x轉換到一個浮點數
complex(real [,imag ]) 建立一個複數
str(x ) 將物件 x 轉換為字串
repr(x ) 將物件 x 轉換為表示式字串
eval(str ) 用來計算在字串中的有效Python表示式,並返回一個物件
tuple(s ) 將序列 s 轉換為一個元組
list(s ) 將序列 s 轉換為一個列表
chr(x ) 將一個整數轉換為一個字元
unichr(x ) 將一個整數轉換為Unicode字元
ord(x ) 將一個字元轉換為它的整數值
hex(x ) 將一個整數轉換為一個十六進位制字串
oct(x ) 將一個整數轉換為一個八進位制字串

舉例

    a = '100'     # 此時a的型別是一個字串,裡面存放了100這3個字元
    b = int(a)    # 此時b的型別是整型,裡面存放的是數字100
    print("a=%d"%b)

1.10 判斷語句介紹

開發中的判斷場景

重要日期判斷

    if 今天是週六或者週日:
        約妹子

    if 今天是情人節:
        買玫瑰

    if 今天發工資:
        先還信用卡的錢

        if 有剩餘:
            又可以happy了,O(∩_∩)O哈哈~

        else:
            噢,no。。。還的等30天

小總結:
    如果某些條件滿足,才能做某件事情,而不滿足時不允許做,這就是所謂的判斷
    不僅生活中有,在軟體開發中“判斷”功能也經常會用到

1.11 if 判斷語句

<1>if判斷語句介紹

if語句是用來進行判斷的,其使用格式如下:

    if 要判斷的條件:
        條件成立時,要做的事情

demo1:

    age = 30
    print "------if判斷開始------"
    if age>=18:
        print "我已經成年了"   
    print "------if判斷結束------"

    執行結果:

    ------if判斷開始------
    我已經成年了
    ------if判斷結束------

demo2:

    age = 16
    print "------if判斷開始------"
    if age>=18:
        print "我已經成年了"
    print "------if判斷結束------"

    執行結果:

    ------if判斷開始------
    ------if判斷結束------

小總結:

    以上2個demo僅僅是age變數的值不一樣,結果卻不同;能夠看得出if判斷語句的作用:就是當滿足一定條件時才會執行那塊程式碼,否則就不執行那塊程式碼

注意:

    程式碼的縮排為一個tab鍵,或者4個空格

<2>練一練

要求:從鍵盤獲取自己的年齡,判斷是否大於或者等於18歲,如果滿足就輸出“哥,已成年,網咖可以去了”

        使用input從鍵盤中獲取資料,並且存入到一個變數中
        使用if語句,來判斷 age>=18是否成立

<3>想一想

    判斷age大於或者等於18歲,使用的是 >=,還有哪些呢?

1.12 比較(關係) & 邏輯運算子

比較(即關係)運算子

python中的比較運算子如下表

運算子 描述 示例
== 檢查兩個運算元的值是否相等,如果是則條件變為真。 如a=3,b=3則(a == b) 為 true.
!= 檢查兩個運算元的值是否相等,如果值不相等,則條件變為真。 如a=1,b=3則(a != b) 為 true.
<> 檢查兩個運算元的值是否相等,如果值不相等,則條件變為真。 如a=1,b=3則(a <> b) 為 true。這個類似於 != 運算子
> 檢查左運算元的值是否大於右運算元的值,如果是,則條件成立。 如a=7,b=3則(a > b) 為 true.
< 檢查左運算元的值是否小於右運算元的值,如果是,則條件成立。 如a=7,b=3則(a < b) 為 false.
>= 檢查左運算元的值是否大於或等於右運算元的值,如果是,則條件成立。 如a=3,b=3則(a >= b) 為 true.
<= 檢查左運算元的值是否小於或等於右運算元的值,如果是,則條件成立。 如a=3,b=3則(a <= b) 為 true.

邏輯運算子

python中的邏輯運算子如下表:

運算子 邏輯表示式 描述 例項
and x and y 布林”與” - 如果 x 為 False,x and y 返回 False,否則它返回 y 的計算值。 (a and b) 返回 20。
or x or y 布林”或” - 如果 x 是 True,它返回 True,否則它返回 y 的計算值。 (a or b) 返回 10。
not not x 布林”非” - 如果 x 為 True,返回 False 。如果 x 為 False,它返回 True。 not(a and b) 返回 False

1.13 作業

必做題:

1. 說出變數名字,可以由哪些字元組成
2. 寫出變數命名時的規則
3. 說出什麼是駝峰法(大駝峰、小駝峰)
4. 編寫程式,完成以下要求:

    提示使用者進行輸入資料
    獲取使用者的資料資料(需要獲取2個)
    對獲取的兩個數字進行求和執行,並輸出相應的結果

5. 編寫程式,完成以下要求:

    提示使用者進行輸入資料
    獲取使用者的資料資料(需要獲取2個)
    對獲取的兩個數字進行減法執行,並輸出相應的結果

6. 編寫程式,完成以下資訊的顯示:

    ==================================
    =        歡迎進入到身份認證系統V1.0
    = 1. 登入
    = 2. 退出
    = 3. 認證
    = 4. 修改密碼
    ==================================

7. 編寫程式,從鍵盤獲取一個人的資訊,然後按照下面格式顯示

    ==================================
    姓名: dongGe    
    QQ:xxxxxxx
    手機號:131xxxxxx
    公司地址:北京市xxxx
    ==================================

8. 編寫程式,從鍵盤獲取使用者名稱和密碼,然後判斷,如果正確就輸出以下資訊

    親愛的xxx,歡迎登陸 愛學習管理系統