自動化運維python學習筆記一

Python簡介

  python是吉多·範羅蘇姆發明的一種面向對象的腳本語言,可能有些人不知道面向對象和腳本具體是什麼意思,可是對於一個初學者來講,如今並不須要明白。你們都知道,當下全棧工程師的概念很火,而Python是一種全棧的開發語言,因此你若是能學好Python,那麼前端,後端,測試,大數據分析,爬蟲等這些工做你都能勝任。前端

爲何選擇Python

  關於語言的選擇,有各類各樣的討論,在這裏我很少說,就引用Python裏面的一個彩蛋來講明爲何要選擇Python,在Python解釋器裏輸入import this 就能夠看到。java

>>> 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是用最簡單最優雅最明確的方法來解決問題。node

 

Python入門 

1、Python 2.x vs 3.x區別

1.print在python2.x是語句,在python3.x是print()函數python

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 -*-,中文才不會亂碼linux

3.python2.x一些庫名在python3.x的更改express

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有一些第三方模塊支持不了,固然還有其餘的模塊,後續慢慢添加....ubuntu

Twisted  urllib2  scrapy MySQLdbvim

5.python2.x與python3.x庫方法的不一樣,在後續慢慢體現....windows

 

2、安裝Python

1.下載源碼包後端

地址https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz

 

2.解壓源碼包

1).下載解壓工具xz
 #yum -y install search xz

2).解壓
 #xz -d Python-3.6.3.tar.xz
 #tar -xf Python-3.6.3.tar

 

3.安裝依賴文件

yum -y install zlib-devel  gcc

 

4.安裝

cd Python-3.6.3

./configure --prefix=/usr/local/python

make && make install

 

5.後續工做

# which python
/usr/bin/python

#rm -rf /usr/bin/python       #刪除原python軟鏈接

#ln -s /usr/local/python/bin/python3 /usr/bin/python   #創建新的軟鏈接

# python  
Python 3.6.3 (default, Dec 20 2017, 00:21:48) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>>

完成

 

3、編寫Hello,World

#!/usr/bin/env python
#coding:utf-8
print("你好,世界")

[root@Dannyserver danny]# python 1.py
你好,世界

 

在Linux下執行的時候,第一行指出文件由python解釋器來執行,第二行是告訴解釋器在加載文件時,採用何種編碼,不加上這句的話,在python2中顯示中文會出現亂碼,在python3中則不會,因此你若是用的是windows並且用的是python3,其實能夠不用加這兩句,不過實際中仍是建議加上這兩句。

 

4、變量&字符編碼

常量咱們約定俗成都爲大寫

一、變量聲明:

  1. Python將全部數據存爲內存對象
  2. Python中,變量事實上是指向內存對象的引用
  3. 動態類型:在任什麼時候刻,只要須要,某個對象引用均可以從新引用一個不一樣的對象(能夠是不一樣的數據類型)內建函數type()用於返回給定數據項的數據類型
  4. "="用於將變量名與內存中的某個對象綁定:若是對象實現存在,就直接進行綁定;不然,則由"="建立引用的對象,變量名也是對象存在內存,好比:name='jerry',name這個指針指向jerry,name='tom'的時候,name是指針指向tom,可是jerry仍在內存中存放着,只是沒有被變量名指向,到必定時候會被垃圾收集器回收,和java有點像。其中當test='jerry'時,test和name這兩個變量名指向內存的地址是同樣的。id(test),id(name),變量名是內存引用的標識或符號。

二、變量定義的規則:

  1. 變量名只能是 字母、數字或下劃線的任意組合
  2. 變量名的第一個字符不能是數字
  3. 如下關鍵字不能聲明爲變量名

   ['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)

 

三、變量最佳命方式:

  1. 使用下劃線'_'做爲鏈接,如 name_variables
  2. 使用大小寫,稱爲駝峯法,如 NameVariables,nameVariables

  注意:兩種命名方式不要混用,只要你喜歡的一種便可

四、變量命名慣例:

  1. 以單一下劃線開頭的變量名(_x)不會被from module import * 語句導入
  2. 以兩個下劃線開頭但結尾沒有下劃線的變量名(__x)是類的本地變量
  3. 先後有雙下劃線的變量名(__x__)是系統定義的變量名,對python解釋器有特殊意義
  4. 交互式模式下,變量名"_"用於保存最後表達式的結果

字符編碼

一、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

二、Unicode

  Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定全部的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,注:此處說的的是最少2個字節,可能更多,好比漢字就須要3個字節,python3.x解釋器默認是Unicode編碼。

三、UTF-8

     是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行動態分類:ASCII碼中的內容用1個字節保存、歐洲的字符用2個字節保存,漢字用3個字節保存...

因此,python2.x解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ASCII),若是是以下代碼的話:

報錯:ascii碼沒法表示中文

tomcat@node:~$ vim a.py
#!/usr/bin/env python
print "你好!世界"<br>
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

 

5、輸入、輸出、註釋

Python輸入:

一、Python3.x提供了一個input(),可讓用戶輸入字符串。好比輸入用戶的名字:

python3中格式化輸出默認接收的都視爲字符串,若是你獲取的是要數字類型則須要另外強制轉換爲int()轉換爲數字類型才能得到數字

name = input("please input your name:")
print("Hello " + name)

 

輸入密碼時,若是想要不可見,須要利用 getpass 模塊中的 getpass 方法,即:

 

#!/usr/bin/env python
#coding:utf-8
import keyword
pwd = getpass.getpass("請輸入密碼:")
print(pwd)

 

注意:在pycharm IDE工具中這段代碼是行不通的,在Linux命令行或者Windows cmd中是能夠的

 

二、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()轉換了則不會報錯,修改成%(name,name,int(age),job)即不會報錯

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__動態得到文檔子串

 

6、模塊初識  

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 hello world
['d.py', 'hello', 'world']  #把執行腳本時傳遞的參數獲取到了

 

os

>>> import os
>>> os.system("df -h") #調用系統命令

 

注意:os.system()執行系統命令,若是有變量存儲該執行的結果,該變量只會存儲該命令執行成功或者失敗返回值,不會存儲命令執行的結果,os.system("df -h")會有返回值

>>> result = os.system("df -h")

Filesystem Size Used Avail Use% Mounted on
/dev/sda3 49G 1.7G 44G 4% /
tmpfs 242M 0 242M 0% /dev/shm
/dev/sda1 194M 27M 158M 15% /boot
/dev/sr0 3.6G 3.6G 0 100% /mnt/cdrom

>>> 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:]))      
//os.system()調用系統命令,sys.argv[1:]調用傳入的包括第二個參數在內的之後全部參數,也能夠修改成[1]只調用第二個參數,第一個爲0
join()函數的解析,此處是以''內的空白爲分隔符,將()內的全部元素合併爲一個新得字符串
此處能夠直接簡化爲os.system(sys.argv[1])
# 執行 tomcat@node:~$ python e.py df //或者用python e.py "df -h"調用 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']

 

 

7、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

 

8、循環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

注意:

  1. else分支爲可選部分
  2. 只要boolean_express的結果爲True,循環就會執行
  3. 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) 複製代碼 場景1、用戶登錄驗證 複製代碼 #!/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

 

 

場景1、用戶登錄驗證

#!/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

 

 

場景2、猜年齡遊戲

#!/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
相關文章
相關標籤/搜索