Try   HackMD

Python測驗-參考答案

tags: python

基本型態、運算子

  1. Python數值型態有哪4種?
    答:

    ​​​int, float, bool, complex
    
  2. 字串可以使用哪些算術運算子?
    答:

    ​​​+: 串接
    ​​​*: 重複字串
    
  3. 在字串裡可以使用什麼轉譯字來換行?
    答:

    ​​​​\n
    
  4. 何謂r字串?

    答:

    ​​​​r字串為raw,轉譯符號會被當成一般文字輸出
    
  5. Python有哪幾種格式化字串的方式?

    答:

    ​​​​C風格、str.format()、f字串
    
  6. 4 < 0的運算會產生甚麼結果?

    答:

    ​​​​False
    
  7. Python內如何使用註解?

    答:

    ​​​​#: 單行註解。
    ​​​​PYTHON本身不支援多行註解,但可以用 '''  多行的方式來包住想註解的區段,執行的時候會被忽略。
    
  8. 該怎麼去掉4.5的小數點? 請寫出程式碼。

    答:

    ​​​​int(4.5)
    
  9. 請用指派運算子寫出a = a + 99的精簡寫法。
    答:

    ​​​​​a += 99
    
  10. 何謂轉型? 請舉例以程式碼示範將字串轉型為整數。
    答:

    ​​​​轉型意指將某一個基本型態轉換成另一種基本型態。
    ​​​​
    ​​​​字串轉型為整數可以使用int()方法,例如:
    ​​​​to_str = int('99')
    

群集型態

  1. Python有哪4種群集型態?
    答:

    ​​​清單(list)
    ​​​集合(set)
    ​​​字典(dict)
    ​​​Tuple(tuple)
    
  2. 要如何取得['aaron', 'andy', 'abner']清單內的'abner'這筆資料? 請寫出程式碼。
    答:

    ​​​print(['aaron', 'andy','abner'][2])
    
  3. 該怎麼判斷某個元素是否存在於list當中?
    答:

    ​​​使用in判斷資料是否存在容器內
    
  4. a = {}會建立出甚麼群集型態?
    答:

    ​​​建立dict 型態
    
  5. 哪兩種方法可以取得dict內的值?
    答:

    ​​​get()與[]
    
  6. 要刪除tuple內某一筆資料有哪些方法?
    答:

    ​​​tuple內的資料無法刪除。
    
  7. a, b, c = (1, 2, 3)這是資料的pack還是unpack?
    答:

    ​​​unpack
    
  8. 如何用一行程式碼產生一個1~100之間偶數的list

    ​​​​[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
    

    答:

    ​​​print(list(range(0, 101, 2)))
    
  9. 如何取出下面set()所有的數字並加總後使用print()函式輸出。

    ​​​my_set = {28, 37, 16}
    

    答:

    ​​​my_set = {28, 37, 16}
    ​​​
    ​​​sum = 0
    ​​​for e in my_set:
    ​​​    sum += e
    ​​​    
    ​​​print(e)
    
  10. 有一個list為:['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'],請問:
    a. 如何使用切片得到:['b', 'd', 'f', 'h', 'j']的結果?
    答:

    ​​​​src = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
    ​​​​result = src[1::2]
    ​​​​print(result) 
    

    b. 如何使用索引切片得到:['i', 'j', 'k']的結果?
    答:

    ​​​​src = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
    ​​​​result = src[-3:]
    ​​​​print(result) 
    

    c. 如何使用索引切片得到: 'c-b-a'的結果?
    答:

    ​​​​src = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
    ​​​​result = '-'.join(src[2::-1])
    ​​​​print(result) 
    

    d. 如何使用索引切片得到:'kakakaka'的結果(搭配算術運算子)?
    答:

    ​​​​src = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
    ​​​​result = ''.join(src[::-10]) * 4
    ​​​​print(result) 
    

    k為最後一個值,a為第一個值。

  11. remove()方法和del都可以用來刪除list的一個元素,請問這兩個刪除元素的方式有什麼差別?
    答:

    ​​​​remove()傳入要刪除的元素值。
    ​​​​del 後面帶要刪除的元素索引。
    
  12. 有一個字串list為:data = ['aaron', 'andy', 'apple', 'amber', 'aaron', 'abner'],其中'aaron'出現了兩次,如何從該list中移除所有的'aaron'字串?
    答:

    ​​​​data = ['aaron', 'andy', 'apple', 'amber', 'aaron', 'abner']
    ​​​​
    ​​​​result = list(set(data))
    ​​​​result.remove('aaron')
    ​​​​
    ​​​​print(result)
    
  13. 有兩個list資料,一個為學生姓名,一個為對應的每個學生成績,請問該如何將這兩個list資料配對後合併成一個dictionary,例如:
    將:

    ​​​​names = ['aaron', 'andy', 'amber', 'apple', 'abner']
    ​​​​scores = [100, 90, 60, 80, 50]
    

    變成:

    ​​​​{'aaron': 100, 'andy': 90, 'amber': 60, 'apple': 80, 'abner': 50}
    

    答:

    ​​​​names = ['aaron', 'andy', 'amber', 'apple', 'abner']
    ​​​​scores = [100, 90, 60, 80, 50]
    ​​​​
    ​​​​result = dict(zip(names, scores))
    ​​​​
    ​​​​print(result)
    
  14. 如何用一行程式碼,就將data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]就將這個list的第一個植根最後一個值分別存放到firstlast變數當中?
    答:

    ​​​​data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    ​​​​first, *temp, last = data
    ​​​​
    ​​​​print(first, last)
    

    first將會是0,last為9

流程控制

  1. 請問break放在if裡面作用是什麼?
    答:

    ​​​條件成立離開迴圈
    
  2. 請問continue放在while裡面的作用是什麼?
    答:

    ​​​忽略迴圈剩下的程式碼,直接進行下一次的迴圈
    
  3. 請使用range()函式寫出可以產生0, 2, 4, 6, 8數字的程式碼。
    答:

    ​​​for i in range(0,9,2):
    ​​​   print(i,end=', ')
    
  4. 請問if內的程式碼為什麼一定要縮排?
    答:

    ​​​沒有縮排的話, 代表該程式碼不屬於if判斷式區塊內的程式碼。
    
  5. while迴圈可以做到的事的都可以使用for-in取代嗎?
    答:

    ​​​沒有辦法,for-in迴圈只能使用在迭代的情境,非迭代時無法使用for-in。
    
  6. 請問else這個關鍵字的用途是什麼?
    答:

    ​​​與if一起使用,當所有if/elif條件式都不成立時,要進行的程式
    
  7. 如何判斷一個數字是不是偶數?
    答:

    ​​​此數除以2後,餘數為0,表示這是一個偶數數字
    
  8. 如果要寫出一個完整的九九乘法表,會需要幾層的迴圈?
    答:

    ​​​兩層
    
  9. Python有哪幾種迴圈?
    答:

    ​​​while迴圈, for in 迴圈
    
  10. 寫一個程式,將['aaron', 'apple', 'amanda']內的每個元素顯示到畫面上,並在每個元素前面顯示他的索引值。
    輸出範例:

    ​​​​0: aaron
    ​​​​1: apple
    ​​​​2: amanda
    

    答:

    ​​​​data = ['aaron', 'apple', 'amanda']
    ​​​​
    ​​​​for e in enumerate(data):
    ​​​​    print(f'{e[0]}: {e[1]}')
    
  11. 請問下面迴圈的print()會執行幾次?

    ​​​​i = 0
    ​​​​j = 100
    ​​​​while i < j:
    ​​​​   if i % 10 == 0:
    ​​​​      break
    ​​​​   print(i)
    

    答:

    ​​​​0次
    
  12. Python內建什麼函式可以算list內數值資料的加總?
    答:

    ​​​​可以使用sum()函式
    
  13. 何謂迭代?
    答:

    ​​​​一筆一筆取出群集資料,例如:for in迴圈,群集有多少筆資料就跑幾次
    
  14. 請使用range()寫出可以產生[-10,-9,-8,-7,-6]的list。
    答:

    ​​​​range(-10, -5)
    
  15. 將下面程式碼改用「for Comprehension」的寫法:

    ​​​​data = [1, 2, 3, 4]
    ​​​​result = []
    ​​​​
    ​​​​for item in data:
    ​​​​  result.append(item ** 2)
    

    答:

    ​​​​data = [1, 2, 3, 4]
    ​​​​result = [item ** 2 for item in data]
    ​​​​
    ​​​​print(result)
    
  16. 如何在終端機畫面上輸出如下的圖案?

    ​​​​*
    ​​​​**
    ​​​​***
    ​​​​****
    ​​​​*****
    

    答:

    ​​​​for i in range(1, 6):
    ​​​​    for j in range(0, i):
    ​​​​     print('*', end='')
    ​​​​    print('')
    

函式

  1. 可以用來將兩個list裡兩配對成一個新的集合的函式叫做什麼?
    答:

    ​​​zip()函式
    
  2. 將一字串「Hello Python」裡的兩個單字之間改為「-」變成「Hello-Python」來輸出,請問該怎麼做?
    答:

    ​​​result = '-'.join('Hello Python'.split(' '))
    ​​​
    ​​​print(result)
    
  3. import random的import關鍵字用意是什麼?
    答:

    ​​​如果想要引用其他module裡面的function、class、variable。就需要使用import的方式引用進來。
    
  4. print()函式用來輸出資料到終端機畫面,那如果要從終端機接收使用者輸入該使用什麼函式?
    答:

    ​​​input()
    
  5. 實現一個swap()函式,呼叫後可以交換兩個變數內的資料,例如:

    ​​​a = 9
    ​​​b = 3
    ​​​
    ​​​a, b = swap(a, b)
    ​​​
    ​​​print(a, b)
    

    會輸出:

    ​​​3, 9
    

    答:

    ​​​def swap(a, b):
    ​​​    return b, a
    ​​​
    ​​​a = 9
    ​​​b = 3
    ​​​
    ​​​a, b = swap(a, b)
    ​​​
    ​​​print(a, b)
    
  6. 請問下面程式碼最後會在終端機上輸出什麼?

    ​​​src = 'a' * 5
    ​​​tar = list(set('rrr'.split()))
    ​​​meta = ['o', 'n']
    ​​​
    ​​​print(''.join(list(src) * 2 + tar + meta))
    

    答:

    ​​​aaaaaaaaaarrron
    

    備註:
    字串的乘法表示將字串內容重複。

  7. 請問下面程式碼哪裡有語法上的錯誤?該如何修改?

    ​​​def process(a = 10, b = 100, final):
    ​​​    a **= 2
    ​​​    b //= 2
    ​​​    
    ​​​    return a + b + final
    ​​​
    ​​​cal = process(a=8, 10)
    ​​​
    ​​​print(cal)
    

    答:

    ​​​def process(a = 10, b = 100, final = 0):
    ​​​   a **= 2
    ​​​   b //= 2
    ​​​ 
    ​​​   return a + b + final
    ​​​
    ​​​cal = process(a=8, b=10)
    ​​​
    ​​​print(cal)
    
    1. 預設參數的右邊所有參數都必須是預設參數,所以final必須有預設值。
    2. 10也必須指定參數名稱。
  8. 何謂一級函式?
    答:

    ​​​函式可以像變數一樣被傳遞。
    
  9. 當你看見下面函式定義時,會覺得該函式的功用是什麼?

    ​​​def run():
    ​​​    pass
    

    答:

    ​​​該函式功能尚未實作。
    
  10. 寫一函式total(),可以接受不限定數量的intlistsettuple參數,加總全部listsettuple內的整數後回傳結果,例如:
    範例ㄧ:

    ​​​​print(total(1, 2, 3, 4))
    

    會輸出:

    ​​​​10
    

    範例二:

    ​​​​a = 9
    ​​​​b = [1, 2]
    ​​​​c = (3, 4)
    ​​​​print(total(a, b, c))
    

    會輸出:

    ​​​​19
    

    範例三:

    ​​​​a = (1, 2)
    ​​​​b = {3, 4, 6}
    ​​​​c = 8
    ​​​​d = [10, 12]
    ​​​​result = total(a, b, c, d)
    ​​​​
    ​​​​print(result)
    

    會輸出:

    ​​​​46
    

    答:

    ​​​​def total(*vars):
    ​​​​    result = 0
    ​​​​
    ​​​​    for v in vars:
    ​​​​        if isinstance(v, int):
    ​​​​            result += v
    ​​​​        elif isinstance(v, list) or isinstance(v, set) or isinstance(v, tuple):
    ​​​​            for i in v:
    ​​​​                result += i
    ​​​​            else:
    ​​​​                print(str(v) + '為無效值。')
    ​​​​
    ​​​​    return result
    
  11. 下面程式碼有幾個錯誤的地方?並指出來該怎麼修改:

    ​​​​import random
    ​​​​
    ​​​​1_data = input()
    ​​​​2_data = random.randint(0, 2)
    ​​​​
    ​​​​if 1_data = 2_data
    ​​​​    print(猜對了)
    ​​​​else
    ​​​​    print(猜錯了)
    

    答:

    ​​​​import random
    ​​​​
    ​​​​data_1 = input()
    ​​​​data_2 = random.randint(0, 2)
    ​​​​
    ​​​​if data_1 == data_2:
    ​​​​    print('猜對了')
    ​​​​else:
    ​​​​    print('猜錯了')
    
    1. 變數名稱第一個字元不可以是數字。
    2. ifelse 後面都了冒號。
    3. 判斷是不是相等需要兩個「=」號。
    4. 字串兩邊需要加上單引號或雙引號。
  12. 下面程式碼最後執行結果total會輸出什麼?

    ​​​​def result(a, b = 4):
    ​​​​   return a * b
    ​​​​
    ​​​​c1 = 10
    ​​​​c2 = 8
    ​​​​
    ​​​​result = (c1 + c2) ** 2
    ​​​​
    ​​​​total = result(c1, c2)
    ​​​​
    ​​​​print(total)
    

    答:

    ​​​​會出現「TypeError: 'int' object is not callable」錯誤訊息,因為result函式被後面的「result = (c1 + c2) ** 2」改成int了,所以再去呼叫會失敗。
    

類別與物件

  1. 請問lambda語法用來做什麼事情?
    答:

    ​​​將原本需要多行才能執行的程式碼,直接用一行語法完成
    
  2. 請將下面for迴圈改成一行寫法:

    ​​​a = []
    
    ​​​for e in [99, 88, 77]:
    ​​​   a.append(e - 10)
    ​​​print(a)
    
    
    ​​​print([e-10 for e in [99, 88, 77]])
    
  3. 請將下面判斷式改成一行寫法:

    ​​​import random
    ​​​ 
    ​​​a = int(input('請輸入一個數字:'))
    
    ​​​if a == random.randint(0, 1):
    ​​​  print('猜對了')
    ​​​else:
    ​​​  print('猜錯了')
    
    ​​​import random
    
    ​​​print('猜對了' if int(input('請輸入一個數字:')) == random.randint(0, 1) else '猜錯了')
    
  4. 類別與物件有何不同?

    ​​​類別,一個設計圖或是輪廓
    
    ​​​透過類別(Class)建立的實體稱為物件
    
  5. 何謂建構式?

    ​​​是一種方法,可以將該類別的初始化流程都定義在裡面,該方法在建立物件的時候會自動被呼叫
    
  6. 該怎麼呼叫__init__()這個方法?

    ​​​_init_()是建構式,不用呼叫它,它是Python內建特殊意義的方法,其在物件建立會自動被呼叫
    
  7. __str__()有什麼功用?

    ​​​透過定義__str__()方法,可以在該物件透過呼叫str()函式時輸出自訂的字串
    
  8. 有一個類別叫Zoo,請問該如何建立該物件,請以程式碼示範。

    ​​​myzoo = Zoo()
    
  9. 何謂一級函式?

    ​​​函式可以像變數一樣被傳遞
    
  10. 有一個lambda函式如下:

    ​​​​lambda data: print("Sending: " + data)
    

    請問如何執行該lambda函式?

    ​​​​(lambda data: print("Sending: " + data))('功課')
    
  11. 請問:
    答:

    ​​​​def show(self, n):
    ​​​​   return n * n
    

請問呼叫該方法時,需要傳入幾個參數? 為什麼?
需要一個參數,self代表物件本身,會自動由python直譯器傳入。

  1. 何謂物件屬性?該如何建立?

    ​​​​用來存放物件的資料。
    

    答:

    ​​​​object_name.attribute_name = value
    
  2. 請問下面程式碼會有輸出什麼到畫面上?

    ​​​​  print(sum([e % 2 for e in [35, 40, 28, 11] if False]))
    

    答:

    ​​​​  0
    
  3. 請問下面語法有什麼問題?

    ​​​​  (lambda n1, n2: n1 + n2, n1 - n2, n1 * n2, n1 / n2)(4, 2)
    

    答:

​​​    如果回傳多個值,必須明確使用小括號包圍住。
  1. 請問單行if語法在使用上有何限制?

    答:

    ​​​​   不可以使用指派運算子和算術指派運算子
    
  2. 請問單行for+if的語法格式為何?

    答:

    ​​​​[運算式 for 變數 in 群集 if 條件運算式]