Python簡介
python是吉多·范羅蘇姆發明的一種面向對象的腳本語言,可能有些人不知道面向對象和腳本具體是什么意思,但是對於一個初學者來說,現在並不需要明白。大家都知道,當下全棧工程師的概念很火,而Python是一種全棧的開發語言,所以你如果能學好Python,那么前端,后端,測試,大數據分析,爬蟲等這些工作你都能勝任。
為什么選擇Python
關於語言的選擇,有各種各樣的討論,在這里我不多說,就引用Python里面的一個彩蛋來說明為什么要選擇Python,在Python解釋器里輸入import this 就可以看到。
>>> 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!
上面的話簡單的總結來說就是“優雅”、“明確”、“簡單”,或許你還是有些不明白,舉個簡單的例子,若果同樣的功能你用C/C++寫可能要寫100行代碼,而如果用Python寫你可能只要20行代碼就搞定,同樣的如果一個問題有好幾種解決方案,但是Python會用一種最簡單的方法來實現。所以Python是用最簡單最優雅最明確的方法來解決問題。
Python入門
一、Python 2.x vs 3.x區別
1.print在python2.x是語句,在python3.x是print()函數
Old: print "The answer is", 2*2 New: print("The answer is", 2*2) Old: print x, # Trailing comma suppresses newline New: print(x, end=" ") # Appends a space instead of a newline Old: print # Prints a newline New: print() # You must call the function! Old: print >>sys.stderr, "fatal error" New: print("fatal error", file=sys.stderr) Old: print (x, y) # prints repr((x, y)) New: print((x, y)) # Not the same as print(x, y)!
2.python3.x全部字符集都是unicode,而在python2.x中是ascii編碼,需要設置#-*- coding:utf-8 -*-,中文才不會亂碼
3.python2.x一些庫名在python3.x的更改
python2.x | _winreg | ConfigParser | copy_reg | Queue | SocketServer | markupbase | repr | test.test_support |
python3.x | winreg | configparser | copyreg | queue | socketserver | _markupbase | reprlib | test.support |
4.python3.x有一些第三方模塊支持不了,當然還有其他的模塊,后續慢慢添加....
Twisted urllib2 scrapy MySQLdb
5.python2.x與python3.x庫方法的不同,在后續慢慢體現....
二、安裝Python
在這里我我推薦安裝Python3,因為隨着時間的推移Python3,必定是未來的趨勢,我們要順應潮流。在Python的官網可以下載相應的版本,網址是https://www.python.org/downloads/,安裝上面的提示安裝好即可,就不在多說了,此外后面的操作都是基於Ubuntu 15.10下Python3.5.1操作,默認是Python2.7.10版本
建議使用pyenv(Python版本控制2.7和3.5之間隨意切換)、virtualenv(Python虛擬環境)、pycharm(Python的IDE工具)、pip(Python包管理工具)。
windows
1、下載安裝包 https://www.python.org/downloads/ 2、安裝python2.7.11 默認安裝路徑:C:\python27 3、配置環境變量 【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名為Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】 如:原來的值;C:\python27,切記前面有分號 4、安裝python3.5.1 默認安裝路徑: C:\python35 5、將python3.5中的執行程序python.exe重命名成python3 6、配置環境變量 【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名為Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】 如:原來的值;C:\python35,切記前面有分號 7、這樣就實現python2.7和python3.5多版本
三、編寫Hello,World
兩種方式輸出Hello World,第一種我們用解釋器交互式環境,打開shell輸入python。
tomcat@node:~$ python Python 3.5.1 (default, Jul 27 2016, 18:07:46) [GCC 5.2.1 20151010] on linux Type "help", "copyright", "credits" or "license" for more information. >>> print("Hello World!") Hello World!
第二種將代碼保存在 .py文件中,命令行下執行 python1.py 就可以打印出來Hello World。
tomcat@node:~$ vim python1.py #!/usr/bin/env python # coding:utf-8 print("Hello World!") tomcat@node:~$ chmod +x python1.py tomcat@node:~$ python python1.py Hello World!
在Linux下執行的時候,第一行指出文件由python解釋器來執行,第二行是告訴解釋器在加載文件時,采用何種編碼,不加上這句的話,在python2中顯示中文會出現亂碼,在python3中則不會,所以你如果用的是windows而且用的是python3,其實可以不用加這兩句,不過實際中還是建議加上這兩句。到這里我們就用了兩種方式輸Hello World。
四、變量&字符編碼
變量
常量我們約定俗成都為大寫
1、變量聲明:
- Python將所有數據存為內存對象
- Python中,變量事實上是指向內存對象的引用
- 動態類型:在任何時刻,只要需要,某個對象引用都可以重新引用一個不同的對象(可以是不同的數據類型)內建函數type()用於返回給定數據項的數據類型
- "="用於將變量名與內存中的某個對象綁定:如果對象實現存在,就直接進行綁定;否則,則由"="創建引用的對象,變量名也是對象存在內存,比如:name='jerry',name這個指針指向jerry,name='tom'的時候,name是指針指向tom,但是jerry仍在內存中存放着,只是沒有被變量名指向,到一定時候會被垃圾收集器回收,和java有點像。其中當test='jerry'時,test和name這兩個變量名指向內存的地址是一樣的。id(test),id(name),變量名是內存引用的標識或符號。
2、變量定義的規則:
- 變量名只能是 字母、數字或下划線的任意組合
- 變量名的第一個字符不能是數字
- 以下關鍵字不能聲明為變量名
['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']
# 通過Import keyword查看
import keyword
print(keyword.kwlist)
3、變量最佳命名方式:
- 使用下划線'_'作為連接,如 name_variables
- 使用大小寫,稱為駝峰法,如 NameVariables,nameVariables
注意:兩種命名方式不要混用,只要你喜歡的一種即可
4、變量命名慣例:
- 以單一下划線開頭的變量名(_x)不會被from module import * 語句導入
- 以兩個下划線開頭但結尾沒有下划線的變量名(__x)是類的本地變量
- 前后有雙下划線的變量名(__x__)是系統定義的變量名,對python解釋器有特殊意義
- 交互式模式下,變量名"_"用於保存最后表達式的結果
字符編碼
1、ASCII
ASCII(American Standard Code for Information Interchange,美國標准信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多只能用 8 位來表示(一個字節),即:2**8 = 256-1,所以,ASCII碼最多只能表示 255 個符號,python2.x解釋器默認是ASCII編碼。
顯然ASCII碼無法將世界上的各種文字和符號全部表示,所以,就需要新出一種可以代表所有字符和符號的編碼,即:Unicode
二進制和數字轉換:128 64 32 16 8 4 2 1 比如:2表示二進制 0000 0010
字符和數字轉換 : 查看ASCII碼表 比如: A字母 表示數字是65,二進制是0100 0001
2、Unicode
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一並且唯一的二進制編碼,規定所有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,注:此處說的的是最少2個字節,可能更多,比如漢字就需要3個字節,python3.x解釋器默認是Unicode編碼。
3、UTF-8
是對Unicode編碼的壓縮和優化,他不再使用最少使用2個字節,而是將所有的字符和符號進行動態分類:ASCII碼中的內容用1個字節保存、歐洲的字符用2個字節保存,漢字用3個字節保存...
所以,python2.x解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ASCII),如果是如下代碼的話:
報錯:ascii碼無法表示中文
tomcat@node:~$ vim a.py #!/usr/bin/env python print "你好!世界"
tomcat@node:~$ python a.py File "a.py", line 2 SyntaxError: Non-ASCII character '\xe4' in file a.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
改正:應該顯示的告訴python解釋器,用什么編碼來執行源代碼,即:
tomcat@node:~$ vi a.py #!/usr/bin/env python # coding:utf-8 print "你好!世界" tomcat@node:~$ python a.py 你好!世界
注意:python3.x中字符集默認為UTF-8,python2.x還是ASCII所以需要設置#coding:utf-8
五、輸入、輸出、注釋
Python輸入:
1、Python3.x提供了一個input(),可以讓用戶輸入字符串。比如輸入用戶的名字:
python3中格式化輸出默認接收的都視為字符串,如果你獲取的是要數字類型則需要另外強制轉換為int()轉換為數字類型才能獲得數字
>>> name = input("please input your name:") please input your name:tomcatxiao >>> print("Hello " + name) Hello tomcatxiao >>> age = input("please enter your age:") please enter your age:21 >>> type(age) <class 'str'> >>> age1 = input("please enter your age:") >>> age1 = int(age1) >>> type(age1) <class 'int'>
輸入密碼時,如果想要不可見,需要利用 getpass 模塊中的 getpass 方法,即:
tomcat@node:~$ vi b.py #!/usr/bin/env python # -*- coding: utf-8 -*- import getpass # 將用戶輸入的內容賦值給 pwd變量 pwd = getpass.getpass("請輸入密碼:") # 打印輸入的內容 print(pwd) tomcat@node:~$ python b.py 請輸入密碼: 123
注意:在pycharm IDE工具中這段代碼是行不通的,在Linux命令行或者Windows cmd中是可以的
2、Python2.x提供了一個raw_input()和input(),input()在python2中基本不用忘了吧,當然我這里會演示他們的區別
raw_input()在字符串和數值型都沒有問題
>>> name = raw_input("please enter your name:") please enter your name:tomcatxiao >>> print name tomcatxiao >>> age = raw_input("your age is:") your age is:21 >>> print age 21
input()在輸入字符串的時候報錯,變量未定義,數值型則沒有報錯,如果是字符串則需要引號'' or "",或者事先定義變量賦值
>>> name = input("please input your name:") please input your name:tomcatxiao Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1, in <module> NameError: name 'tomcatxiao' is not defined >>> age = input("your age is:") your age is:21
對於上面的代碼進行修改下,將字符串事先賦值給一個變量,然后從input中輸入則沒有報錯
>>> myname = "tomcatxiao" >>> name = input("please input your name:") please input your name:myname >>> print name tomcatxiao
Python輸出:
Python中輸出是用print,Python2.x中print是語句,Python3.x中則是print()函數
1.Python2.x
print "String %format1 %format2 ..." %(variable1,variable2)
2.Python3.x
print("String %format1 %format2 ...." %(variable1,variable2))
3.拼接效率比較低
print "String" + variable1 print("String" + variable1)
input()和格式化輸出時要特別要注意input()輸入是個數字需要int()轉換,格式化輸出的時候使用%d才不會報錯
tomcat@node:~$ vi c.py #!/usr/bin/env python # -*- coding:utf-8 -*- name = input("input your name:") age = input("input your age:") job = input("input your job:") msg = ''' Information of %s ------------- Name: %s Age : %s Job : %s ''' %(name,name,age,job) print(msg) tomcat@node:~$ python c.py
注意:python3中格式化輸出默認接收的都視為字符串,如果是數字則需要另外強制轉換為int()轉換為數字類型
#!/usr/bin/env python # -*- coding:utf-8 -*- name = input("input your name:") age = input("input your age:") job = input("input your job:") msg = ''' Information of %s ------------- Name: %s Age : %d Job : %s ''' %(name,name,age,job) print(msg)
這里的Age用%d進行格式化如果沒有強制轉換為數字則會報錯,執行上面的代碼則會報錯,int()轉換了則不會報錯
input your name:tomcatxiao input your age:21 input your job:IT Traceback (most recent call last): File "/home/tomcat/PycharmProjects/s13/day01/dsfg.py", line 15, in <module> ''' %(name,name,age,job) TypeError: %d format: a number is required, not str
注釋
#號可以從一行的任何地方開始
'''''',"""""",三引號用於多行注釋
\,表示續行符
注意:如果''''''三引號是在一個def 函數或者class 定義類的下方則是對這個函數或者類的說明,可以通過__doc__動態獲得文檔子串
六、模塊初識
Python的強大之處在於他有非常豐富和強大的標准庫和第三方庫,幾乎你想實現的任何功能都有相應的Python庫支持,以后的課程中會深入講解常用到的各種庫,現在,我們先來象征性的學2個簡單的。
sys
tomcat@node:~$ vi d.py #!/usr/bin/env python # -*- coding: utf-8 -*- import sys print(sys.argv) #輸出 tomcat@node:~$ python d.py helo world ['test.py', 'helo', 'world'] #把執行腳本時傳遞的參數獲取到了
os
>>> import os >>> os.system("df -h") #調用系統命令
注意:os.system()執行系統命令,如果有變量存儲該執行的結果,該變量只會存儲該命令執行成功或者失敗返回值,不會存儲命令執行的結果,os.system("df -h")會有返回值
>>> result = os.system("df -h") df: ‘/mnt/hgfs’: Protocol error Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 797M 9.4M 788M 2% /run /dev/sda1 189G 10G 170G 6% / tmpfs 3.9G 16M 3.9G 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup cgmfs 100K 0 100K 0% /run/cgmanager/fs tmpfs 797M 76K 797M 1% /run/user/1000 >>> print(result) 256
如果需要保存命令執行的結果需喲使用os.popen("系統命令").read(),然后使用變量賦值輸出即可
>>> result = os.popen("df -h").read() >>> print(result) Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 797M 9.4M 788M 2% /run /dev/sda1 189G 10G 170G 6% / tmpfs 3.9G 16M 3.9G 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup cgmfs 100K 0 100K 0% /run/cgmanager/fs tmpfs 797M 76K 797M 1% /run/user/1000
sys與os結合使用
tomcat@node:~$ vi e.py #!/usr/bin/env python import os,sys os.system(''.join(sys.argv[1:])) # 執行 tomcat@node:~$ python e.py df df: ‘/mnt/hgfs’: Protocol error Filesystem 1K-blocks Used Available Use% Mounted on udev 4059116 0 4059116 0% /dev tmpfs 815812 9596 806216 2% /run /dev/sda1 198036724 10435852 177518160 6% / tmpfs 4079040 15996 4063044 1% /dev/shm tmpfs 5120 4 5116 1% /run/lock tmpfs 4079040 0 4079040 0% /sys/fs/cgroup cgmfs 100 0 100 0% /run/cgmanager/fs tmpfs 815812 76 815736 1% /run/user/1000
自己寫個補全模塊tab.py適合python2.x,python3.5都有自帶補全功能
#!/usr/bin/env python # python startup file import sys import readline import rlcompleter import atexit import os # tab completion readline.parse_and_bind('tab: complete') # history file histfile = os.path.join(os.environ['HOME'], '.pythonhistory') try: readline.read_history_file(histfile) except IOError: pass atexit.register(readline.write_history_file, histfile) del os, histfile, readline, rlcompleter
寫完后保存,導入就可以使用
tomcat@node:~$ python Python 2.7.11 (default, Jul 27 2016, 18:09:58) [GCC 5.2.1 20151010] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import tab >>> import os >>> os. Display all 238 possibilities? (y or n) os.EX_CANTCREAT os.fchdir( os.EX_CONFIG os.fchmod( os.EX_DATAERR os.fchown( os.EX_IOERR os.fdatasync( os.EX_NOHOST os.fdopen(
你會發現,上面自己寫的tab.py模塊只能在當前目錄下導入,如果想在系統的何何一個地方都使用怎么辦呢? 此時你就要把這個tab.py放到python全局環境變量目錄里啦,用sys.path可以查看,ubuntu是在/usr/lib/python2.7/dist-packages/,centos是在/usr/lib/python2.7/site-packages/
>>> import sys >>> sys.path ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/python2.7/dist-packages/ubuntu-kylin-sso-client', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
七、If語句與流程控制
python的比較操作:
所有的Python對象都支持比較操作:
- 可用於測試值相等、相對大小等
- 如果是復合對象,python會檢查其所有部分,包括自動遍歷各級嵌套對象,知道可以得出最終結果
測試操作符:
- "==" 操作符測試值的相等性
- "is" 表達式測試對象的一致性
- "in" 成員關系測試
如何實現比較操作:
python中不同類型的比較方法:
- (1)數字:通過相對大小進行比較
- (2)字符串:按照字典次序逐次進行比較
- (3)列表和元組:自左至右比較各部分內容
- (4)字典:對排序之后的(鍵、值)列表進行比較
python中真和假的含義:
- (1)非0數字為真,否則為假
- (2)非空對象為真,否則為假
- (3)None則始終為假
比較和相等測試會遞歸地應用於數據結構中
返回值為True或False
組合條件測試:
- X and Y: 與運算
- X or Y: 或運算
- not X : 非運算
if測試的語法結構:
if boolean_expression1: suite1 elif boolean_expression2: suite2 else: else_suite
注意:
elif語句是可選的
僅用與占位,而后在填充相關語句時,可以使用pass
if/else三元表達式:
通常在為某變量設定默認值時通常用到如下表達式
A = X if Y else Z
或:
if Y: A = X else A = Z
其通用條件表達式語法格式為:
expression1 if boolean_express else expression2
如果boolean_express的值為True,則條件表達式的結果為express1,否則為express2
八、循環for,while
循環機制及應用場景
while循環:
- (1)用於編寫通用迭代結構
- (2)頂端測試為真即會執行循環體,並會重復多次測試知道為假后執行循環后的其他語句
for循環:
- (1)一個通用的序列迭代器,用於遍歷任何有序的序列對象內的元素
- (2)可用於字符串、元組、列表和其他的內置可迭代對象,以及通過類所創建的新對象
python也提供了一些能夠進行隱性迭代的工具:
- (1)in成員關系測試
- (2)列表解析
- (3)map、reduce和filter函數
break: 跳出最內層的循環
continue: 跳出所處的最近層循環的開始處
pass: 占位語句
while循環:
while True: 死循環
語法格式:
while boolean_express: while_suite else: else_suite
注意:
- else分支為可選部分
- 只要boolean_express的結果為True,循環就會執行
- boolean_express的結果為False時終止循環,此時如果有else分支,則會執行
示例1: >>> url = 'www.mageedu.com' >>> while url: print(url) url = url[1:] 示例2: >>> x = 0;y = 100 >>> while x < y: print(x) x += 1 示例3: >>> url = 'www.mageedu.com' >>> while url: print(url) url = url[:-1] else: print('game over')
while大量練習:

練習1:逐一顯示指定列表中的所有元素 >>> l1 = [1,2,3,4,5,6] >>> count = 0 >>> while l1: print(l1[0]) l1.pop(0) >>> l1 = [1,2,3,4,5,6] >>> while l1: print(l1[-1]) l1.pop() >>> l1 = [1,2,3,4,5,6] >>> count = 0 >>> while l1 < len(l1): print(l1[count]) count += 1 練習2:求100以內所有偶數之和 練習3:逐一顯示指定字典的所有鍵;並於顯示結束后說明總鍵數; >>> d1 = {'x':1,'y':23,'z':78} >>> keylists = d1.keys() >>> while keylists: print(keylists[0]) keylists.pop[0] else: print(len(d1)) 練習4:創建一個包含了100以內所有奇數的列表 >>> l1 = [] >>> x = 1 >>> while x < 100: l1.append(x) x += 2 練習5:逆序逐一顯示一個列表的所有元素 練習6:列表l1 = [0,1,2,3,4,5,6],列表l2 = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],以第一個列表中的元素為鍵,以第二個列表中的元素為值生成字典d1 >>> l1 = [0,1,2,3,4,5,6] >>> l2 = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] >>> d1 = {} >>> count = 0 >>> if len(l1) == len(l2): while count < len(l1): d1[l1[count]] = l2[count] count += 1 >>> print(d1)
for循環:
語法格式:
for expression1 in iterable: for_suite else: else_suite
通常,expression或是一個單獨的變量,或是一個變量序列,一般以元組的形式給出
如果以元組或列表用於expression,則其中的每個數據項都會拆分到表達式的項
T = [(1,2),(3,4),(5,6),(7,8)] for (a,b) in T: print(a,b)
編寫循環的技巧:
(1)for循環比while循環執行速度快
(2)python提供了兩個內置函數,用於在for循環中定制特殊的循環python3.x 只有range,python2.x有(range,xrange)
- range: 一次性地返回連續的整數列表
- xrange: 一次產生一個數據元素,相較於range更節約空間
- zip:返回並行的元素元組的列表,常用於在for循環中遍歷數個序列
range()函數:非完備遍歷
用於每隔一定的個數元素挑選一個元素
>>> S = 'How are you these days?' >>> range(0,len(S),2) [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22] >>> for i in range(0,len(S),2): print(S[i])
修改列表
>>> L = [1,2,3,4,5] >>> for i in range(len(L)): L[i] += 1 >>> L
zip()函數:並行遍歷
取得一個或多個序列為參數,將給定序列中的並排的元素配成元組,返回這些元組的列表
當參數長度不同時,zip會以最短序列的長度為准
1.可在for循環中用於實現並行迭代
>>> L1 = [1,2,3,4,5,6,7] >>> L2 = ['a','b','c','d','e','f','g'] >>> zip(L1,L2)
2.zip也常用於動態構造字典
>>> keys = [1,2,3,4,5,6,7] >>> vaules = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] >>> D = {} >>> for (k,v) in zip(keys,values) D[k] = v >>> D
for大量練習:

for循環練習: 練習1:逐一分開顯示指定字典d1中的所有元素,類似如下; k1 v1 k2 v2 >>> d1 = {'x':123,'y':321,'z':734} >>> for (k,v) in d1.items(): print(k,v) y 321 x 123 z 734 練習2:逐一顯示列表中l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']中索引為奇數的元素; >>> l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] >>> for i in range(1,len(l1),2): print(l1[i]) 練習3:將屬於列表l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],但不屬於列表l2=['Sun','Mon','Tue','Thu','Sat']的所有元素定義為一個新列表l3; >>> l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] >>> l2=['Sun','Mon','Tue','Thu','Sat'] >>> l3 = [] >>> for i in l1: >>> if i not in l2: >>> l3.append(i) 練習4:將屬於列表namelist=['stu1','stu2','stu3','stu4','stu5','stu6','stu7'],刪除列表removelist=['stu3','stu7','stu9'];請將屬於removelist列表中的每個元素從namelist中移除(屬於removelist,但不屬於namelist的忽略即可) >>> namelist=['stu1','stu2','stu3','stu4','stu5','stu6','stu7'] >>> removelist=['stu3','stu7','stu9'] >>> for i in removelist: >>> if i in namelist: >>> namelist.remove(i) >>> print(namelist)
場景一、用戶登陸驗證
#!/usr/bin/env python # -*- coding:utf-8 -*- import getpass name = 'tom' pwd = 123456 count = 0 while True: if count < 3: print("Please enter your name and password !") username = input("username:") password = getpass.getpass("password:") if username == name and password == pwd: print("恭喜你登陸成功!") break else: print("登陸失敗!用戶名或者密碼錯誤") else: print("你已經輸錯3次,正在退出....") break count += 1
場景二、猜年齡游戲
#!/usr/bin/env python # -*- coding:utf-8 -*- age = 22 count = 0 for i in range(10): if count < 3: a = int(input("please input num:")) if a == age: print("恭喜你,答對了") break elif a > age: print("你猜的數字大了") else: print("你猜的數字小了") else: b = input("你太笨了,這都猜不對,你繼續玩嗎?(yes or not):") if b == 'yes': count = 0 continue else: print("Bye!下次再玩") count += 1