Python小白入門練習試題

如下是三套Python101的檢測題,你可以從中任選一套,如果你可以在40分鐘之內完成,請跳過Python基礎開始你的進階之路;如果你磕磕巴巴60分鐘都沒有完成,請果斷從0開始。

Python基礎 A卷

  1. “=”,"==",在Python中分別代表什麼含義。
    "=":python中賦值操作
    "==":判斷數字或字符串是否相等
    "+=":例如 a+=1 等於 a = a + 1  
  1. 兩個變量值的關係?(口述)(1分鐘)

    • n1 = 123456

    • n2 = n1

      答案:
      n1和n2的數值相等,內存地址相等
      n2的數值更改不會帶動n1數值更改
      
  2. “地鐵故事” 分別用 utf-8 和 gbk 編碼所佔的位數。

    答案:
    “地鐵故事”utf-8佔用12個字節(3*4=12)
    “地鐵故事”gbk佔用8個字節(2*4=8)
    ascii 不支持中文;英文佔1個字節
    GBK 中文2個字節,英文1個字節
    Unicode 中文2個字節,英文2個字節;
    utf-8 中文3個字節,英文佔1個字節,歐洲2個字節
    

    解析:

    1. 編碼的故事要從ASCII碼說起,ascii 不支持中文。在計算機的存儲單元中,一個ASCII碼值佔一個字節(8個二進制位),其最高位(b7)用作奇偶校驗位。
    2. 既然你英語國家可以做ASCII,那我們中國就也可以做我們的GBK。 GBK、GB2312收編的漢字佔2個字節。因爲GBK是國人編碼,我國人制定的規則是:GBK編碼,一個漢字佔2個字節,
    3. 中國有中國的GBK,日韓越有日韓越的GBK,編碼就不統一了。Unicode應運而生,Unicode其實是一個字符集。缺點是:佔用的內存空間比ASCII大1倍。常用中文字符用utf-8編碼佔用3個字節(大約2萬多字),但超大字符集中的更大多數漢字要佔4個字節(在unicode編碼體系中,U+20000開始有5萬多漢字)。
    4. 因爲如上缺點“Unicode佔用的內存空間比ASCII大1倍。”,於是這時候有了UTF-8。utf-8(utf16/utf32),是變長編碼,英文只用一個字節即可,漢字要用三個字節;擴展B區以後的漢字佔四個字節,英文字母佔兩個字節。UTF-8中 常用中文字符用utf-8編碼佔用3個字節(大約2萬多字);但超大字符集中的更大多數漢字要佔4個字節(在unicode編碼體系中,U+20000開始有5萬多漢字)。爲什麼UTF8卻使用3個字節存儲字符"你"呢?這樣不是明顯浪費存儲空間嗎?UTF8沒有浪費存儲空間,而且UTF8還是一個精美的設計。這是UTF8爲了兼容ASNI所要付出的代價,UTF8下是完全兼容asni,也就是asni標準的下的文檔,在UTF8下顯示完全不是問題(因爲ASNI存儲字節值和UTF8是一樣的)。字符都是一個一個字節存儲的,UTF8肯定是一個一個字節的讀取,那麼UTF8怎麼在完全兼容ASNI前提下,是怎麼知道某個字符是需要額外字節信息的?UTF8只有固定前幾位二進制來決定這個字符需要以後的幾個字節,又因爲爲了兼容ASNI,所以額外字節也需要固定前2位"10xxxxxx",來決定這個字節值不是代表ASNI字符。ASNI的格式是“0xxxxxxx”。
      另外,UTF-16編碼,通常漢字佔兩個字節,CJKV擴展B區、擴展C區、擴展D區中的漢字佔四個字節(一般字符的Unicode範圍是U+0000至U+FFFF,而這些擴展部分的範圍大於U+20000,因而要用兩個UTF-16),英文字母佔兩個字節。

