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

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

<1>
ถ้าต้องการแสดงคำอ่านของเลขหนึ่งตัวในตัวแปร d
ออกทางจอภาพ ต้องเติมอะไรลงแทน ??? และ ***
ของโปรแกรมข้างล่างนี้ ตามลำดับ
(ให้เลขที่อินพุตเป็น 1,2,3 หรือ 4 เท่านั้น)

s = "[1:one][2:two][3:three][4:four]"
d = input()
sidx = s.find(d)+ ???       # <----
eidx = s.find("]",sidx)
print(s[sidx: eidx+  *** ]) # <----

A) 2 กับ 0 
B) 2 กับ -1
C) 1 กับ -1
D) 0 กับ 0
E) ไม่มีข้อใดถูก
<2>
ให้โปรแกรม Python ชื่อ p.py มีบรรทัดเดียวคือ
 
print(open("p.py").readline().strip()) 

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

A) open("py.py").readline().strip()
B) readline().strip()
C) print(open("p.py").readline().strip()) 
D) โปรแกรมทำงานแล้วเกิด error 
E) ไม่สามารถสรุปได้ว่าจะแสดงอะไร
<3>
ข้อใดตรวจตัวแปร c ที่เก็บตัวพิมพ์เล็กตัวเดียวว่า
เป็น a, b, c, d หรือ e หรือไม่

A) if 'e' => c => 'a':
B) if c is in "abcde" :
C) if c == "abcde" :
D) if c.find("abcde") != -1 :
E) ไม่มีข้อใดถูก 
<4>
เมื่อโปรแกรมข้างล่างนี้ทำงาน จะแสดงผลอะไร
x = [1,2]+[3,4,5]*1000
print(x.pop(len(x)-5))

A) 3
B) 4
C) 1
D) 2
E) 5
<5>
ให้ 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) บรรทัด II
B) บรรทัด III 
C) บรรทัด IV
D) บรรทัด I
E) บรรทัด V
<6>
ข้อใดทำงานแล้วจะวนในวงวนไม่สิ้นสุด

A) a = 232
   while a != 0:
     a %= 13    
B) a = 232
   while a != 0:
     a -= 1
C) a = 232
   while a != 0:
     a //= 7
D) มีข้อที่ทำงานแล้วติดในวงวน 2 ข้อ 
E) ทุกข้อทำงานได้ไม่ติดในวงวน
<7>
ให้ d เป็น numpy array ขนาด 100x100 
ให้ N = d.shape[0] และ M = d.shape[1]
(สมมติว่าได้ import numpy as np แล้ว)

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

A) d[range(0,N,2), range(M)] = 0
B) d[np.arange(N)%2==0, np.arange(M)] = 0
C) d[1:-1:2] = [0]
D) d[::-2, ::] = 0 
E) ไม่มีข้อใดถูก
<8>
ฟังก์ชัน f มีรายละเอียดข้างล่างนี้

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

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

A) f([1,2,3], (4,5,6))
B) f(((1,),(2,), (3,)), (4,5,6)) 
C) f({123}, [456])
D) f(((1), (2), (3)), [4,5,6])
E) มีข้อที่ไม่เกิด error มากกว่า 1 ข้อ
<9>
ให้ x เป็น numpy array หนึ่งมิติเก็บจำนวนเต็ม
f(x) ในข้อใดคืนจริง เมื่อ x มีข้อมูลในที่ซ้ำกัน
เกิน 50% ของจำนวนข้อมูลทั้งหมด ถ้าไม่มีคืนเท็จ

(สมมติว่าได้ import numpy as np แล้ว)

A) มีข้อที่ทำได้ตามต้องการ 2 ข้อ 
B) def f(x):
     N = x.shape[0]
     y = np.array([x]).T
     m = np.max(np.sum(x==y, axis=0))
     return m > N/2
C) def f(x):
     N = x.shape[0]
     s = np.sum(x.dot(x.T),axis=0)
     m = np.max(s)
     return m > N/2
D) def f(x):
     N = x.shape[0]
     c = np.sum(x == sorted(x)[N//2])
     return c > N/2
E) ไม่มีข้อใดถูก
<10>
คำสั่งข้อใดมีโอกาสเกิด error ตอนทำงาน
(ตัวแปร b กับ c มีค่ากำหนดให้แล้ว)

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

c = dict()                # บรรทัดที่ 1
for e in input().split(): # บรรทัดที่ 2
  if e != [0,2,4,6,8] :   # บรรทัดที่ 3
    c[e] += 1             # บรรทัดที่ 4    
print(c)

A) บรรทัดที่ 4 
B) บรรทัดที่ 1
C) บรรทัดที่ 2
D) บรรทัดที่ 3
E) ทำงานได้ปกติ ไม่เกิด error
<12>
ข้อใดตั้งเป็นชื่อฟังก์ชันได้

A) _x_x_
B) __-__
C) 1_2_3
D) $_$_$
E) ไม่มีข้อใดถูก
<13>
ข้อใดมีค่าไม่ใกล้เคียงรากที่สองของ 100

A) pow(100, 0.5)
B) 100 ** 1/2 
C) 100 // 10
D) math.sqrt(100)
E) ใกล้เคียงทุกข้อ
<14>
ให้ d เป็น dict ที่มี 
- key เป็นรหัสลูกค้า
- value เก็บลิสต์ของชื่อเกมที่ลูกค้าคนนี้ได้ซื้อไปแล้ว

ข้อใดสร้าง s เป็น dict ที่มี 
- key เป็นชื่อเกม
- value เก็บเซตของรหัสลูกค้าทั้งหมดที่ได้ซื้อเกมนี้

A) s = {}
   x = [(k,e) for k in d for e in d[k]]
   for k,e in x: 
     s[e] = set()
   for k,e in x: 
     s[e].add(k)  
B) s = {}
   x = [(k,e) for k in d for e in d[k]]
   for k,e in x: 
     s[e].update(k)
C) s = {}
   for v in d.values:
     if v not in s: 
       s[v] = set()
     s[v].add(d[v])
D) s = dict([(d[k],k) for k in d])
E) ไม่มีข้อใดถูก
<15>
ให้ m เป็นจำนวนเต็ม
ข้อใดแทนเงื่อนไขว่า m เก็บเลขเดือนของ
เดือนที่มีชื่อลงท้ายด้วย ยน

A) 1<=m<=12 or m==4 or m==6 or m==9 or m==11
B) not(m%2==1 and 0<m<8 or m%2==0 and 7<m<13) and m!= 2 
C) m is in [4,6,9,11]
D) 0<m<13 and not(m!=4 or m!=6 or m!=9 or m!=11)
E) ถูกมากกว่า 1 ข้อ