การสอบปลายภาค: PART A

เขียนตอบแต่ละข้อเริ่มด้วยเลขข้อในรูปแบบ <เลขข้อ> เช่น
<1> E
<2>
<3> B
และอย่าลืมกด SUBMIT ด้วย (ส่งได้หลายครั้ง จะตรวจครั้งล่าสุด)

<1>
เมื่อโปรแกรมข้างล่างนี้ทำงาน จะแสดงผลอะไร
x = [[1,[2,[3,4]]],[5,[6,[7,8]]]]
print(x.pop(1)[1][1])

A) 7
B) 6
C) [3, 4]
D) 2
E) [7, 8]
<2>
เครื่องหมายคณิตศาสตร์ใดถูกทำเป็นลำดับที่ 3
ในนิพจน์ 4*5-2%(5+2)/32

A) *
B) +
C) % 
D) -
E) /
<3>
ข้อใดทำงานแล้วจะวนในวงวนไม่สิ้นสุด

A) a = 169
   while a != 0:
     a -= 2 
B) a = 169
   while a != 0:
     a %= 13
C) a = 169
   while a != 0:
     a //= 5
D) มีข้อที่ทำงานแล้วติดในวงวน 2 ข้อ 
E) ทุกข้อทำงานได้ไม่ติดในวงวน
<4>
ข้อใดตรวจตัวแปร c ที่เก็บตัวพิมพ์เล็กตัวเดียวว่า
เป็น v, w, x, y หรือ z หรือไม่

A) if c is in "vxwyz" :
B) if c.find("vwxyz") != -1 :
C) if c == "vwxyz" :
D) if 'v' =< c =< 'z' :
E) ไม่มีข้อใดถูก 
<5>
ให้โปรแกรม Python ชื่อ p.py มีบรรทัดเดียวคือ
 
print(open("p.py").readline().strip()) 

ถ้าสั่งโปรแกรมนี้ทำงานจะได้ผลอะไรทางจอภาพ

A) print(open("p.py").readline().strip()) 
B) open("py.py").readline().strip()
C) readline().strip()
D) โปรแกรมทำงานแล้วเกิด error 
E) ไม่สามารถสรุปได้ว่าจะแสดงอะไร
<6>
ให้ d เป็น dict มี
- คีย์ ชื่อจังหวัด, value เป็น dict ที่มี
  - คีย์ 'region', value เก็บชื่อย่อภาค
  - คีย์ 'population', value เก็บจำนวนประชากร
- ชื่อย่อภาคประกอบด้วย N, E, W, S, C, NE
นักเรียนคนหนึ่งเขียนฟังก์ชัน f(d) ข้างล่างนี้ มีหน้าที่
คืน dict ที่มีคีย์เป็นภาค, value เก็บจำนวนจังหวัดในภาค

def f(d):
  c = {'NE':0, 'C':0, 'N':0, \
       'E':0, 'W':0, 'S':0}
  for p in d:        
    r = d[p]['region']  # บรรทัด I
    for k in c:         # บรรทัด II
       if r in k:       # บรรทัด III
          c[r] += 1     # บรรทัด IV
          break         # บรรทัด V
  return c

หลังจากทดสอบการทำงานแล้ว พบว่า ได้คำตอบเกือบถูก
ถ้าจะปรับฟังก์ชันนี้ ด้วยจำนวนการแก้ไขคำสั่งให้น้อยสุด ๆ
เพื่อให้ทำงานได้ถูกต้อง ต้องแก้ไขที่บรรทัดใด

A) บรรทัด III 
B) บรรทัด I
C) บรรทัด IV
D) บรรทัด II
E) บรรทัด V
<7>
ให้ r เป็น dict ที่มี 
- key เป็นชื่อบริษัท 
- value เก็บมูลค่าสินทรัพย์ของบริษัท 
ข้อใดได้ชื่อบริษัทที่มีมูลค่าสินทรัพย์มากสุดสักหนึ่งบริษัท

A) max([(v,r[v]) for v in t.values()])[1]
B) sorted([(v,k) for k,v in r])[-1][1]
C) max(r.items())[0]
D) max([(k[1],k[0]) for k in r.items()])[1] 
E) มีข้อถูกมากกว่า 1 ข้อ
<8>
ให้ y เก็บเลขปี ค.ศ. เดือน ก.พ. มี 29 วัน เมื่อ
- y หารด้วย 4 ลงตัว แต่หารด้วย 100 ไม่ลงตัว
- ยกเว้นกรณีที่ y หารด้วย 400 ลงตัว ก็มี 29 วัน

คำสั่งใดที่หาจำนวนวันในเดือนกุมภาพันธ์
ของปี ค.ศ. y ไม่ถูกต้อง

