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

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

<1>
จากคลาส 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)

จะแสดงข้างล่างนี้ทางจอภาพ
0 0
<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 กับ 3, 8 กับ 3 และ 8 กับ 6)
<3>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 4,2,8 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
<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, 2] [4, 3]
<5>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ 
(ใช้ตัวแปร a, x, y และ z ได้เลย)
<6>
จงเขียนฟังก์ชัน f(x) ที่
คืนจริง ถ้าไม่มีตัวอังกฤษตัวพิมพ์เล็กใน x เลย
ไม่เช่นนั้นคืนเท็จ
โดยให้เขียนเพียงบรรทัดเดียวในฟังก์ชัน 
ไม่มีการใช้เครื่องหมาย ; (semicolon)
<7>
โปรแกรมข้างล่างนี้แสดง * กี่ตัว
for i in range(3):
  print('*')
  for j in range(4):
    print('*')
    for k in range(5):
      print('*')
<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>
ให้ x เป็นลิสต์ของจำนวนเต็ม
ฟังก์ชัน 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
<10>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 20,50,200 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร