python 闖關之路一(語法基礎)
1,什麽是編程?為什麽要編程?
答:編程是個動詞,編程就等於寫代碼,那麽寫代碼是為了什麽呢?也就是為什麽要編程呢,肯定是為了讓計算機幫我們搞事情,代碼就是計算機能理解的語言。
2,編程語言進化史是什麽?
答:機器語言 ------> 匯編語言 ------> 高級語言
機器語言:由於計算機內部只能接受二進制代碼,因此,用二進制代碼0和1描述的指令稱為機器指令,全部機器指令的集合構成計算機的機器語言,機器語言屬於低級語言。
匯編語言:其實質和機器語言是相同的,都是直接對硬件操作,只不過指令采取了英文縮寫的標識符,更容易識別和記憶。
高級語言:是大多數編程人員的選擇,和匯編語言相比,他不但將許多相關的機器指令合成為單條指令,並且去掉了與具體操作相關但與完成工作無關的細節,高級語言主要是相對於匯編語言而言,它並不是特指某一種具體的語言,而是包含了許多編程語言。如C/C++,JAVA,PHP,PYTHON等都屬於高級語言。
機器語言:優點是最底層,速度快,缺點是復雜,開發效率低
匯編語言:優點是比較底層,速度快,缺點是復雜,開發效率低
高級語言:編譯型語言執行速度快,不依賴語言環境運行,跨平臺差
解釋型跨平臺比較好,一份代碼,到處使用,缺點是執行效率慢,依賴解釋器運行
相比於機器和匯編語言,高級語言對開發人員更友好,在開發效率上大大提高。
3,簡述編譯型與解釋型語言的區別,且分別列出你知道的哪些語言屬於編譯型,那些屬於解釋型
高級語言所編制的程序不能被計算機所知別,必須講過轉換才能被執行,按照轉換方式,可以將其分為兩類,一類是編譯類,一類是解釋類
編譯類:就是在應用源碼程序執行之前,就將程序源代碼“翻譯”成目標代碼(機器語言),因此其目標程序可以脫離其語言環境獨立執行。使用比較方便,效率也高,但是應用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標(*.obj ,也就是OBJ文件)才能執行,只有目標文件而沒有源代碼,修改很不方便。
特點:編譯後程序運行時不需要重新翻譯,直接使用編譯的結果就行了。程序執行效率高,依賴編譯器,跨平臺性比較差,如C,C++,Delphi等
優點:1,執行程序時候,不需要源代碼,不依賴語言環境,因為執行的是機器源文件。
2,執行速度快,因為程序代碼已經翻譯成計算機可以理解的機器語言。
缺點:1,每次修改了源代碼,需要重新編譯,生成機器編碼文件
2,跨平臺性不好,不同操作系統,調用底層的機器指令不同,需要為不同的平臺生成不同的機器碼文件。
解釋類:執行方式類似於我們生活中的“同聲翻譯”,應用程序源代碼一邊由相應語言的解釋器“翻譯”成目標代碼(機器語言),一邊執行,一邊翻譯,因此效率比較低。
特點:效率低,不能生成獨立的可執行文件,應用程序不能脫離其解釋器,但是這種方式比較靈活,可以動態的調整,修改應用程序。如Python,Java,PHP,Ruby等語言。
優點:1,用戶調用解釋器,執行源碼文件,而且可以隨時修改,立即見效,改完源代碼,直接運行看結果
2,解釋器把源碼文件一邊解釋成機器指令,一邊交給CPU執行,天生跨平臺,因為解釋器已經做好了對不同平臺的交互處理,用戶寫的源代碼不需要考慮平臺差異性。
缺點:1,代碼是明文
2,運行效率低,所有的代碼是需要解釋器邊解釋邊執行,速度比編譯型慢很多。
4,執行python腳本的兩種方式是什麽?
1,交互器執行,在控制臺上運行臨時輸入的代碼
2,文件操作,執行一個保存好的py文件
兩者的區別是:一個是內存操作,一個是硬盤操作,
內存的特點是:讀取速度快,但是斷電就丟失數據
硬盤的特點是:速度慢,但可以保存數據
5,聲明變量註意事項是什麽?
變量定義規則:
1,變量名只能是字母,數字或者下劃線的任意組合
2,變量名的第一個字符不能是數字
3,關鍵字不能生命問變量名
註意事項:
1,變量名不能過長
2,變量名詞不達意思
3,變量名為中文,拼音
6,什麽是常量?
常量指不變的量,或者在程序運行過程中不會改變的量
在python中沒有一個專門的語法代表常量,程序員約定俗成用變量名全部大寫代表常量
7,python的單行註釋和多行註釋分別用什麽?
單行註釋# 多行註釋"""
代碼註釋原則:
1,不用全部加註釋,只需要在自己覺得重要或者不好理解的部分加註釋即可
2,註釋可以用中文或者英文,但絕對不要拼音
8,布爾值分別有什麽?
布爾類型很簡單,就兩個值,一個是True(真),一個是False(假),主要用於邏輯判斷
9,如何查看變量在內存中的地址?
這裏使用id
print(id.__doc__) Return the identity of an object. This is guaranteed to be unique among simultaneously existing objects. (CPython uses the object‘s memory address.)
10,寫代碼
10-1,實現用戶輸入用戶名,當用戶名為james,且密碼是123456,顯示登陸成功,否則登陸失敗。
_username = "james" _password = "123456" username = input("請輸入名字>>>") password= input("請輸入密碼>>>") if username==_username and password==_password: print("登陸成功") else: print("登陸失敗")
10-2,實現用戶輸入用戶名,當用戶名為james,且密碼是123456,顯示登陸成功,否則登陸失敗,失敗次數允許重復三次
_username = "james" _password = "123456" count =0 while count<3: username = input("請輸入名字>>>") password = input("請輸入密碼>>>") if username==_username and password==_password: print("登陸成功") break else: print("登陸失敗") count +=1
10-3,實現用戶輸入用戶名,當用戶名為james,或密碼是123456,顯示登陸成功,否則登陸失敗,失敗次數允許重復三次
_username = "james" _password = "123456" count =0 while count<3: username = input("請輸入名字>>>") password = input("請輸入密碼>>>") if username==_username or password==_password: print("登陸成功") break else: print("登陸失敗") count +=1
11,寫代碼
a,使用while循環實現輸出2-3+4-5+6....+100的和
count =2 num =0 while count<=100: if count%2==0: num = num+count else: num = num -count count+=1 print(num)
b,使用while循環實現輸出1,2,3,4,5,7,8,9,11,12
count =1 while count<=12: if count==6 or count==10: pass else: print(count) count+=1
c,使用while循環輸出100-50,從大到小,如100,99,98...,到50時候再從0循環輸出到50,然後結束
count =100 while count > 50: print(count) count -=1 if count==50: count=1 while count<=50: print(count) count+=1 break
d,使用while循環實現輸出1-100內所有的奇數
count =0 while count <=100: if count %2!=0: print(count) count +=1
e,使用while循環實現輸出1-100內所有的偶數
count =0 while count <=100: if count %2==0: print(count) count +=1
12,編程題:輸入一年份,判斷該年份是否屬於閏年並輸出結果
(註意閏年條件:1,能被四整除但不能被一百整除,2,能被四百整除)
if number%4==0 and number%100!=0 or number%400==0: print("%s 是閏年"%number) else: print("%s 不是閏年" % number)
13,編程題:假設一年期定期利率為3.24%,計算一下需要經過多少年,一萬元的一年定期存款連本帶息能翻倍?
money =10000 rate = 0.0324 years =0 while money <20000: years+=1 money = money*(1+rate) print(str(years))
14,什麽是運算符?
計算機可以進行的運算有很多種,可不止加減乘除那麽簡單,運算按種類可以分為算數運算,比較運算,邏輯運算,賦值運算,成員運算,身份運算,位運算等
下面簡單介紹算術運算,比較運算,邏輯運算,賦值運算
15,什麽是循環終止語句?
如果在循環的過程中,因為某些原因,你不想繼續循環了,怎麽把它終止掉呢?這就用到了break或者continue語句了
break用於完全結束一個循環,跳出循環體執行循環後面的語句
continue和break有點類似,區別在於continue只是終止本次循環,接著還執行後面的循環,break則完全終止循環
16,python中斷多重循環的方法exit_flag
常見的方法: exit_flag = flase for 循環: for 循環: if 條件 exit_flag = true break #跳出裏面的循環 if exit_flag: break #跳出外面的循環
17,基本數據類型和擴展數據類型的分類?
基本數據類型:
可變數據類型:列表,字典,集合
不可變數據類型:字符串,元祖,數字
擴展性數據類型:
1,namedtuole():生成可以使用名字來訪問元素內容的tuple子類
2,deque:雙端隊列,可以快速的從另一側追加和推出對象
3,counter:計數器,主要用來計數
4,orderdict:有序字典
5,defaultdict:帶有默認值的字典
18,元組的特點和功能
特點:
不可變,所以又稱只讀列表
本身不可變,但是如果元祖中還包含了其他可變元素,這些可變元素可以改變
功能:
索引
count
切片
19,簡單講一下hash
hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長度的輸入,通過散列算法,變化成固定長度的輸出,該輸出就是散列值,這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能散列成相同的輸出,所以不可能從散列值來唯一的確定輸入值,簡單的說就是有一種將任意長度的消息壓縮到某一固定長度的函數。
特性:hash值的計算過程是依據這個值的一些特性計算的,這就要求被hash的值必須固定,因此被hash的值是不可變的。
20,為什麽使用16進制
1,計算機硬件是0101二進制,16進制剛好是2的倍數,更容易表達一個命令或者數據,十六進制更簡短,因為換算的時候一位16進制數可以頂4位二進制數,也就是一個字節(8位進制可以用兩個16進制表示)
2,最早規定ASCII字符采取的就是8bit(後期擴展了,但是基礎單位還是8bit),8bit用兩個16進制直接就能表達出來,不管閱讀還是存儲逗逼其他進制更方便。
3,計算機中CPU計算也是遵循ASCII字符串,以16,32,64這樣的方法在發展,因此數據交換的時候16進制也顯得更好
4,為了統一規範,CPU,內存,硬盤我們看到的都是采取的16進制計算
21,字符編碼轉換總結
python2.x
內存中字符默認編碼是ASCII,默認文件編碼也是ASCII
當聲明了文件頭的編碼後,字符串的編碼就按照文件編碼來,總之,文件編碼是什麽,那麽python2.x的str就是什麽
python2.x的unicode是一個單獨的類型,按u"編碼"來表示
python2.x str==bytes,bytes直接是按照字符編碼存成2進制格式在內存裏
python3.x
字符串都是unicode
文件編碼都默認是utf-8,讀到內存會被python解釋器自動轉成unicode
bytes和str做了明確的區分
所有的unicode字符編碼後都會編程bytes格式
22,請用代碼實現,查找列表中元素,移除每個元素的空格,並查找以a或者A開頭並且以c結尾的所有元素
li =[‘alex‘,‘eric‘,‘rain‘] tu =(‘alex‘,‘aric‘,‘Tony‘,‘rain‘) dic = {‘k1‘:‘alex‘,‘aroc‘:‘dada‘,‘k4‘:‘dadadad‘} for i in li: i_new = i.strip().capitalize() if i_new.startswith(‘A‘) and i_new.endswith(‘c‘): print(i_new) for i in tu: i_new0 = i.strip().capitalize() if i_new0.startswith(‘A‘) and i_new.endswith(‘c‘): print(i_new0) for i in dic: i_new1 = i.strip().capitalize() if i_new1.startswith(‘A‘) and i_new.endswith(‘c‘): print(i_new1)
23,利用for循環和range輸出9*9乘法表
for i in range(1,10): for j in range(1,i+1): print(str(i)+"*"+str(j) +"="+str(i*j),end=‘ ‘) print( )
24,利用for循環和range循環輸出:
1,for循環從大到小輸出1-100
2,for循環從小到大輸出100-1
3,while循環從大到小輸出1-100
4,while循環從小到大輸出100-1
a =info.setdefault(‘age‘) print(a) print(info) b =info.setdefault(‘sex‘) print(b) print(info) for i in range(1,101): print(i) value =list(range(1,101)) print(value) for i in range(100,0,-1): print(i) value =list(range(100,1,-1)) i =1 while i<101: print(i) i+=1 i =100 while i>0: print(i) i-=1
25,有兩個列表,l1和l2 l1 =[11,22,33] l2 = [22,33,44]
1,獲取內容相同的元素列表
2,獲取l1中有,l2中沒有的元素
3,獲取l2中有,l1中沒有的元素
4,獲取l1中沒有,l2中沒有的元素
l1 = [11,22,33] l2 = [22,33,44] a =[] for i1 in l1: for i2 in l2: if i1==i2: a.append(i1) print(a) a =[] for i1 in l1: if i1 not in l2: a.append(i1) print(a) a =[] for i1 in l2: if i1 not in l1: a.append(i1) print(a) a1 =set(l1)&set(l2) print(a1) a2 =set(l1)^set(l2) print(a2)
26,列舉布爾值為False的所有值
所有標準對象均可用於布爾測試,同類型的對象之間可以比較大小,每個對象天生具有布爾值,空對象,值為0的任何數字或者Null對象None的布爾值都是False
下面對象的布爾值為False: 所有值為0的數 0(整數) 0(浮點數) 0L(長整形) 0.0+0.0j(復數) “”(空字符串) [](空列表) ()(空元組) {}(空字典)
值不是上面列出來的都是True.
27,輸入商品列表,用戶輸入序號,顯示用戶選中的商品,商品=【‘手機’,‘電腦’,‘電視’,‘冰箱’】允許用戶添加內容,用戶輸入序號顯示內容
print("輸出商品列表,用戶輸入序號,顯示用戶選中的商品") li = ["手機", "電腦", ‘鼠標墊‘, ‘遊艇‘] for i,j in enumerate(li,1): #自定義列表索引下標,從1開始,將列表索引下標賦值給i,將列表值賦值給j print(i,j)#打印出列表的索引下標,和列表的值 a = input("請輸入商品序號") #要求用戶輸入商品序號 if a.isdigit():#判斷用戶輸入的是否是純數字 pass else: exit("你輸入的不是有效的商品序號")#如果不是純數字打印提示信息,並且退出程序,不在往下執行 a = int(a) #將用戶輸入的序號轉換成數字類型 b = len(li)#統計li列表的元素個數 if a > 0 and a <= b: #判斷 c = li[a-1] print(c) else: print("商品不存在")
28,元素分類,有如下集合 [11,22,33,44,55,66,77,88,99],將所有大於66的值保存到第一個key的值中,將所有小於66的值保存到第二個key的值中,{‘k1‘:大於66的值,‘k2’:‘小於66的值}
list1 = [11,22,33,44,55,66,77,88,99] b =[] c=[] for i in list1: if i>66: b.append(i) else: c.append(i) print(b) print(c) dict1 = {‘k1‘:b,‘k2‘:c}
29,元素分類,有如下集合 [11,22,33,44,55,66,77,88,99],將所有大於66的值保存到一個列表,小於66的保存到另一個列表
list1 = [11,22,33,44,55,66,77,88,99] dict1 = {‘k1‘:{},‘k2‘:{}} b =[] c=[] for i in list1: if i>66: b.append(i) else: c.append(i) print(b) print(c)
30,查找列表,元組,字典,中元素,移除每個元素的空格,並查找以 a或A開頭 並且以 c 結尾的所有元素。
li = ["alec", " aric", "Alex", "Tony", "rain"] tu = ("alec", " aric", "Alex", "Tony", "rain") dic = {‘k1‘: "alex", ‘k2‘: ‘ aric‘, "k3": "Alex", "k4": "Tony"}print("查找列表中元素,移除每個元素的空格,並查找以 a或A開頭 並且以 c 結尾的所有元素。") li = ["aleb", " aric", "Alex", "Tony", "rain"] for i in li: b = i.strip() #移除循環到數據的兩邊空格 #判斷b變量裏以a或者A開頭,並且以c結尾的元素 #註意:如果一個條件語句裏,or(或者),and(並且),都在條件判斷裏,將前面or部分用括號包起來,當做一個整體, #不然判斷到前面or部分符合了條件,就不會判斷and後面的了,括起來後不管前面符不符合條件,後面的and都要判斷的 if (b.startswith("a") or b.startswith("A")) and b.endswith("c"): print(b) #打印出判斷到的元素 tu = ("aleb", " aric", "Alex", "Tony", "rain") for i in tu: b = i.strip() if (b.startswith(‘a‘) or b.startswith("A")) and b.endswith("c"): print(b) dic = {‘k1‘: "alex", ‘k2‘: ‘ aric‘,"k3": "Alex","k4": "Tony"} for i in dic: b =dic[i].strip() if( b.startswith(‘a‘) or b.startswith("A") )and b.endswith("c"): print(b)
31,寫代碼:有如下列表,請按照功能要求實現每一功能
li=[‘hello‘,‘seveb‘,[‘mon‘,[‘h‘,‘key‘],‘all‘,123,446]
1,請根據索引輸出‘kelly’
2,請使用索引找到”all“元素,並將其修改為”ALL“,如”li[0][1][9]...
li =[‘hello‘,‘seven‘,[‘mon‘,[‘h‘,‘kelly‘],‘all‘],123,446] print(li[2][1][1]) print(li[2][2]) li[2][2] = "ALL" print(li[2][2]) a = li[2][2].upper() print(a)
li[2][index] ="ALL"
print(li)
32,寫代碼,要求實現下面每一個功能
li=[‘alex‘,‘eric‘,‘rain‘]
1,計算列表長度並輸出
2,列表中追加元素“servn",並輸出添加後的列表
3,請在列表的第一個位置插入元素‘tony’,並輸出添加後的列表
4,請修改列表位置元素‘kelly’,並輸出修改後的列表
5,請在列表刪除元素‘eric’,並輸出刪除後的列表
6,請刪除列表中的第2個元素,並輸出刪除後的元素的值和刪除元素後的列表
7,請刪除列表中的第三個元素,並輸出刪除後的列表
8,請刪除列表的第2到4個元素,並輸出刪除元素後的列表
9,請用for len range輸出列表的索引
10,請使用enumrate輸出列表元素和序號
11,請使用for循環輸出列表中的所有元素
li = [‘alex‘,‘eric‘,‘rain‘] # 1,計算列表長度並輸出 # print(len(li)) # 列表中追加元素“seven”,並輸出添加後的列表 # li.append(‘seven‘) # print(li) # 請在列表的第1個位置插入元素“Tony”,並輸出添加後的列表 # li.insert(1,‘tony‘) # print(li) #請修改列表第2個位置的元素為“Kelly”,並輸出修改後的列表 # li[1] =‘kelly‘ # print(li) # 請刪除列表中的元素“eric”,並輸出修改後的列表 # a =li.pop(2) # print(li) # li.remove(‘eric‘) # print(li) # 請刪除列表中的第2個元素,並輸出刪除元素後的列表 # b =li.pop(1) # print(b) # print(li) # 請刪除列表中的第2至4個元素,並輸出刪除元素後的列表 # c = li[2:4] # d = set(li)-set(c) # # print(list(d)) # del li[1:4] # print(li) # 請將列表所有的元素反轉,並輸出反轉後的列表 # e = li.reverse() # print(li) # 請使用for、len、range輸出列表的索引 # for i in range(len(li)): # print(i) # 請使用enumrate輸出列表元素和序號(序號從100開始) # for index in enumerate(li): # print(index) # for index,i in enumerate(li,100): # print(index,i) # for i in li: # print(i)
33,寫代碼,有如下元組,請按照功能要求實現每一個功能
tu = (‘alex‘,‘eric,‘rain‘)
1,計算元組的長度並輸出
2,獲取元祖的第二個元素,並輸出
3,獲取元祖的第1-2個元素,並輸出
4,請用for輸出元祖的元素
5,請使用for,len,range輸出元組的索引
6,請使用enumerate輸出元組元素和序號,(從10開始)
tu = (‘alex‘,‘eric‘,‘rain‘) # 1,計算元組的長度並輸出 print(len(tu)) # 2,獲取元祖的第二個元素,並輸出 print(tu[1]) # 3,獲取元祖的第1-2個元素,並輸出 print(tu[0:2]) # 4,請用for輸出元祖的元素 for i in tu: print(i) # 5,請使用for,len,range輸出元組的索引 for i in range(len(tu)): print(i) # 6,請使用enumerate輸出元組元素和序號,(從10開始) for index,i in enumerate(tu,10): print(index,i)
三十四,有如下變量,請實現要求的功能
tu=("alex",[11,22,{"k1":‘v1‘,"k2":["age","name"],"k3":(11,22,33)},44])
a.講述元祖的特性
答:元組具有列表的全部特性,不同的是,元組的元素不能修改
b.請問tu變量中的第一個元素“alex”是否可被修改?
答:不能
c.請問tu變量中的"k2"對應的值是什麽類型?是否可以被修改?如果可以,請在其中添加一個元素“Seven”
答:列表 ,可以
tu = ("alex", [11, 22, {"k1": ‘v1‘, "k2": ["age", "name"], "k3": (11, 22, 33)}, 44]) tu[1][2]["k2"].append("Seven") print(tu)
d.請問tu變量中的"k3"對應的值是什麽類型?是否可以被修改?如果可以,請在其中添加一個元素“Seven”
答: 元組,不能
三十五,練習字典
dic={‘k1‘:"v1","k2":"v2","k3":[11,22,33]}
a.請循環輸出所有的key
b.請循環輸出所有的value
c.請循環輸出所有的key和value
d.請在字典中添加一個鍵值對,"k4":"v4",輸出添加後的字典
e.請在修改字典中“k1”對應的值為“alex”,輸出修改後的字典
f.請在k3對應的值中追加一個元素44,輸出修改後的字典
g.請在k3對應的值的第1個位置插入個元素18,輸出修改後的字典
dic={‘k1‘:"v1","k2":"v2","k3":[11,22,33]} # a.請循環輸出所有的key for i in dic : print(i) for i in dic.keys(): print(i) # b.請循環輸出所有的value for i in dic.values(): print(i) # c.請循環輸出所有的key和value for i,j in dic.items(): print(i,j) # d.請在字典中添加一個鍵值對,"k4":"v4",輸出添加後的字典 dic2 = {‘k4‘:‘v4‘} dic.update(dic2) print(dic) dic[‘k4‘] = ‘v4‘ print(dic) # e.請在修改字典中“k1”對應的值為“alex”,輸出修改後的字典 dic[‘k1‘] =‘alex‘ print(dic) # f.請在k3對應的值中追加一個元素44,輸出修改後的字典 dic[‘k3‘].append(44) print(dic) # g.請在k3對應的值的第1個位置插入個元素18,輸出修改後的字典 dic[‘k3‘].insert(0,18) print(dic)
python 闖關之路一(語法基礎)