A) d = 28
   if y%400==0 or y%4==0 and y%100!=0:
     d = 29
B) d = 29
   if (y%4!=0 or y%100==0) and y%400!=0:
     d = 28
C) if (y%4==0 and y%100!=0) or y%400==0:
     d = 29
   else:
     d = 28
D) มีถูก 2 ข้อ ผิด 1 ข้อ  
E) ข้อ A, B และ C ถูกหมด 
<9>
คำสั่งข้อใดมีโอกาสเกิด error ตอนทำงาน
(ตัวแปร b กับ c มีค่ากำหนดให้แล้ว)

A) a = b * c
B) a = b - c
C) a = b + c
D) a = b / c
E) มีโอกาสเกิด error ได้ทุกข้อ 
<10>
ผู้เขียนตั้งใจให้โปรแกรมข้างล่างนี้ รับสตริงทางคีย์บอร์ด
แล้วนับว่า สตริงนั้นมีเลขคู่อย่างละตัวกี่ตัว  
เมื่อนำโปรแกรมนี้ไปทำงานแล้วป้อน 12345 เป็นอินพุต
จะเกิด error ที่คำสั่งในบรรทัดใด

c = dict()                  # บรรทัดที่ 1
for e in input().split():   # บรรทัดที่ 2
  if e not in [1,3,5,7,9] : # บรรทัดที่ 3
    c[e] = c[e] + 1         # บรรทัดที่ 4
print(c)

A) บรรทัดที่ 4 
B) บรรทัดที่ 2
C) บรรทัดที่ 3
D) บรรทัดที่ 1
E) ทำงานได้ปกติ ไม่เกิด error
<11>
ให้ d เป็น numpy array ขนาด 111x111 
ให้ N = d.shape[0] และ M = d.shape[1]
(สมมติว่าได้ import numpy as np แล้ว)

ข้อใดทำให้ข้อมูลในแถวแนวนอนอินเด็กซ์เลขคู่ทั้งหมด
มีค่าเป็น 0 ทั้งแถว

A) d[-2::-2, ::] = 0 
B) d[np.arange(N)%2==1, np.arange(M)] = 0
C) d[range(1,N,2), range(M)] = 0
D) d[0:-1:2] = [0]
E) ไม่มีข้อใดถูก
<12>
ข้อใดตั้งเป็นชื่อฟังก์ชันได้

A) _o_o_
B) True
C) o-o-o
D) 1a2b3
E) ไม่มีข้อใดถูก
<13>
ฟังก์ชัน f มีรายละเอียดข้างล่างนี้

def f(x, y):
    for e in x:
        y += e
    return y

คำสั่งในข้อใดทำงานแล้วไม่เกิด error

A) f('123', '456') 
B) f({1,2,3}, {4,5,6})
C) f(123, 456)
D) f([1,2,3], [1,2,3])
E) มีข้อที่ไม่เกิด error มากกว่า 1 ข้อ
<14>
ให้ x เป็น numpy array หนึ่งมิติเก็บจำนวนเต็ม
ฟังก์ชันใดคืน mode ของข้อมูลใน x
mode คือข้อมูลที่ปรากฏเป็นจำนวนครั้งมากสุดใน x
ถ้ามีตัวที่เป็น mode หลายตัว ให้คืนตัวซ้ายสุด
(สมมติว่าได้ import numpy as np แล้ว)

A) def mode(x):
     return np.max(np.sum(x.dot(x.T),axis=1))
B) def mode(x):
     t = x.reshape((x.shape[0],1))
     return np.max(np.sum(x==t, axis=1))
C) def mode(x):
     t = x.reshape((x.shape[::-1]))
     return x[np.argmax(np.sum(x==t, axis=1))]
D) def mode(x):
     y = np.array([x]).T
     c = np.sum(x==y, axis=0)
     return x[np.argmax(c)] 
E) ไม่มีข้อใดถูก
<15>
หากนำเลขประจำตัวนิสิต 10 หลักของนิสิตจำนวนหนึ่ง
มาเรียงต่อกัน มีเครื่องหมาย : คั่นระหว่างเลขประจำตัว
เช่น "5937015921:5934847821:5938763221"
แล้วเก็บสตริงนี้ในตัวแปร IDs
  
ตัวเลือกในข้อใดสามารถหาว่า เลขประจำตัวที่เก็บในตัวแปร sid
ที่มีอยู่ใน IDs แน่ ๆ อยู่เป็นลำดับที่เท่าใดใน IDs 
(กำหนดให้ตัวซ้ายสุดคือ ลำดับที่ 1)

A) IDs.find(sid)%10
B) IDs.find(sid)//10+1
C) (IDs.find(sid)+11)//11 
D) IDs.find(sid)%11+1
E) ไม่มีข้อใดถูก