Tips:處理的文本主要爲中文時最好用gbk編碼,英文較多時用utf8編碼。
gbk和utf8兩種編碼之間轉換要通過unicode來間接實現。

  1. 簡述Python中的幾種數據類型。

    答案:
      數字,字符串,列表,元組,字典,集合
    
  2. 數據類型的可變與不可變分別有哪些?

    答案:
      可變類型: list
      不可變類型:number, string,tuple, set
      區分: 是否可以被hash, 可變類型是不可以被hash的
    
  3. 元祖,列表,字典有沒有長度的限制?

    答案:
        現在,這三個數據是沒有長度限制的,但是會受到用戶使用的系統的限制。
       eg:
       32位:536870912     
       64位:1152921504606846975
    
  4. 列表 li = [‘bbb’,‘eee’,‘yuan’,‘www’,‘666’]

    • 1.把666替換成999

    • 2.獲取"yuan"索引

    • 3.假設不知道前面有幾個元素,分片得到最後的三個元素( [-3:] )

      答案:
          1, li[-1] = 999  或者 li[li.index('666')] ="999"
          2, li.index("yuan")
          3, li[-3:]
      
  5. 將字符串s = “www.yanpeizhen.com”給拆分成列表:li=[‘www’,‘yanpeizhen’,‘com’]

    答案:
       print(s.split("."))
       或者
       c= s.split('.')
       print(c)
    
  6. 對字典進行增刪改查(編程)

    d = {
            "Development":"開發小哥",
            "OP":"運維小哥",
            "Operate":"運營小仙女",
            "UI":"UI小仙女"
        }
    
    答案:
       1, 增加: name : aaa
                d["name"] = "aaa"
       2, 修改: aaa 改爲 www
                d["aaa"] = "www"
       3, 刪除: 刪除 name 爲 www
                d.pop("www")
       4, 查詢: "UI":"UI小仙女"
                d["UI"]
    
  7. 計算1+2+3…+98+99+100 (注意不要用等差公式)。

    答案:
    
        sum = 0
        for i in range(1,101):  #range的範圍 顧頭不顧尾
            sum += i
    
        print(sum)
    
  8. 製作趣味模板程序。

需求:等待用戶輸入名字、地點、愛好,根據用戶的名字和愛好進行任意現實
如:天真爛漫的xxx,最喜歡在xxx幹xxx

參考答案1:
name = input("你的名字")
space = input('你喜歡的活動的地方')
hobby = input('你的愛好')

print('天真爛漫的{},最喜歡在{} {}'.format(name,space,hobby))
參考答案2:
       name = input("請輸入姓名:")
       address = input("請輸入地點:")
       hobby = input("請輸入愛好:")

      print("天真爛漫的 %s, 最喜歡在%s幹%s" % (name, address, hobby))
  1. 寫一個三次驗證登陸(編程):實現用戶輸入用戶名和密碼,當用戶名爲 Elisabeth 或 Elizabeth 且 密碼爲 123321 時,顯示登陸成功,否則登陸失敗,失敗時允許重複輸入三次。
   答案:
       username = ['Elisabeth ', 'Elizabeth ']
       password = '123321 '
       count = 0
       while count < 3:
          username = input('用戶名:')
          password = input('密碼:')
          if username in username and password == password:
             print('登陸成功!')
             break
          else:
            print('登陸失敗!')
          count += 1
參考2
check = 0
user_name = ['Elisabeth','Elizabeth']
user_password='123321'
while check<3:
    your_user_name = input('請輸入你的用戶名')

    if your_user_name in user_name:
        user_password = input('請輸入密碼')
        if your_user_password == '123321':
            print('登陸成功')
            break
        else:
            print('密碼錯誤')
            check+=1
        continue

    else:
        print('登陸賬號錯誤')
        check += 1
        continue

