天天看點

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 == 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,什麼是運算符?

  計算機可以進行的運算有很多種,可不止加減乘除那麼簡單,運算按種類可以分為算數運算,比較運算,邏輯運算,指派運算,成員運算,身份運算,位運算等

  下面簡單介紹算術運算,比較運算,邏輯運算,指派運算

python 闖關之路一(文法基礎)
python 闖關之路一(文法基礎)
python 闖關之路一(文法基礎)
python 闖關之路一(文法基礎)

 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)
      

不經一番徹骨寒 怎得梅花撲鼻香

繼續閱讀