เขียนตอบแต่ละข้อเริ่มด้วยเลขข้อในรูปแบบ <เลขข้อ>(ต้องมีเครื่องหมายน้อยกว่าทางซ้าย และมากกว่าขวาของเลขข้อ) ตามด้วยคำตอบของข้อนั้นกี่บรรทัดก็ได้ เช่น
<1> E
<2> isEven

<3>
def f(x):
  if x < 0: return
  return x**2
และอย่าลืมกด SUBMIT ด้วย (ส่งได้หลายครั้ง จะตรวจครั้งล่าสุด)

<1>
จงเขียนคำสั่งแสดงข้อความสองบรรทัดข้างล่างนี้ทางจอภาพ

หากข้าพเจ้าทุจริตหรือช่วยผู้อื่นในการสอบ 
ขอให้ข้าพเจ้าฝันร้ายทุกวันคู่
<2>
ข้อใดตั้งเป็นชื่อฟังก์ชันได้

A) ___________ (****)
B) __-__-__-__
C) ._._._._._.
D) 2_3_4_5_6_7
E) ไม่มีข้อใดถูก
<3>
ข้อใดตั้งเป็นชื่อตัวแปรไม่ได้

A) for (****)
B) print
C) math
D) input
E) ตั้งเป็นชื่อไม่ได้หลายข้อ
<4>
คำสั่งข้อใดมีโอกาสเกิด error ตอนทำงาน
ให้ถือว่าตัวแปร b กับ c มีค่ากำหนดให้แล้ว

A) a = b + c
B) a = b / c
C) a = b - c
D) a = b * c
E) มีโอกาสเกิด error ได้ทุกข้อ  (****)
<5>
คำสั่งในข้อใดทำงานแล้วไม่เกิด error
ฟังก์ชัน f มีรายละเอียดแสดงข้างล่างนี้

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

A) f('123', '456')  (****)
B) f({1,2,3}, {4,5,6})
C) f([1,2,3], [1,2,3])
D) f(123, 456)
E) มีข้อที่ไม่เกิด error มากกว่า 1 ข้อ
<6>
ให้ m เป็นจำนวนเต็ม
ข้อใดแทนเงื่อนไขว่า m เก็บเลขเดือนของ
เดือนที่มีชื่อลงท้ายด้วย ยน

A) not(m%2==1 and 0<m<8 or m%2==0 and 7<m<13) and m!= 2  (****)
B) 1<=m<=12 or m==2 or m==4 or m==6 or m==9 or m==11
C) 0<m<13 and not(m!=2 and m!=4 and m!=6 and m!=9 and m!=11)
D) m is in [4,6,9,11]
E) ถูกมากกว่า 1 ข้อ
<7>
ข้อใดเป็นการเขียนนิพจน์บูลลีนที่ถูกต้อง 
เพื่อทดสอบว่า a เป็นจำนวนเต็มบวก 
มีค่าไม่เกิน 100 ที่มีค่าไม่ใช่ 10,11,12,13,14

A) 0 < a and a <= 100 and not (10 <= a and a <= 14)  (****)
B) 0 < a and a <= 100 or not (10 <= a <= 14)
C) 0 < a or a <= 100 and not (10 <= a or a <= 14)
D) 0 > a and a >= 100 and not (10 >= a and a <= 14)
E) ไม่มีข้อใดถูก
<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>
เครื่องหมายคณิตศาสตร์ใดถูกทำเป็นลำดับที่ 4
ในนิพจน์ 4*5-2%(5+2)/32

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

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

A) *
B) -  (****)
C) %
D) +
E) /
<10>
เมื่อโปรแกรมข้างล่างนี้ทำงาน จะแสดงผลอะไร
x = [1,2]+[3,4,5]*1000
print(x.pop(len(x)-5))

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

A) 2
B) [3, 4]
C) 6
D) 7
E) [7, 8] (****)
<11>
พิจารณาโปรแกรมข้างล่าง ข้อใดเป็นเท็จ 

