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

เขียนตอบแต่ละข้อเริ่มด้วยเลขข้อในรูปแบบ <เลขข้อ> เช่น
<1>
x = input()
print(x, x*2, x*3)
<2>
<3> np.sum(x-y,axis=1)
<4>
หาว่าในลิสต์มีเลขคี่หรือไม่
และอย่าลืมกด SUBMIT ด้วย (ส่งได้หลายครั้ง จะตรวจครั้งล่าสุด)

<1>
ให้ x เป็นลิสต์ของจำนวนเต็ม
ฟังก์ชัน 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
<2>
จงเขียนฟังก์ชัน f(x, y)
- x และ y เป็น numpy array หนึ่งมิติเก็บจำนวนเต็ม
- ค่าใน x ไม่เท่ากันเลย และค่าใน y ก็ไม่เท่ากันเลย
- f(x,y) คืนจำนวนคู่ข้อมูลของ x กับ y 
  ที่ค่าใน x น้อยกว่าค่าใน y
- ห้ามใช้คำสั่ง for, while, comprehension, map, reduce

เช่น f(np.array([5,8]),np.array([3,9,6]))
    คืน 3 (คือคู่ 5 กับ 9, 5 กับ 6 และ 8 กับ 9)
<3>
จากคลาส A ข้างล่างนี้
class A:
  def __init__(self, x, y):
    self.a = x
    self.b = y

ต้องทำอย่างไรกับคลาส A 
เพื่อทำให้การทำงานคำสั่งข้างล่างนี้
a = A(2, 7)
a.action()
print(a.a, a.b)

จะแสดงข้างล่างนี้ทางจอภาพ
-1 0
<4>
จากคลาส A ข้างล่างนี้
class A:
  def __init__(self, x, y):
    self.a = x
    self.b = y
    self.c = x+y

ต้องทำอย่างไรกับคลาส A 
เพื่อทำให้การทำงานคำสั่งข้างล่างนี้
a = A(2, 7)
b = A(3, 4)
print(a, b)

จะแสดงข้างล่างนี้ทางจอภาพ
[7, 9] [4, 7]
<5>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ 
(ใช้ตัวแปร a, x, y และ z ได้เลย)
<6>
จงเขียนฟังก์ชัน f(x) ที่
คืนจริง ถ้าไม่มีตัวอังกฤษตัวพิมพ์ใหญ่ใน x เลย
ไม่เช่นนั้นคืนเท็จ
โดยให้เขียนเพียงบรรทัดเดียวในฟังก์ชัน 
ไม่มีการใช้เครื่องหมาย ; (semicolon)
<7>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 5,3,1 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
<8>
ฟังก์ชัน f(x) ข้างล่างนี้ 
รับ x เป็นจำนวนเต็มบวก 
คืนลิสต์ของจำนวนเฉพาะต่าง ๆ ที่เป็นตัวประกอบของ x
เช่น f(63) คืน [3,3,7]
จงเติมคำสั่งแทนที่เครื่องหมาย **** และ ????
เพื่อให้ f ทำงานถูกต้อง

def f(x):
  fac = []
  k = 2
  while **** :    # <------
    while ???? :  # <------
      x = x//k
      fac.append(k)
    k += 1
  return fac
<9>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 20,50,200 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
<10>
โปรแกรมข้างล่างนี้แสดง * กี่ตัว
for i in range(3):
  print('*')
  for j in range(4):
    print('*')
    for k in range(5):
      print('*')