Python 基礎 B卷

  1. 解釋’and’,‘or’,‘not’

    答案:
    not –表示取反運算。
    and –表示取與運算。
    or –表示取或運算。
    
    優先級是 not>and>or。
    and從左到右計算表達式,若所有值均爲真,則返回最後一個值,若存在假,返回第一個假值。
    真 假   假
    真 真   真
    假 假   假
    假 真   假
    
    or 也是從左到右計算表達式,返回第一個爲真的值
    真 假   真
    真 真   真
    假 假   假
    假 真   真    
    
  2. 元祖和列表的區別。

    答案:
      1, 兩者的表達形式不一樣 ,list  爲 [], tuple 爲().
      2,list  爲 可變類型, tuple 爲不可變類型
    
  3. 列舉布爾值爲False的情況。

    答案:
      [],{},None,False,'',數字0  
    
  4. python2和python3對於long(長整形)的區別。

    答案:

    python2 中數字類型分爲 int(整型) 和 long(長整型)。 但是要看操作系統的位數

    32位:2…31之後就是長整型.
    64位 2…63 9223372036854775808L

    python3 中只有整型

  5. 變量命名規範有哪些?

答案:
模塊名,包名 :小寫字母, 單詞之間用戶_分割。
類名:首字母大寫。
全局變量: 大寫字母, 單詞之間用戶_分割。
普通變量: 小寫字母, 單詞之間用戶_分割。
函數: 小寫字母, 單詞之間用戶_分割。
實例變量: 以_開頭,其他和普通變量一樣 。
私有實例變量(外部訪問會報錯): 以__開頭(2個下劃線),其他和普通變量一樣 。
專有變量: __開頭,__結尾,一般爲python的自有變量(不要以這種變量命名)。

  1. 闡述一下unicode和utf-8的區別(或者unicode在python3的作用)。

答案:
簡單來說:Unicode 是「字符集」
UTF-8 是「編碼規則」
其中:字符集:爲每一個「字符」分配一個唯一的 ID(學名爲碼位 / 碼點 / Code Point)。
編碼規則:將「碼位」轉換爲字節序列的規則(編碼/解碼 可以理解爲 加密/解密 的過程)。
廣義的 Unicode 是一個標準,定義了一個字符集以及一系列的編碼規則,即 Unicode 字符集和 UTF-8、UTF-16、UTF-32 等等編碼……
Unicode 字符集爲每一個字符分配一個碼位,例如「知」的碼位是 30693,記作 U+77E5(30693 的十六進制爲 0x77E5)。
UTF-8 顧名思義,是一套以 8 位爲一個編碼單位的可變長編碼。會將一個碼位編碼爲 1 到 4 個字節:U+ 0000 ~ U+ 007F: 0XXXXXXX
U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
根據上表中的編碼規則,之前的「知」字的碼位 U+77E5 屬於第三行的範圍:
7 7 E 5
0111 0111 1110 0101 二進制的 77E5
--------------------------
0111 011111 100101 二進制的 77E5
1110XXXX 10XXXXXX 10XXXXXX 模版(上表第三行)
11100111 10011111 10100101 代入模版
E 7 9 F A 5
這就是將 U+77E5 按照 UTF-8 編碼爲字節序列 E79FA5 的過程。反之亦然。

  1. 內存空間的考覈。

    • 問修改前後info的id是否改變

    • 問修改前後info[‘July’][‘hobbies’]的id是否改變

      info={
      	'eee':{'pwd':'123','hobbies':['play','music','read']},
      	'July':{'pwd':'1234','hobbies':['music','read']},
      	'www':{'pwd':'135','hobbies':['read',]},
      }
      
      info['aaa']['hobbies'].append('play')
      

答案: 不變,因爲是字典;不變因爲是列表。

  1. 切割字符串s = “wewewcity"爲"wewew”,“city”(編程)

    答案:
       print(s[:5])
       print(s[-4:])      
    
  2. 猜年齡遊戲。假如女主角年齡爲26歲,猜多少都給提示,共可以才3次。


答案:
count = 0
age = 26

