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

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

<1>
โปรแกรมข้างล่างนี้แสดง * กี่ตัว
for i in range(3):
  print('*')
  for j in range(4):
    print('*')
    for k in range(5):
      print('*')
Solution:
3 + 3*4 + 3*4*5 = 75
<1>
โปรแกรมข้างล่างนี้แสดง * กี่ตัว
for i in range(5):
  print('*')
  for j in range(4):
    print('*')
    for k in range(3):
      print('*')
Solution:
5 + 5*4 + 5*4*3 = 85
<1>
โปรแกรมข้างล่างนี้แสดง * กี่ตัว
for i in range(4):
  print('*')
  for j in range(5):
    print('*')
    for k in range(3):
      print('*')
Solution:
4 + 4*5 + 5*4*3 = 84
<1>
โปรแกรมข้างล่างนี้แสดง * กี่ตัว
for i in range(3):
  print('*')
  for j in range(5):
    print('*')
    for k in range(4):
      print('*')
Solution:
3 + 3*5 + 5*4*3 = 78
<2>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 3,11,15 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
Solution:
3,17,15
<2>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 4,11,18 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
Solution:
4,19,18
<2>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 30,40,300 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
Solution:
30,130,300
<2>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 20,50,200 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
Solution:
20,110,200
<3>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 5,1,6 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
Solution:
5,7,18
<3>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 4,2,8 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
Solution:
4,10,22
<3>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 5,1,3 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
Solution:
8,1,12
<3>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 4,2,3 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
Solution:
7,2,12
<3>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 5,3,1 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
Solution:
5,3,9
<3>
จาก flowchart ถ้าเริ่มต้น a,b และ c มีค่า 6,4,2 ตามลำดับ
พอทำงานจนถึงวงกลมเลข 1 ด้านล่าง
a,b และ c จะมีค่าเท่าไร
Solution:
6,4,12
<4>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ 
(ใช้ตัวแปร a, x, y และ z ได้เลย)
<4>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ 
(ใช้ตัวแปร a, x, y และ z ได้เลย)
<4>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ 
(ใช้ตัวแปร a, x, y และ z ได้เลย)
<4>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ 
(ใช้ตัวแปร a, x, y และ z ได้เลย)
<4>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ 
(ใช้ตัวแปร a, x, y และ z ได้เลย)
<4>
จงเขียนคำสั่งที่คำนวณสูตรข้างล่างนี้ 
(ใช้ตัวแปร a, x, y และ z ได้เลย)
<5>
ฟังก์ชัน 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
Solution:
**** คือ k <= x 
???? คือ x%k == 0
<6>
จงเขียนฟังก์ชัน f(x) ที่
คืนจริง ถ้าไม่มีตัวอังกฤษตัวพิมพ์เล็กใน x เลย
ไม่เช่นนั้นคืนเท็จ
โดยให้เขียนเพียงบรรทัดเดียวในฟังก์ชัน 
ไม่มีการใช้เครื่องหมาย ; (semicolon)
Solution:
def f(x):
  return x.upper() == x
  # return sum([1 for e in x if 'a'<=e<='z']) == 0
<6>
จงเขียนฟังก์ชัน f(x) ที่
คืนจริง ถ้าไม่มีตัวอังกฤษตัวพิมพ์ใหญ่ใน x เลย
ไม่เช่นนั้นคืนเท็จ
โดยให้เขียนเพียงบรรทัดเดียวในฟังก์ชัน 
ไม่มีการใช้เครื่องหมาย ; (semicolon)
Solution:
def f(x):
  return x.lower() == x
  # return sum([1 for e in x if 'A'<=e<='Z']) == 0
<7>
จงเขียนฟังก์ชัน f(x, y)
- x และ y เป็น numpy array หนึ่งมิติเก็บจำนวนจริง
- ค่าใน x ไม่เท่ากันเลย และค่าใน y ก็ไม่เท่ากันเลย
- f(x,y) คืนจำนวนคู่ข้อมูลของ x กับ y 
  ที่มีค่าต่างกันไม่เกิน 1
- ห้ามใช้คำสั่ง for, while, comprehension, map, reduce

เช่น f(np.array([1.1, 2.1]),np.array([1, 2.0, 3.2]))
    คืน 3 (คือคู่ 1.1 กับ 1, 1.1 กับ 2.0 และ 2.1 กับ 2.0)
Solution:
def f(x,y):
  z = x - y.reshape((y.shape[0],1))
  return np.sum(np.abs(z) <= 1)
<7>
จงเขียนฟังก์ชัน f(x, y)
- x และ y เป็น numpy array หนึ่งมิติเก็บจำนวนเต็ม
- ค่าใน x ไม่เท่ากันเลย และค่าใน y ก็ไม่เท่ากันเลย
- f(x,y) คืนจำนวนคู่ข้อมูลของ x กับ y 
  ที่มีค่าต่างกันไม่เกิน 2
- ห้ามใช้คำสั่ง for, while, comprehension, map, reduce

เช่น f(np.array([2,4]),np.array([3,9,6]))
    คืน 3 (คือคู่ 2 กับ 3, 4 กับ 3 และ 4 กับ 6)
Solution:
def f(x,y):
  z = x - y.reshape((y.shape[0],1))
  return np.sum(np.abs(z) <= 2)
<7>
จงเขียนฟังก์ชัน 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)
Solution:
def f(x,y):
  z = x < y.reshape((y.shape[0],1))
  return np.sum(z)
<7>
จงเขียนฟังก์ชัน 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)
Solution:
def f(x,y):
  z = x > y.reshape((y.shape[0],1))
  return np.sum(z)
<8>
ให้ 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
Solution:
x มีตัวซ้ำกันมากสุดกี่ตัว
f([1,3,1,1,2,1,1]) -> 5
<8>
ให้ 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
Solution:
x มีตัวที่ติดกันมีค่าเพิ่มขึ้นเรื่อย ๆ มากสุดกี่ตัว
f([1,2,3,3,4,5,9,1]) --> 4
<8>
ให้ 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
Solution:
x มีตัวที่ติดกันมีค่าลดลงเรื่อย ๆ มากสุดกี่ตัว
f([9,4,3,8,6,5,4,1,9]) -> 5
<8>
ให้ 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
Solution:
x มีตัวที่ติดกันเท่ากันมากสุดกี่ตัว
f([2,3,1,1,1,2,2,2,2,1,3,1]) -> 4
<9>
จากคลาส 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)

จะแสดงข้างล่างนี้ทางจอภาพ
[2, 9] [3, 7]
Solution:
  def __str__(self):
    return '['+str(self.a)+', '+str(self.c)+']'
<9>
จากคลาส 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]
Solution:
  def __str__(self):
    return '['+str(self.b)+', '+str(self.c)+']'
<9>
จากคลาส 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]
Solution:
  def __str__(self):
    return '['+str(self.b)+', '+str(self.a)+']'
<9>
จากคลาส 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)

จะแสดงข้างล่างนี้ทางจอภาพ
[9, 2] [7, 3]
Solution:
  def __str__(self):
    return '['+str(self.c)+', '+str(self.a)+']'
<10>
จากคลาส 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
Solution:
  def action(self):
    self.a = self.b = 0
<10>
จากคลาส 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
Solution:
  def action(self):
    self.a = -1
    self.b = 0
<10>
จากคลาส 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)

จะแสดงข้างล่างนี้ทางจอภาพ
5 5
Solution:
  def action(self):
    self.a = 5
    self.b = 5
<10>
จากคลาส 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)

จะแสดงข้างล่างนี้ทางจอภาพ
3 4
Solution:
  def action(self):
    self.a = 3
    self.b = 4