filename = input('Enter a file name: ') 
myfile = open(filename)
text = myfile.readline()
print(text)

A) แฟ้มที่เปิดในบรรทัดที่ 2 สามารถอ่านได้อย่างเดียว
B) ถ้าไม่พบแฟ้มขณะเปิดแฟ้มในบรรทัดที่ 2 
   ระบบจะสร้างแฟ้มใหม่  (****)
C) ถ้า filename เก็บสตริง "data.txt" 
   แฟ้ม data.txt ต้องปรากฏอยู่ในโฟลเดอร์เดียวกับโปรแกรมนี้ 
   จึงจะเปิดแฟ้มได้
D) เมื่อทำคำสั่งที่ 3 ตัวแปร text จะเก็บสตริงเสมอ
E) ทุกข้อเป็นจริงหมด
<12>
ให้ x เก็บจำนวนเต็ม จงเขียนคำสั่งแสดงเลขหลักสิบใน x
ถ้าไม่มีเลขที่หลักนี้ ก็แสดง 0
<12>
ให้ x เก็บจำนวนเต็ม จงเขียนคำสั่งแสดงเลขหลักร้อยใน x
ถ้าไม่มีเลขที่หลักนี้ ก็แสดง 0
<12>
ให้ x เก็บจำนวนเต็ม จงเขียนคำสั่งแสดงเลขหลักพันใน x
ถ้าไม่มีเลขที่หลักนี้ ก็แสดง 0
<12>
ให้ x เก็บจำนวนเต็ม จงเขียนคำสั่งแสดงเลขหลักหมื่นใน x
ถ้าไม่มีเลขที่หลักนี้ ก็แสดง 0
<12>
ให้ x เก็บจำนวนเต็ม จงเขียนคำสั่งแสดงเลขหลักแสนใน x
ถ้าไม่มีเลขที่หลักนี้ ก็แสดง 0
<13>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<13>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<13>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<13>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<13>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<13>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<14>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<14>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<14>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<14>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<14>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<14>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<15>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<15>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<15>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<15>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<15>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<15>
จงเขียนคำสั่งที่ทำงานตาม flowchart ข้างล่างนี้
<16>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ (มีตัวแปรทุกตัวให้ใช้แล้ว)
<16>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ (มีตัวแปรทุกตัวให้ใช้แล้ว)
<16>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ (มีตัวแปรทุกตัวให้ใช้แล้ว)
<16>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ (มีตัวแปรทุกตัวให้ใช้แล้ว)
<16>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ (มีตัวแปรทุกตัวให้ใช้แล้ว)
<16>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ (มีตัวแปรทุกตัวให้ใช้แล้ว)
<17>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ (มีตัวแปรทุกตัวให้ใช้แล้ว)
<17>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ (มีตัวแปรทุกตัวให้ใช้แล้ว)
<17>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ (มีตัวแปรทุกตัวให้ใช้แล้ว)
<17>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ (มีตัวแปรทุกตัวให้ใช้แล้ว)
<17>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ (มีตัวแปรทุกตัวให้ใช้แล้ว)
<17>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ (มีตัวแปรทุกตัวให้ใช้แล้ว)
<18>
ฟังก์ชัน f(x) ข้างล่างนี้ 
รับจำนวนเต็มบวก x คืนลิสต์จำนวนเฉพาะต่าง ๆ 
ที่เป็นตัวประกอบของ x เช่น f(63) คืน [3,3,7]
จงเติมคำสั่งแทนที่ 1111 และ 2222
เพื่อให้ f ทำงานถูกต้อง

def f(x):
  fac = []
  k = 2
  while 1111 :    # <------
    while 2222 :  # <------
      x = x//k
      fac.append(k)
    k += 1
  return fac
Solution:
1111 คือ k <= x 
2222 คือ x%k == 0
<19>
จงเขียนฟังก์ชัน f(x) ที่รับ x เป็นลิสต์เก็บ tuples 
แต่ละ tuple มีสองช่องเก็บสตริงทั้งสองช่อง