while count < 3:

    user_guess = int(input("your guess:"))
    if user_guess == age :
        print("恭喜你答對了,可以抱得傻姑娘回家!")
        break
    elif user_guess < age :
        print("try bigger")
    else :
        print("try smaller")

    count += 1
  1. 求1~100間所有偶數的和(亦可奇數和,使用while循環寫)。

    答案:
    1,
      count = 0
      for i in range(1, 100):
          if i % 2 == 0:
              count += i
      print(count)  
    
    2,
      count = 0
      for i in range(0, 1002):
              count += i
      print(count)
    
    3sum([i for i in range(1100) if i%2==0])  
    
  2. 從鍵盤接收一百分制成績(0100),要求輸出其對應的成績等級AE。其中,90分以上爲’A’,8089分爲’B’,7079分爲’C’,60~69分爲’D’,60分以下爲’E’。(編程題)

    答案:
     p = int(input("請輸入分數:"))
     if p >= 90:
         print("A")
     elif 80 <= p and p <= 89:
         print("B")
     elif 70 <= p and p <= 789:
         print("C")
     elif 60 <= p and p <= 69:
         print("D")
     else:
         print("E")
    

Python基礎 C卷

  1. "is"和“==”的區別

is是對比地址,==是對比值

  1. 聲明變量注意事項有哪些?(口述)

答案:
模塊名,包名 :小寫字母, 單詞之間用戶_分割。
類名:首字母大寫。
全局變量: 大寫字母, 單詞之間用戶_分割。
普通變量: 小寫字母, 單詞之間用戶_分割。
函數: 小寫字母, 單詞之間用戶_分割。
實例變量: 以_開頭,其他和普通變量一樣 。
私有實例變量(外部訪問會報錯): 以__開頭(2個下劃線),其他和普通變量一樣 。
專有變量: __開頭,__結尾,一般爲python的自有變量(不要以這種變量命名)。

  1. 深淺copy-引用和copy(),deepcopy()的區別。

答案:
深淺拷貝,即可用於序列,也可用於字典

>>> import copy

>>> X = copy.copy(Y)      #淺拷貝:只拷貝頂級的對象,或者說:父級對象

>>> X = copy.deepcopy(Y)  #深拷貝:拷貝所有對象,頂級對象及其嵌套對象。或者說:父級對象及其子對象
  1. 各個數據類型分別是有序的?還是無序的?

    答案:
    可變類型: list
    不可變類型:number, string,tuple, set

    區分: 是否可以被hash, 可變類型是不可以被hash的

  2. 輸入一年份,判斷該年份是否是閏年並輸出結果。(該程序可以重複使用 使用while True)(編程題)
    注:凡符合下面兩個條件之一的年份是閏年。 (1) 能被4整除但不能被100整除。 (2) 能被400整除。

while True:
   year= int(input('加班那年是閏年嗎'))
   if (year%4==0 and year%4 !=100) or year%400==0:
       print("你在閏年加班")
   else:
       print('你加班但並不在閏年')
  1. 有如下字符串:n = “不再加班”(編程題)

將字符串轉換成unicode的字符編碼,再將轉換的字節重新轉換爲utf-8的字符編碼

n = "不再加班"
new_unicode_n= n.encode()
print(new_unicode_n)
new_utf_n = new_unicode_n.decode()
print(new_utf_n)
  1. 將列表[‘workman’, ‘steven’, ‘egon’] 中的每一個元素使用 ‘_’ 連接爲一個字符串(編程)
答案1:
n=['workman', 'steven', 'egon']

m = ("_").join(n)
print(m)

答案2:
      s = ""
      n = ['workman', 'steven', 'egon']
      for i in n:
          s += i
      print("_".join(s))
  1. 自定義兩個集合,並求交集,合集,差集。(編程)

    a = {1,2,3,4,5}
    b = {2,4,6,8,10}

    數學符號 python符號 代表含義
    - 或 \ - 差級,相對補集
    & 交集
    != 不等於
    == 等於
    in 是成員關係
  # 交集
      print(a & b)
  # 並集
      print(a | b)
  # 差集
      print(a-b)
  1. 求100以內不能被3整除的所有數,並把這些數字放在列表sum3=[]裏,並求出這些數字的總和和平均數。
   答案1:
     sum3 = []
     count = 0
     for i in range(101):
         if i % 3 != 0:
             sum3.append(i)
             count += i
     print(count)
     print(count/3)
答案2:
sum3 = []
total = 0
for i in range(0,101):
   if i%3 != 0:
       total+=i
       sum3.append(i)

