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 == 49:
count = 0
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)
不經一番徹骨寒 怎得梅花撲鼻香