ผลลัพธ์ที่ f คืนคือลิสต์ที่มีข้อมูลเหมือน x
แต่เรียงลำดับจากน้อยไปมาก (ซ้ายไปขวา) 
ตามเงื่อนไขดังนี้

- เรียงน้อยไปมากตามจำนวนตัวสระอังกฤษที่มีซ้ำทั้งใน
  สตริงสองตัวใน tuple (ถ้าสระตัวเดียวกันมีซ้ำหลายครั้ง
  ให้นับครั้งเดียว)

- ถ้าจำนวนนับในข้อที่แล้วเท่ากัน 
  ให้เรียงตามลำดับที่ปรากฎใน x

- ให้ถือว่า ไม่มีตัวอักษรพิมพใหญ่ในสตริงเลย

เช่น 
x = [('au','ua'),('ede','ee'),('aa','xa')]
ผลคือ [('ede','ee'),('aa','xa'),('au','ua')]
เพราะ 
x[0] มี a กับ u เป็นตัวซ้ำ, x[1] มี e เป็นตัวซ้ำ และ 
x[2] มี a เป็นตัวซ้ำ x[1] กับ x[2] มีจำนวนซ้ำเท่ากัน 

แต่ x[1] อยู่ทางซ้ายของ x[2] ใน x 
ดังนั้น x[1] จึงต้องอยู่ทางซ้ายของ x[2] ในผลลัพธ์
<19>
จงเขียนฟังก์ชัน f(x) ที่รับ x เป็นลิสต์เก็บ tuples 
แต่ละ tuple มีสองช่องเก็บสตริงทั้งสองช่อง

ผลลัพธ์ที่ f คืนคือลิสต์ที่มีข้อมูลเหมือน x
แต่เรียงลำดับจากน้อยไปมาก (ซ้ายไปขวา) 
ตามเงื่อนไขดังนี้

- เรียงน้อยไปมากตามจำนวนตัวเลขที่มีซ้ำทั้งใน
  สตริงสองตัวใน tuple (ถ้าตัวเลขตัวเดียวกันมีซ้ำ
  หลายครั้ง ให้นับครั้งเดียว)

- ถ้าจำนวนนับในข้อที่แล้วเท่ากัน 
  ให้เรียงตามลำดับที่ปรากฎใน x

เช่น 
x = [('12','21'),('8d8','88'),('66','x6')]
ผลคือ [('8d8','88'),('66','x6'),('12','21')]
เพราะ 
x[0] มี 1 กับ 2 เป็นตัวซ้ำ, x[1] มี 8 เป็นตัวซ้ำ และ 
x[2] มี 6 เป็นตัวซ้ำ x[1] กับ x[2] มีจำนวนซ้ำเท่ากัน 

แต่ x[1] อยู่ทางซ้ายของ x[2] ใน x 
ดังนั้น x[1] จึงต้องอยู่ทางซ้ายของ x[2] ในผลลัพธ์
<19>
จงเขียนฟังก์ชัน f(x) ที่รับ x เป็นลิสต์เก็บ tuples 
แต่ละ tuple มีสองช่องเก็บสตริงทั้งสองช่อง

ผลลัพธ์ที่ f คืนคือลิสต์ที่มีข้อมูลเหมือน x
แต่เรียงลำดับจากน้อยไปมาก (ซ้ายไปขวา) 
ตามเงื่อนไขดังนี้

- เรียงน้อยไปมากตามจำนวนสระอังกฤษในสตริงทั้งสอง
  ของ tuple (ถ้ามีสระซ้ำหลายตัว ให้นับครั้งเดียว)

- ถ้าจำนวนนับในข้อที่แล้วเท่ากัน 
  ให้เรียงตามลำดับที่ปรากฎใน x

- ให้ถือว่า ไม่มีตัวอักษรพิมพใหญ่ในสตริงเลย

