一、在centos虛擬機中安裝pyhton3環境:
安裝pip3:yum install python36-pip
將pip升級到最新版本:pip3 install --upgrade pip
運行pip:pip
安裝requests模塊:pip install requests
列出系統中已經安裝的所有的python模塊:pip list
二、IDLE與python腳本
1、 使用Python,既可以編輯成腳本文件,也可以直接在Python自帶的開發環境IDLE里交互式的執行各種命令。
通常情況下,建議先在IDLE里對程序的各部分功能進行測試,驗證無誤后再編寫成腳本批量執行。
2、進入退出IDLE
執行python3命令進入IDLE交互模式
執行exit( ) 命令退出IDLE
3、Python程序文件一般以.py作為后綴, 如 test.py。
可以通過python3 test.py的方式執行。
也可以先執行"chmod a+x test.py"命令,為腳本文件添加執行權限,然后再以"./test.py" 的方式執行。
4、腳本文件命名不能太隨意,尤其是注意不要與Python庫重名,例如不能用os.py的名字。
5、python腳本的程序文件中的第一 行般都采用固定的格式:#!/usr/bin/python3
6、Python解釋器
.負責將Python源代碼解釋成機器碼並執行的程序。
如果不指定解釋器, 就只能通過python3 test.py的方式來執行腳本程序。
7、Python2的腳本文件中還需要再加上一行"#coding:utf- 8"來指定編碼格式。
Python2默認的編碼格式是ASCII,如果不指定編碼格式就無法處理中文信息。
Python3的默認編碼是Unicode,無需指定編碼格式也可以正常處理中文。
8、Python區分大小寫,比如布爾值True和False,如果寫成true或false就會報錯。
9、Python中的注釋主要分為兩種:
單行注釋 #,其后的內容將不會被執行。單行注釋一般可放在一行程序代碼之后, 或者獨自成行。
多行注釋,使用兩組,每組三個連續的雙引號”””或者三個連續的單引號‘‘ ' ,兩組引號之間為多行注釋的內容。
10、通常一個標准的完整Python腳本文件的頭部,應有相關注釋來記錄編寫者姓名、實現的功能和編寫日期等重要信息。
三、變量和數據類型:
1、變量定義:
1.1、變量不需要聲明,可以通過賦值創建變量,變量賦值通過"=”實現。
1.2、為變量賦值時應注意數據類型,字符型數據必須用引號引起來。
2、變量賦值:
2.1、可以同時為多個變量賦值,但變量與數值的個數必須相等。
2.2、也可以同時給多個變量賦相同的值
2.3、不要使用系統保留關鍵字作為變量名,比如 pass 等。
2.4、如何查看pyhton系統的關鍵字:
先輸入help()進入help的界面,在help界面中在輸入keywords即可查看python系統關鍵字:
3、數據類型:
3.1、區分數據類型的目的:
1、為不同類型的數據合理分配存儲空間。
2、不同類型的數據可以做不同的數據處理。
3.2、Python中的數據類型主要有:
1、數值型,具有又分為整型和浮點型。
2、字符型,用單引號、雙引號、三個單引號和三個雙引號括起來的字符
3、布爾型,0、None、空字符串、空列表、空元組被看作False.
4、列表、元組、字典、集合
4、強類型:強類型,是指數據類型比較強勢,不會輕易隨着環境的變化而變化。
1、不同類型的數據之間不能進行運算。
2、用type( )函數可以檢測數據類型。
3、利用int( ) 函數可以將文本型數據轉換成數值型數據
4、利用str( )函數可以將數值型數據轉換成文本型數據
5、在Python內部會把True當作1處理,把False當作0處理。
四、算術運算符
五、比較運算符
進行等於比較時,應該使用==。
Python支持鏈狀比較。 7<a<10
當對字符串進行比較運算時,是按ASCI碼值的大小進行比較。
六、字符串運算符:
1、"+"表示連接
2、"*"表示將字符串重復n次
3、"+”和“*”除了用於字符串對象之外,還可以用於列表、元組、字典等對象。
七、邏輯運算符:
邏輯運算符and (與)、or(或)、not(非),主要用於判斷表達式的值是否是True或False,通常與流程控制語句結合使用。
八、成員運算符:in和 not in,判斷某個數據是否存在於另一個數據對象中, 運算結果為True或 False。
九、輸入輸出函數
1、Python中的大部分功能都是由各種函數來實現的。
1.1、輸入數據主要用到input( )函數
1.2、輸出數據主要用到print( )函數
2、input( )函數可以在屏幕上顯示一段提示信息(提示信息可以為空)
3、等待用戶輸入一個數據之后,再將其賦值給一個變量。
4、input( )函數把輸入的數據默認都看作是字符型,如果需要輸入數值型數據,可以采用int()函數進行轉換。
十、同時使用input函數定義2個變量
十 一、同時使用input函數定義2個整數變量
十二、輸出函數print
print()函數可以同時輸出多組數據,每組數據之間用逗號","間隔,
print()函數遇到逗號”,"會輸出一個空格。
如果希望在輸出的內容之間沒有空格,可以把它們作為字符串連接在一起,此時需要注意數據類型必須保持一致。
十三、輸出函數print
print()函數的語法格式: print(values,sep,end,file,flush)
values代表所要輸出的值。
sep代表分隔符,如果要輸出多個值的話,在值與值之間會添加指定的分隔符
end代表輸出完畢之后,以指定的字符結束,默認是換行符"\n"。
十四、if的語法結構:
每個條件后面要使用冒號":” ,表示滿足條件后需要執行的語句塊。
Python語法要求縮進統一 。語句塊部分的代碼要求必須縮進,而且縮進方式必須統一 。縮進方式用空格或tab都可以。
Python中沒有switch....case分支語句。
十五、if 語句的表達條件
所有的Python合法表達式都可以作為條件表達式,只要表達式的值不是False、0、空值、None, Python解釋器都認為與True等價。
十六、三元表達式
十七、for循環和 while循環
循環次數確定 or 已知 用 for循環 ,循環次數未知,用 while 循環
十八、for循環的語法結構:
for循環執行時,依次將可迭代對象中的值賦值給變量,變量每賦值一次,就執行一次循環體。
注意,for語句后面必須要有冒號':’,循環體中的語句要注意縮進。
十九、九九乘法表:
for i in range(1,10):
for j in range(1,i+1):
print(str(j)+"*"+str(i)+"="+str(i*j),end=' ')
print()
二十、while循環:
1、for循環多用於循環次數可以提前確定的情況,尤其適用於枚舉或遍歷。
2、while循環一般用於循環次數難以確定的情況。
3、編程時一般優先考慮使用for循環。
二十 一、while循環的語法結構:
二十二、break語句:
break,用於跳出當前所在的循環體,但並不退出程序。
注意,break只退出該層循環。對於循環嵌套,break只是退出那一層循環,上層循環不受影響,
二十三、continue語句
continue用於暫停本次操作,跳轉至循環語句的頂部重新測試條件,本次執行過程中continue后的命令序列將被忽略。
注意,continue結束的不是整個循環,而是本次循環。
二十四、對100以內的任意數循環求和,直到按q鍵退出。
while True:
a,b = map(int,input().split())
if a > 100 or b > 100 :
print("只能輸入100以內的數")
continue
sum = a + b
print(sum)
q = input("按q鍵退出,按回車鍵繼續")
if q == 'q':
break
二十五、編寫一個驗證用戶賬號和密碼的腳本,要求實現以下功能:
運行腳本后,提示用戶輸入賬號和密碼。
如果賬號密碼正確,輸出“登錄成功" 。如果賬號或密碼錯誤,輸出“賬號密碼錯誤,請重新登錄"
最多允許3次輸入錯誤,錯誤次數超過3次之后,輸出“登錄失敗”,並退出腳本。
username = 'admin'
password = 'abc123'
i =0
while i < 3 :
i = i + 1
uname = input("賬號:")
password1 = input("密碼:")
if uname == username and password1 == password :
print("登錄成功!")
break
elif i == 3 :
print("登錄失敗!")
else :
print("賬號密碼錯誤,請重新登錄")
二十六:水仙花數,判斷3位水仙花數:
for i in range(100,1000):
bai= i // 100
shi= i % 100 // 10
ge= i % 10
if i == bai ** 3 + shi ** 3 + ge ** 3:
print(i)
改進水仙花數:
for i in range(100,1000):
bai,shi,ge = map(int,str(i))
if i == bai**3 + shi**3 + ge**3 :
print(i)
二十七、已知: Sn=1+1/2+ 1/3+...+ 1/n。顯然對於任意一個整數K,當n足夠大的時候,Sn大於K。
現給出一個整數K (1≤k≤15) , 要求計算出一個最小的n;使得Sn > K
k = int(input())
n = 1
s = 0
while True:
s = s +1/n
if s > k :
print(n)
break
n = n+1
二十八、函數
1、python的命令分為內部和外部命令
2、python密碼學主要使用的模塊是pycipher,每一個加密的算法都是其中的一個函數
3、pyhton可以自己來定義一個函數,def函數
4、python還有專門的函數和普通的函數,專門的函數是對專門的對象進行處理的(split()只能對字符串對象來用),普通函數是input,print這種函數
二十九、類和對象1
1、面向過程和面向對象
面向過程編程, 分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現。如C語言。
面向對象編程,把構成問題的事物分解成各個對象,建立對象的目的是為了實現某個功能,而不是為了完成一個步驟。面向對象是以功能來划分問題,而不是步驟。
1、類是實例的工廠,類提供模板。
2、實例是具體的產品,對象是類的實例。
2、定義類:class 對象
3、對象,繼承,封裝,多態等
4、isinstance 檢測它是不是屬於一個類
三十、類和對象2
1、屬性和方法,屬性就是變量,方法就是函數(類里面的函數)
2、對象的屬性可以更改,而類的power屬性仍保持不變
3、通過內置函數dir()可以查看類或對象的屬性和方法。
4、查看類的默認屬性_ dict_ , 可以查看屬性以及屬性的值。
5、通過help()函數可以查看類或對象的幫助信息。
概念總結:
面向對象是一種編程方式,此編程方式的實現是基於類和對象的使用。
類是一種模板,模板中封裝了多個函數供使用。
對象是根據模板創建的實例,可調用被封裝在類中的函數。
模塊中則集成了大量相關的類、函數、變量。
三十一、索引和切片
1、每個字符串都是一個對象, 來自str類。
2、每個字符串都可以調用str類中的方法。
3、索引:字符串中的每個字符都可以被看作一個獨立的元素, 都有一個相應的索引編號,索引編號從0開始。 a[0/4/-1]
4、切片:
1、指定一個索引區間,取出指定的字符串,這就稱為切片
2、切片的格式[起始索引:結束索引:步長]
3、起始索引默認為0
4、結束索引不包含該索引本身,省略時表示一直取到字符串的終點
5、步長默認為1
as:練習:
假設a = 'CaptureTheFlag',完成下列要求:
(1)取出字符串中的前7個字符。
(2)取出字符串中的后4個字符。
(3)取出字符串中的第8~第10個字符。
(4)取出字符串中從第8個字符開始直至最后的所有字符。
(5)將字符串反轉。
a='CaptureTheFlag'
print(a[:7])
print(a[-4:])
print(a[8:11])
print(a[8:])
print(a[::-1])
三十二、進制轉換
1、二進制:以b作為前綴,0b1010。
2、八進制:以o作為前綴,0o173。
3、十六進制:以0x作為前綴,0x1f。
4、用print函數直接輸出這些帶前綴的數據,可將它們轉換為十進制數。
5、Python內置函數bin()、oct()、 hex()分別用來將十進制數字轉換成二進制、八進制、十六進制。
6、int()函數可將其它進制的數據轉換成十進制。
語法格式: int( '被轉換的數據’,進制)
被轉換的數據必須要以字符串的形式輸入。
as:將下列16進制串中倒數第5, 6位轉換為3位十進制數,
將最后4位轉換為5位十進制卡號,中間用",”分開。(0000944664)
a='0000944664'
b = a[-6:-4]
print(int(b,16))
c = a[-4:]
print(int(c,16))
print(str(int(b,16))+','+str(int(c,16)))
三十三、字符編碼(ASCII碼):
1、字符編碼,將人類所使用的每個字符都對應到一個唯一的數字 上。
2、ASCII碼,美國標准信息交換碼。
3、對英文字母以及一些常用的符號進行編碼,一共表示了128個字符。
4、每個字符在計算機內部都對應了一個8位的二進制數,大小為1個字節。
三十四、man sacii 可以顯示ascii碼表(在linux中執行man ascii命令可以查看ASCI表。)
三十五、ASCII表一共只有128個字符, 對應的十進制數范圍是0~127。
三十六、ASCI碼實際上只有7位二進制數。
三十七、ASCII碼表中的128個字符分成了兩部分:
第一部分,0~31,規定了-些特殊的用途,當終端設備或者打印機遇上這些字符時,就要做一些約定的動作,比如換行、響鈴等,所以這些字符被稱為非打印字符。
第二部分,32~127,可打印字符,也就是可以顯示輸出的字符,包括了所有的大小寫英文字母、數字、標點符號等。
三十八、利用ord()函數可以返回某個字符所對應的ASCII碼(用十進制表示)。
三十九、利用chr()函數可以返回某個十進制數所對應的ASCII碼字符。
四十、666c61 677b616537333538376261353662616566357d題目(bugku,不是md5)
提示,16進制轉ascii嗎:
a = '666c61677b616537333538376261353662616566357d'
for i in range(0,len(a),2):
print(chr(int(a[i:i+2],16)), end='')
flag{ae73587ba56baef5}
四十一、md5的格式一共是32位,而且是16位的編碼方式
四十二、d4e8e5a0f1f5e9e3eba0e2f2eff7eea0e6eff8a0eaf5edf0a0eff6e5f2a0f4e8e5a0ece1faf9a0e4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0c2c4c3d4c6fbd9b0f5dfe1f2e5dff3ede1f2b7fd題目(ASCII碼)
for i in range(0,len(a),2):
print(chr(int(a[i:i+2],16)-128), end='')
四十三、
0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 0105 0132 0163 0131 0127 0143 066 0111 0105 0154 0124 0121
060 0116 067 0124 0152 0102 0146 0115 0107 065 0154 0130 062
0116 0150 0142 0154 071 0172 0144 0104 0102 0167 0130 063 0153 0167 0144 0130 060 0113 題目
for i in a.split():
print(chr(int(i,8)),end='')
V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K
用linux自帶的base64解碼的方式進行解碼:

Flag: ISCC{N0_0ne_can_st0p_y0u}
四十四、
d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65'
x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 0151 x66 d116 b101110 b100000
d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 064 o144 o145 d53 x61 b1100010 b1100011
o60 d48 o65 b1100001 x63 b110110 d101 063 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103
d111 d111 x64 d32 o164 b1101001 x6d o145 x7e 題目
b=a.split()
print(b)
flag=''
for i in b:
if i[0]=='d':
flag=flag + chr(int(i[1:]))
if i[0]=='x':
flag=flag + chr(int(i[1:],16))
if i[0]=='o':
flag=flag + chr(int(i[1:],8))
if i[0]=='b':
flag=flag + chr(int(i[1:],2))
print(flag)
四十五、
011001100110110001100001011001110111101101111010011010000100
0101011000110011100100110000001100110011
010001101010011011110110010001110011011010
10011001100110111101110011011010110110111101111101 題目
for i in range(0,len(a),8):
print(chr(int(a[i:i+8],2)),end='')
四十六、字符串常用函數和方法
1、len函數
通過len()函數可以統計字符串中字符的個數, 或者是列表、元組、字典中元素的個數。
as:25d55ad283aa400af464c76d713c07ad 題目
發現這是一個32位的16進制數,所以這是一個md5加密,可以用在線網站進行解密
flag{12345678}
2、max函數和min函數
max()函數用於求取最大值,min()函數用於求取最小值。
字符串按照ASCII碼值來比較大小,也可以對列表進行操作
通過key參數可以指定比較大小的依據。 key = len
例如返回列表中長度最大或者是最小的字符串:
3、sorted()函數
sorted()函數用於排序。
如果對字符串排序,則會生成一個列表。
4、reversed()函數
reversed()函數對可迭代對象進行反轉,並返回reversed對象。
reversed對象也是可迭代的,通常我們會將它轉換成列表,以直觀顯示。
使用for循環對reversed對象進行遍歷
5、split()方法:
split()方法可以將字符串根據某個分隔符進行分割,分割之后會得到一個列表。
split()默認以字符串中的空白符號(包括空格、換行符、制表符等)作為分隔符。
以點作為分隔符進行分割。
6、join()方法
join()的作用與split)相反,用於將字符串連接起來,通常與列表配合使用。
雖然使用"+"將字符串拼接也能起到相同的效果,但join的效率更高。
在拼接時也可以不指定拼接符。
join()配合reversed()函數,實現字符串反轉。
7、strip()、rstrip()、 Istrip()方法
strip()方法用於去除字符串頭尾指定的字符,如果不指定,則默認是去除空格、回車、換行等空白字符。
rstrip()方法用於去除字符串右端指定的字符。
Istrip()方法用於去除字符串左端指定的字符。
使用這種方法也可以去除指定字符
8、replace()方法
replace()方法可以將字符串中部分指定的字符進行替換。
字符串屬於不可變序列,字符串中的內容不允許改變。
-通過replace()方法 會生成新的字符串,原先字符串中的內容保持不變。
9、maketrans()和translate()方法
maketrans()方法用來生成字符映射表
translate()方法按照字符映射表中定義的對應關系, 將字符串中的指定字符進行替換。
使用這兩個方法的組合可以同時替換多個不同的字符, replace()方法則無法滿足這一要求。
as:
BBBBABBBBBBBBABBAABABAABBBABBBABBBABAABBBAABAABBABBBABABAABABAABABBBAA A,B互換
a='BBBBABBBBBBBBABBAABABAABBBABBBABBBABAABBBAABAABBABBBABABAABABAABABBBAA'
table = ''.maketrans('AB','BA')
print(a.translate(table))
四十七、摩斯密碼:
摩斯密碼是一-種早期的數字化通信形式,雖然由點"."和橫 "-”兩種符號組成,
但它不同於現代只使用o和1兩種狀態的二進制代碼。
as:恰恰 恰恰恰 恰綁恰綁 恰 綁綁恰綁{恰恰綁 恰恰恰 恰恰恰 恰綁綁 題目
a = '恰恰 恰恰恰 恰綁恰綁 恰 綁綁恰綁{恰恰綁 恰恰恰 恰恰恰 恰綁綁}'
b = ''.maketrans('恰綁','-.')
print(a.translate(b))
-- --- -.-. - ..-.{--. --- --- -..}
用在線網站解碼:https://tool.bugku.com/mosi
四十八、find方法和rfind方法:
find()方法用來查找一個字符串在另一個字符串中首次出現的位置。
rfind()方法用來查找一個字符串在另一一個字符串中最后一次出現的位置。
如果不存在則返回-1
四十九、index()方法和rindex(方法
index()和rindex()方法也是用來返回一個字符串在另一一個字符串中首次出現或者是最后一次出現的位置。
與find()和rfind()方法不同的是,如果指定的字符串不存在,index()方法會拋出異常,而不是輸出-1
五十、startswith()和endswith()方法
這兩個方法用來判斷字符串是否以指定的字符串開始或結束。
endswith()方法通常用於檢測文件的擴展名
在這兩個方法中可以使用元組的形式指定多個字符串作為判斷的依據。
五十一、upper()、lower()和swapcase()方法
upper)方法可以將字符串轉換成大寫形式
lower()方法可以將字符串轉換成小寫形式
swapcase()方法可以實現大小寫互換
注意,這幾個方法都是生成新字符串,而並不對原字符串做任何改動。
五十二、isupper()和islower()方法
isupper()方法用於判斷字符串是否是大寫字母
islower()方法用於判斷字符串是否是小寫字母
五十三、isalpha()、isdigit()、 isalnum()方法
isalpha()方法用於判斷字符串是否是字母
isdigit()方法用於判斷字符串是否是數字
isalnum()方法用於判斷字符串是否是由字母或數字組成的
五十四、
編寫一個程序,完成下列要求:
(1)程序執行時輸出提示信息"Please input yes or no:”
(2)如果用戶輸入"yes" (不區分大小寫) ,則輸出"continue”
(3)如果用戶輸入"no”(不區分大小寫) ,則輸出"exit"
提示:
(1)要考慮大小寫的問題。
(2)要考慮用戶輸入的信息中可能會含有多余的空格。a = input('Please input yes or no: ')
b = a.lower().strip() 大小寫和空格問題處理方法
if b == 'yes' :
print('continue')
elif b == 'no' :
print('exit')
else:
print('請查看提示信息,輸出正確的信息')
五十五、培根密碼
培根密碼是一種簡單的替換密碼,密文字符只有兩個: a和b,每個明文字符都會被替換為一個由a和b組成的長度為5的字符串。
比如明文h被替換后的密文為aabbb
密文字符也可以選擇任意兩個其它字符
如果看到這種全部由兩個字母組成的密文,那么就可以猜測可能是培根密碼。
在線解碼網站:http:/tool.bugku.com/peigen/
http://rumkin.com/tools/cipher/baconian.php
五十六、count方法:
count()方法用來返回一個字符串在另一個字符串中出現的次數,如果不存在則返回0。
五十七、centen()、ljust()、 rjust()方法
center()方法可以返回指定寬度的新字符串,原字符串居中,兩側用指定的字符進行填充。默認情況下,使用空格進行填充。
ljust()和rjust()方法則分別是將原字符串放在最左側或者是最右側。
五十八、
試計算在區間1到n的所有整數中,數字x(0≤x≤9)共出現了多少次?
例如,在1到11中,即在1,2,3,4,5,6,7,8,9,10,11中,數字1出現了4次。
n,x = input().split()
num = 0
for i in range(1,int(n)+1):
num = num + str(i).count(x)
print(num)
五十九、字符串格式化輸出:
name="張三"
age=18
print("姓名:{}$$年齡:{}".format(name,age))
print("姓名:%s$$年齡:%s" %(name,age))
print(f'姓名:{name}$$年齡:{age}')
s = 'hello,i think python is interesting'
print('##########'+s[14:20]+'##########')
print("{:#^26}".format(s[14:20]))
print("{:#<26}".format(s[14:20]))
print("{:#>26}".format(s[14:20]))
# 序號 填充 對齊 寬度 千位分隔符 精度 %s,%d等(format)
六十、list()函數
通過list()函數可以將字符串、元組、range對象等可迭代對象轉換為列表。
將字符串和元組轉換為列表
range()函數默認返回的是一個range對象, 用list函數可以將其轉換為列表。
六十一、列表與字符串的區別
列表屬於可變序列,列表中的元素可以被修改,而字符串則是不可變的。
列表中可以存放多種不同類型的數據。
六十二、列表常用的函數和方法:
1、sum()函數用於求和
2、map()函數可以把一個函數依次映射到序列的每個元素上,並返回-一個map對象作為結果,map對象中每個元素是原序列中元素經過函數處理后的結果。
為了直觀顯示,通常會將map()對象轉換成列表:
map()對象也是可迭代的,可以直接循環遍歷:
用input()函數接收多個數據,並轉換成數值型再存放到列表中。
獲取一個三位數的百位、十位、個位數:
3、append()、extend()方法,通過append()方法可以向列表尾部追加一個元素
4、extend()方法可以將另一個列表中的所有元素追加至當前列表的尾部,通過這種方法可以在列表尾部追加多個元素。
5、append()和extend()方法屬於原地操作,可以直接對列表進行修改。
6、利用運算符+和*也可以實現在列表中增加元素的目的,但它們不屬於原地操作,而是會返回新列表。
7、+和*的操作速度較慢,在添加大量元素時建議采用append( )和extend( )方法。
六十三、列表
1、列表用[]表示,在列表中可以集中存放多個數據,數據類型不必統一。
2、列表中的數據稱為列表的元素,每個元素之間用逗號"間隔。
3、列表中的元素還可以是一個列表、元組或者字典:
4、列表的索引和切片同字符串。
六十四、進制轉換1:
m,n = input().split()
s =len (n)
flag = f'{n[0]}*{m}^{(s-1)}'
for i in range(s):
if n[i]!='0':
flag = flag + f'+{n[i]}*{m}^{(s-1-i)}'
print(flag)
六十五、進制轉換2、
m,n = input().split()
s =len (n)
flag = []
for i in range(s):
if n[i]!='0':
flag = flag.apple(f'{n[i]}*{m}^{(s-1-i)}')
print('+'.join(flag))
六十六、count()、index()方法
如果指定元素在列表中不存在,index()方法會拋出異常。
通過成員測試運算符in也可以測試列表中是否存在某個元素。如果列表中不存在指定的元素,則返回False.
六十七、sort( )、 reversle( )方法
通過sort()方法可以將列表中的元素進行排序, I默認是升序。
通過reverse()方法可以將列表中的元素順序顛倒,也就是逆序。
這兩種方法屬於原地操作,經過排序之后,列表中元素原來的順序全部丟失。
利用sort( )方法進行降序排序需要用到reverse參數
通過sorted( )和reversed( )函數也可以實現排序和逆序,不過這兩個函數會生成新的列表,而不對原列表做任何修改。
可以利用sorted( )函數進行排序,也可以利用reversed()函數進行逆序
六十八、小魚最近被要求參加一個數字游戲,要求它把看到的一串數字 (長度不一定,以0結束,最多不超過100個,數字不超過2^32-1),記住了然后反着念出來(表示結束的數字0就不要念出來了)。這對小魚的那點記憶力來說實在是太難了,你也不想想小魚的整個腦袋才多大,其中一部分還是好吃的肉! 所以請你幫小魚編程解決這個問題。
a = list(input().split())
a.reverse()
a.pop(0)
print(' '.join(a))
六十八、列表推導式
列表推導式,也叫列表解析式,可以使用非常簡潔的方式來快速生成滿足特定需求的列表。
[表達式 for變量in序列或可迭代對象if條件表達式]
得到字符串"hello"中每個字符的ASCI碼值, 並存放到列表中。
六十九、元組
元組與列表類似,不同之處在於元組中的數據只能被調用,而不能被修改,元組用( )表示。
元組不可變
使用tuple()函數可以將其它序列轉換為元組。
元組沒有append()、 extend()以及remove()、 pop()等方法。
通過tuple()函數可以實現將列表凍結,而使用list()函數可以實現將元組融化。
元組的訪問和處理速度比列表更快,如果要對大量數據進行遍歷,而不需要對其中的元素進行任何修改,那么一般建議使用元組而不是列表。
元組還通常用於為函數傳遞參數,從而防止在函數中修改元組。
七十、敏感詞替換
txt = input()
key = ('暴力','非法','攻擊')
for i in key:
if i in txt:
txt =txt.replace(i,'***')
print(txt)
七十一、字典:
字典的表示:
1.adict={"張飛":3000,"趙雲":2000,"關羽":7000}
ainfo=[("張飛",3000),("趙雲",2000),("關羽",7000)]
2.bdict=dict(ainfo/rdic/tdic)
3.cdict=dict(關羽=7000,趙雲=2000)
4.didct={}.fromkeys(('a','b','c'))
5.eidct={}.fromkeys(('a','b','c'),100)
names=["張飛","趙雲","關羽"]
sal=[3000,2000,7000]
6.xdic=dict(zip(names,sal))
7.rdic=[["a",1],["b",2],["c",3]]
8.tdic=(("a",1),("b",2),("c",3))
鍵值查找:ainfo["趙雲"]
ainfo.get["趙雲"]
修改:ainfo["趙雲"]=8000
添加:ainfo["劉備"]=3000
刪除:del ainfo["劉備"]
ainfo.pop("趙雲")
ainfo.popitem()
ainfo.clear()
成員判斷: "趙雲" in ainfo
keys 返回所有字典的鍵
values 返回所有字典的值
items:返回所有字典的鍵值對 元組
遍歷字典:for k,v in ainfo.items():
print((k,v))
update:兩個字典的合並,對重復的數據(鍵)進行數據更新,以新字典的數據為准,對新字典沒有的數據,而原字典有的數據,直接加上,原字典沒有的數據,新字段有,也直接加上
ainfo update(binfo)
拷貝:ainfo.copy()
setdefault:和ainfo.get()類似,不同點是,如果鍵不存在於字典中,,將會添加鍵並將值話為default對應的值
ainfo.setdefault("劉備",3000)
類型:列表 list tuple 元組 字典 dict 集合 set
set 可變集合 frozenset 不可變集合
向集合中添加元素 a.add()
創建一個空集合 set() 創建一個空字典 {} 創建一個空列表 [] 創建一個空元組 ()
刪除集合中的元素 a.remove(3)
a.discard(3)
a.pop()
清空集合中的元素 :a.clear()
七十二、摩斯密碼解密腳本
txt = input().split()
if '.' in txt:
table = ''.maketrans('.-','01')
txt = txt.translate(table).split()
else:
txt = txt.split()
key = {'01':'A', '1000':'B', '1010':'C','100':'D','0':'E', '0010':'F','110':'G', ' 0000':'H', '00':'I', '0111':'J','101':'K', '0100':'L', '11':'M',
'10':'N', '111' :'0', '0110':'P', '1101':'Q', '010':'R', '000':'S','1':'T', '001':'U', '0001':'V', '011' :'W', '10011011' :'Y', '1100': 'Z',
'01111' :'l', '00111': '2', '00011': '3', ' 00001': '4', ' 00000':'5', '10000':'6', ' 11000':'7', ' 11100': '8', ' 11110': '9', '11111': '0',
'001100':'?','10010':'/','101101':'()','100001':'-','010101':'.', '110011':'', '011010':'@','111000':':', '101010':':', '10001':'=',
'011110' :"'", '101011':'!', '001101':'_ ' , '010010 ':'"', '10110':'(','1111011':'{', '1111101':'}'}
for i in txt:
print(key.get(i),end='')
七十三、培根密碼解密腳本
txt = input().lower()
a =["aaaaa ","aaaab", " aaaba","aaabb" , "aabaa" , " aabab" , " aabba" , " aabbb" , " abaaa", "abaab" , " ababa", " ababb", " abbaa" , " abbab" ,
" abbba" , " abbbb", " baaaa" , " baaab" , "baaba" , "baabb", "babaa", "babab" , "babba", "babbb" , "bbaaa" , " bbaab"]
b = 'abcdefghij klmnopqrstuvwxyz'
key= dict(zip(a,b))
for i in range(0,len(txt),5):
print(key.get(txt[i:i+5]),end='')
七十四、集合
集合的底層是字典,集合中的所有元素就是字典中的鍵,所以集合最主要的特點就是其中的元素不能重復。
集合也采用{}表示,集合中的元素是無序的。
用set()函數可以將其它對象轉換為集合
通過remove()方法可以清除集合中的指定元素
通過clear()方法可以清空集合。
計算集合的並集、交集和差集:
七十五、將12.,.,9共99個數分成3組,分別組成3個三位數,且使這3個三位數構成1:2:3的比例,試求出所有滿足條件的3個三位數。
for i in range(100,334):
m = i * 2
n = i * 3
key = str(i) + str(m) + str(n)
flag = set(key)
if '0' not in key and len(flag) == 9 :
print(i,m,n)
七十六、異常處理的幾種函數:
SystemExit:python解釋器退出
KeyboardInterrupt:用戶中斷
Exception:常見異常的父類
GeneratorExit:生成器退出
SyntaxError:發生語法錯誤時引發
FileNotFoundError:未找到指定文件or目錄時引發
NameError:找不到指定名稱的變量時引發
ZeroDivisionError:除數為0時引發
IndexError:當使用超出列表范圍的索引時引發
KeyError:當使用字典不存在的鍵時引發
AttributeError:當嘗試訪問未知對象屬性時引發
TypeError:當試圖在使用a類別的場合使用b類別時引發
七十七、異常處理實例
class FushuException(Exception): #自定義異常
def __init__(self,msg):
self.msg=msg
try:
a=int(input("請輸入被除數"))
b=int(input("請輸入除數"))
c=a/b
print("%d/%d=%f" %(a,b,c))
except ZeroDivisionError:
print("數據輸入有誤,除數不能為零")
else:
print("else正常")
finally:
print("finally無論是否異常都執行")