print(total)
print(total/len(sum3))
  1. 根據字典內容打印出下面的形式
    可以不打印工整對齊的效果,主要是讓學員獲取key和value。
    {“Development”:“開發小哥”,“OP”:“運維小哥”,“Operate”:“運營小仙女”,“UI”:“UI小仙女”}
    效果如下:

    1. 刪除了UI
    2. 修改了Operate
      Development --- 開發小哥
      OP          --- 運維小哥
      Operate     --- 小仙女
    
  2. 假設一年期定期利率爲3.25%,計算一下需要過多少年,一萬元的一年定期存款連本帶息能翻番?

    答案:
      money = 10000
      rate = 0.0325
      years = 0
      while money <= 20000:
          years += 1
          money  = money * (1+rate)
      print(str(years))
    
  3. 對列表進行增刪改查(查可以是索引,值是否存在列表當中)。(編程)
    li = [‘alex’,‘egon’,‘wusir’,‘wen’,‘jing’]

    答案:
    li = ['alex', 'egon', 'wusir', 'wen', 'jing']
    
      >> 增加
    
          li.append("yuan")
          print(li)
      >> 刪除
    
          li.pop(0)
          li.remove("alex")
          del li[0]
    
      >> 修改
    
           li[3] = "li"
    
      >> 查詢
    
          print(li.index("egon"))
    
    

提高題

  1. 猜數遊戲。預設一個0~9之間的整數,讓用戶猜一猜並輸入所猜的數,如果大於預設的數,顯示“猜大了,小一點試試”;小於預設的數,顯示“猜小了,大一點試試”,如此循環,直至猜中該數,顯示“恭喜!你猜中了!
result = 6

flag = False
while flag==False:
    your_guess = int(input(''))
    if your_guess > result:
        print('猜大了,小一點試試')
        continue
    elif your_guess<result:
        print('猜小了,大一點試試')
        continue
    elif your_guess==result:
        print('恭喜你,猜中了')
        flag = True
print('Process end')
  1. 有四個數字:1、2、3、4,能組成多少個互不相同且無重複數字的三位數?各是多少?
    程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去 掉不滿足條件的排列。
參照方法:
count = 0
a = [1,2,3,4]
for i in a:
    for j in a:
        for k in a:
            if i!=j and j !=k and i !=k:
                count+=1
                print("{}{}{}".format(i,j,k))
print(count)
  1. 某個公司採用公用電話傳遞數據,數據是四位的整數,在傳遞過程中是加密的,加密規則如下:每位數字都加上5,然後用和除以10的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換。
while True:
   number = int(input("請輸入四位數的電話號碼:"))
   a = number1 = number // 1000
   b = number2 = number % 1000 // 100
   c = number3 = number % 100 // 10
   d = number4 = number % 10
   number1 = (d + 5) % 10
   number2 = (c + 5) % 10
   number3 = (b + 5) % 10
   number4 = (a + 5) % 10
   num = number1 * 1000 + number2 * 100 + number3 * 10 + number4
   print(num)
  1. 求100以內的素數和。
#!/usr/bin/python
#-*- coding: UTF-8 -*-
lower = int(input("輸入區間最小值: "))
upper = int(input("輸入區間最大值: "))

for num in range(lower,upper + 1):
  # 素數大於 1
  if num > 1:
      for i in range(2,num):
          if (num % i) == 0:
              break
      else:
          print(num)

5 . 二進制,十進制,十六進制互相轉換(計算題使用計算器,別用編程的內置方法)
6. python2和python3的默認字符編碼是什麼?

python 2 ASCII; Python3 內存是unicode
7. 浮點數轉換整形。
a= 4.3333
b = int(a)
print(b)
  1. 計算"21days"字符串的長度。
       a= "21days"
        print(len(a))
  1. 元祖,列表,字典有沒有長度的限制?

目前python這些列表,字典和元祖是沒有長度限制的。但是他們會受到計算機內存的限制,發生crash。

  1. 集合的特性。

因爲集合中的元素是不可重複的,且無序的,所以不支持索引,切片,連接。
集合只支持成員操作符 迭代(for循環)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章