เช่น 
x = [('aq','ae'),('ax','xsa'),('ai','sia')]
ผลคือ [('ax','xsa'),('aq','ae'),('ai','sia')]
เพราะ 
x[0] มี a กับ e, x[1] มี a และ x[2] มี a กับ i
x[0] กับ x[2] มีจำนวนสระเท่ากัน 

แต่ x[0] อยู่ทางซ้ายของ x[2] ใน x 
ดังนั้น x[0] จึงต้องอยู่ทางซ้ายของ x[2] ในผลลัพธ์
<19>
จงเขียนฟังก์ชัน f(x) ที่รับ x เป็นลิสต์เก็บ tuples 
แต่ละ tuple มีสองช่องเก็บสตริงทั้งสองช่อง

ผลลัพธ์ที่ f คืนคือลิสต์ที่มีข้อมูลเหมือน x
แต่เรียงลำดับจากน้อยไปมาก (ซ้ายไปขวา) 
ตามเงื่อนไขดังนี้

- เรียงน้อยไปมากตามจำนวนตัวเลขในสตริงทั้งสอง
  ของ tuple (ถ้ามีตัวเลขซ้ำหลายตัว ให้นับครั้งเดียว)

- ถ้าจำนวนนับในข้อที่แล้วเท่ากัน 
  ให้เรียงตามลำดับที่ปรากฎใน x

เช่น 
x = [('1x','21'),('4x','qs4'),('25','5i2')]
ผลคือ [('4x','qs4'),('1x','21'),('25','5i2')]
เพราะ 
x[0] มี 1 กับ 2, x[1] มี 4 และ x[2] มี 2 กับ 5
x[0] กับ x[2] มีจำนวนตัวเลขเท่ากัน 

แต่ x[0] อยู่ทางซ้ายของ x[2] ใน x 
ดังนั้น x[0] จึงต้องอยู่ทางซ้ายของ x[2] ในผลลัพธ์
<20>
จงเขียนฟังก์ชัน f(x) ที่รับ x เป็นจำนวนเต็ม
แล้วคืนว่ามีตัวเลข (digit) กี่ตัวใน x ที่เป็น
จำนวนคู่ เช่น f(123402) คืน 4 
เพราะมีเลข 2, 4, 0 และ 2 เป็นจำนวนคู่
<20>
จงเขียนฟังก์ชัน f(x) ที่รับ x เป็นจำนวนเต็ม
แล้วคืนว่ามีตัวเลข (digit) กี่ตัวใน x ที่เป็น
จำนวนคี่ เช่น f(12399) คืน 4 
เพราะมีเลข 1, 3, 9 และ 9 เป็นจำนวนคี่
<20>
จงเขียนฟังก์ชัน f(x) ที่รับ x เป็นจำนวนเต็ม
แล้วคืนว่ามีตัวเลข (digit) กี่ตัวใน x ที่มีค่า
เกิน 5 เช่น f(1639958) คืน 4 
เพราะมีเลข 6, 9, 9 และ 8 มีค่าเกิน 5
<20>
จงเขียนฟังก์ชัน f(x) ที่รับ x เป็นจำนวนเต็ม
แล้วคืนว่ามีตัวเลข (digit) กี่ตัวใน x ที่มีค่า
น้อยกว่า 5 เช่น f(1633459) คืน 4 
เพราะมีเลข 1, 3, 3 และ 4 มีค่าน้อยกว่า 5
<21>
source code ของภาษา Python ใช้เครื่องหมาย #
เป็นตัวระบุจุดเริ่มต้นของ comment ในบรรทัด เราสามารถ
เขียน # เป็นตัวแรกของบรรทัด (อาจนำหน้าด้วยช่องว่าง)
เสมือนให้ทั้งบรรทัดเป็น comment

จงเขียนโปรแกรมอ่านแฟ้ม prog.py เพื่อตัดบรรทัดที่เป็น
comment ออกทั้งบรรทัด แล้วนำผลที่ได้บันทึกในแฟ้ม out.py

เช่น prog.py มี code คือ
# sample
f = input() # user input
for e in f:
   # a comment line
   print(e, "###")
   # done

จะได้ out.py มี code คือ
f = input() # user input
for e in f:
   print(e, "###")
<21>
แฟ้มหนึ่งชื่อ in.txt มีข้อความหลายบรรทัด
บรรทัดไหนที่ขึ้นต้นด้วย -- (อาจมีช่องว่างนำหน้า)
หมายความว่า ผู้สร้างแฟ้ม ไม่สนใจบรรทัดนั้น ตัดออกได้

จงเขียนโปรแกรมอ่านแฟ้ม in.txt เพื่อตัดบรรทัดที่
ขึ้นต้นด้วย -- ออกทั้งบรรทัด แล้วนำผลที่ได้บันทึกในแฟ้ม out.txt

เช่น in.txt มีข้อมูลคือ
this is the first line
-- second line is not important
   -- so is the third line
but this line is Okay

จะได้ out.txt มีข้อมูล คือ
this is the first line
but this line is Okay
<21>
แฟ้มหนึ่งชื่อ in.txt มีข้อความหลายบรรทัด
นาย A ไม่ชอบบรรทัดที่มีคำ (หรือส่วนของคำ) ว่า Mr.A

จงเขียนโปรแกรมอ่านแฟ้ม in.txt เพื่อตัดบรรทัดที่นาย A
ไม่ชอบออกทั้งบรรทัด แล้วนำผลที่ได้บันทึกในแฟ้ม out.txt

เช่น in.txt มีข้อมูลคือ
This is the story of my boss
whose name is Mr.A.
I call him "Mr.A The dude".
I don't like him.

จะได้ out.txt มีข้อมูล คือ
This is the story of my boss
I don't like him.
<22>
ฟังก์ชัน f(x) ข้างล่างนี้ทำอะไร อธิบายสั้น ๆ ไม่เกิน 30 คำ

def f(x):
    if len(x)==0: return 0
    y = sorted(x)
    c = y[0]
    k = 1
    m = 1
    for e in y[1:]:
        if e == c:
            k += 1
        else:
            m = max(m, k)
            c = e
            k = 1
    return m
Solution:
x มีตัวซ้ำกันมากสุดกี่ตัว
f([1,3,1,1,2,1,1]) -> 5
<22>
ฟังก์ชัน f(x) ข้างล่างนี้ทำอะไร อธิบายสั้น ๆ ไม่เกิน 30 คำ

def f(x):
    if len(x)==0: return 0
    c = x[0]
    k = 1
    m = 1
    for e in x[1:]:
        if c < e:
            k += 1
            if k > m: m = k
        else:
            k = 1
        c = e
    return m
Solution:
x มีตัวที่ติดกันมีค่าเพิ่มขึ้นเรื่อย ๆ มากสุดกี่ตัว
f([1,2,3,3,4,5,9,1]) --> 4
<22>
ฟังก์ชัน f(x) ข้างล่างนี้ทำอะไร อธิบายสั้น ๆ ไม่เกิน 30 คำ

def f(x):
    if len(x)==0: return 0
    c = x[0]
    k = 1
    m = 1
    for e in x[1:]:
        if c > e:
            k += 1
            if k < m: m = k
        else:
            k = 1
        c = e
    return m
Solution:
x มีตัวที่ติดกันมีค่าลดลงเรื่อย ๆ มากสุดกี่ตัว
f([9,4,3,8,6,5,4,1,9]) -> 5
<22>
ฟังก์ชัน f(x) ข้างล่างนี้ทำอะไร อธิบายสั้น ๆ ไม่เกิน 30 คำ

def f(x):
    if len(x)==0: return 0
    c = x[0]
    k = 1
    m = 1
    for e in x[1:]:
        if c == e:
            k += 1
            if k > m: m = k
        else:
            k = 1
        c = e
    return m
Solution:
x มีตัวที่ติดกันเท่ากันมากสุดกี่ตัว
f([2,3,1,1,1,2,2,2,2,1,3,1]) -> 4
<23>