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

<1>
แฟ้ม scores.txt เก็บคะแนนกลางภาคและปลายภาคของนักเรียน 
ข้อมูลภายในคั่นด้วย comma (,) อาจมีช่องว่างด้วย เช่น

ID, Mid (30),Final (100)
P49203, 25, 45
P44949,  5,   100
P50392x, 29,48
P52812a1,27,   8
 
จงเขียนโปรแกรมอ่านแฟ้มนี้ มาปรับรูปแบบใหม่ 
แล้วบันทึกลงแฟ้ม scores_table.txt
ในรูปแบบตารางข้างล่างนี้

+------------+------------+------------+
|          ID|    Mid (30)| Final (100)|
+------------+------------+------------+
|      P49203|          25|          45|
|      P44949|           5|         100|
|     P50392x|          29|          48|
|    P52812a1|          27|           8|
+------------+------------+------------+

ให้สังเกตว่า
- ความกว้างของแต่ละคอลัมน์เท่ากับ 12 ไม่รวมตัวขีดแนวตั้ง |
- ข้อมูลแต่ละคอลัมน์วางชิดขวาสุดของคอลัมน์ ไม่มีช่องว่างทางขวา
- ข้อมูลแต่ละส่วนในแฟ้มมีขนาดไม่เกิน 12 ตัวแน่ ๆ
Solution:
def format(s):
    return (' '*12 + s)[-12:]

dash_line = ('+' + '-'*12)*3 + '+\n'
t = dash_line
header = True
f = open('scores.txt')
for line in f:
    x = [e.strip() for e in line.split(',')]
    t += '|' + format(x[0]) + \
         '|' + format(x[1]) + \
         '|' + format(x[2]) + '|\n'
    if header:
        t += dash_line
        header = False
t += dash_line
f.close()
f = open('scores_table.txt', 'w')        
f.write(t)
f.close()
<1>
แฟ้ม scores.txt เก็บคะแนนกลางภาคและปลายภาคของนักเรียน 
ข้อมูลภายในคั่นด้วย comma (,) อาจมีช่องว่างด้วย เช่น

ID, Mid (30),Final (100)
P49203, 25, 45
P44949,  5,   100
P50392x, 29,48
P52812a1,27,   8
 
จงเขียนโปรแกรมอ่านแฟ้มนี้ มาปรับรูปแบบใหม่ 
แล้วบันทึกลงแฟ้ม scores_table.txt
ในรูปแบบตารางข้างล่างนี้

+------------+------------+------------+
|ID          |Mid (30)    |Final (100) |
+------------+------------+------------+
|P49203      |25          |45          |
|P44949      |5           |100         |
|P50392x     |29          |48          |
|P52812a1    |27          |8           |
+------------+------------+------------+

ให้สังเกตว่า
- ความกว้างของแต่ละคอลัมน์เท่ากับ 12 ไม่รวมตัวขีดแนวตั้ง |
- ข้อมูลแต่ละคอลัมน์วางชิดซ้ายสุดของคอลัมน์ ไม่มีช่องว่างทางซ้าย
- ข้อมูลแต่ละส่วนในแฟ้มมีขนาดไม่เกิน 12 ตัวแน่ ๆ
Solution:
def format(s):
    return (s+' '*12)[:12]

dash_line = ('+' + '-'*12)*3 + '+\n'
t = dash_line
header = True
f = open('scores.txt')
for line in f:
    x = [e.strip() for e in line.split(',')]
    t += '|' + format(x[0]) + \
         '|' + format(x[1]) + \
         '|' + format(x[2]) + '|\n'
    if header:
        t += dash_line
        header = False
t += dash_line
f.close()
f = open('scores_table.txt', 'w')        
f.write(t)
f.close()
<1>
แฟ้ม scores.txt เก็บคะแนนกลางภาคและปลายภาคของนักเรียน 
ข้อมูลภายในคั่นด้วย comma (,) อาจมีช่องว่างด้วย เช่น

ID, Mid (30),Final (100)
P49203, 25, 45
P44949,  5,   100
P50392x, 29,48
P52812a1,27,   8
 
จงเขียนโปรแกรมอ่านแฟ้มนี้ มาปรับรูปแบบใหม่ 
แล้วบันทึกลงแฟ้ม scores_table.txt
ในรูปแบบตารางข้างล่างนี้

+-------------+-------------+-------------+
|           ID|     Mid (30)|  Final (100)|
+-------------+-------------+-------------+
|       P49203|           25|           45|
|       P44949|            5|          100|
|      P50392x|           29|           48|
|     P52812a1|           27|            8|
+-------------+-------------+-------------+

ให้สังเกตว่า
- ความกว้างของแต่ละคอลัมน์เท่ากับ 13 ไม่รวมตัวขีดแนวตั้ง |
- ข้อมูลแต่ละคอลัมน์วางชิดขวาสุดของคอลัมน์ ไม่มีช่องว่างทางขวา
- ข้อมูลแต่ละส่วนในแฟ้มมีขนาดไม่เกิน 13 ตัวแน่ ๆ
Solution:
def format(s):
    return (' '*13 + s)[-13:]

dash_line = ('+' + '-'*13)*3 + '+\n'
t = dash_line
header = True
f = open('scores.txt')
for line in f:
    x = [e.strip() for e in line.split(',')]
    t += '|' + format(x[0]) + \
         '|' + format(x[1]) + \
         '|' + format(x[2]) + '|\n'
    if header:
        t += dash_line
        header = False
t += dash_line
f.close()
f = open('scores_table.txt', 'w')        
f.write(t)
f.close()
<1>
แฟ้ม scores.txt เก็บคะแนนกลางภาคและปลายภาคของนักเรียน 
ข้อมูลภายในคั่นด้วย comma (,) อาจมีช่องว่างด้วย เช่น

ID, Mid (30),Final (100)
P49203, 25, 45
P44949,  5,   100
P50392x, 29,48
P52812a1,27,   8
 
จงเขียนโปรแกรมอ่านแฟ้มนี้ มาปรับรูปแบบใหม่ 
แล้วบันทึกลงแฟ้ม scores_table.txt
ในรูปแบบตารางข้างล่างนี้

+-------------+-------------+-------------+
|ID           |Mid (30)     |Final (100)  |
+-------------+-------------+-------------+
|P49203       |25           |45           |
|P44949       |5            |100          |
|P50392x      |29           |48           |
|P52812a1     |27           |8            |
+-------------+-------------+-------------+

ให้สังเกตว่า
- ความกว้างของแต่ละคอลัมน์เท่ากับ 13 ไม่รวมตัวขีดแนวตั้ง |
- ข้อมูลแต่ละคอลัมน์วางชิดซ้ายสุดของคอลัมน์ ไม่มีช่องว่างทางซ้าย
- ข้อมูลแต่ละส่วนในแฟ้มมีขนาดไม่เกิน 13 ตัวแน่ ๆ
Solution:
def format(s):
    return (s+' '*13)[:13]

dash_line = ('+' + '-'*13)*3 + '+\n'
t = dash_line
header = True
f = open('scores.txt')
for line in f:
    x = [e.strip() for e in line.split(',')]
    t += '|' + format(x[0]) + \
         '|' + format(x[1]) + \
         '|' + format(x[2]) + '|\n'
    if header:
        t += dash_line
        header = False
t += dash_line
f.close()
f = open('scores_table.txt', 'w')        
f.write(t)
f.close()
<1>
แฟ้ม scores.txt เก็บคะแนนกลางภาคและปลายภาคของนักเรียน 
ข้อมูลภายในคั่นด้วย comma (,) อาจมีช่องว่างด้วย เช่น

ID, Mid (30),Final (100)
P49203, 25, 45
P44949,  5,   100
P50392x, 29,48
P52812a1,27,   8
 
จงเขียนโปรแกรมอ่านแฟ้มนี้ มาปรับรูปแบบใหม่ 
แล้วบันทึกลงแฟ้ม scores_table.txt
ในรูปแบบตารางข้างล่างนี้

+-----------+-----------+-----------+
|         ID|   Mid (30)|Final (100)|
+-----------+-----------+-----------+
|     P49203|         25|         45|
|     P44949|          5|        100|
|    P50392x|         29|         48|
|   P52812a1|         27|          8|
+-----------+-----------+-----------+

ให้สังเกตว่า
- ความกว้างของแต่ละคอลัมน์เท่ากับ 11 ไม่รวมตัวขีดแนวตั้ง |
- ข้อมูลแต่ละคอลัมน์วางชิดขวาสุดของคอลัมน์ ไม่มีช่องว่างทางขวา
- ข้อมูลแต่ละส่วนในแฟ้มมีขนาดไม่เกิน 11 ตัวแน่ ๆ
Solution:
def format(s):
    return (' '*11 + s)[-11:]

dash_line = ('+' + '-'*11)*3 + '+\n'
t = dash_line
header = True
f = open('scores.txt')
for line in f:
    x = [e.strip() for e in line.split(',')]
    t += '|' + format(x[0]) + \
         '|' + format(x[1]) + \
         '|' + format(x[2]) + '|\n'
    if header:
        t += dash_line
        header = False
t += dash_line
f.close()
f = open('scores_table.txt', 'w')        
f.write(t)
f.close()
<1>
แฟ้ม scores.txt เก็บคะแนนกลางภาคและปลายภาคของนักเรียน 
ข้อมูลภายในคั่นด้วย comma (,) อาจมีช่องว่างด้วย เช่น

ID, Mid (30),Final (100)
P49203, 25, 45
P44949,  5,   100
P50392x, 29,48
P52812a1,27,   8
 
จงเขียนโปรแกรมอ่านแฟ้มนี้ มาปรับรูปแบบใหม่ 
แล้วบันทึกลงแฟ้ม scores_table.txt
ในรูปแบบตารางข้างล่างนี้

+-----------+-----------+-----------+
|ID         |Mid (30)   |Final (100)|
+-----------+-----------+-----------+
|P49203     |25         |45         |
|P44949     |5          |100        |
|P50392x    |29         |48         |
|P52812a1   |27         |8          |
+-----------+-----------+-----------+

ให้สังเกตว่า
- ความกว้างของแต่ละคอลัมน์เท่ากับ 11 ไม่รวมตัวขีดแนวตั้ง |
- ข้อมูลแต่ละคอลัมน์วางชิดซ้ายสุดของคอลัมน์ ไม่มีช่องว่างทางซ้าย
- ข้อมูลแต่ละส่วนในแฟ้มมีขนาดไม่เกิน 11 ตัวแน่ ๆ
Solution:
def format(s):
    return (s+' '*11)[:11]

dash_line = ('+' + '-'*11)*3 + '+\n'
t = dash_line
header = True
f = open('scores.txt')
for line in f:
    x = [e.strip() for e in line.split(',')]
    t += '|' + format(x[0]) + \
         '|' + format(x[1]) + \
         '|' + format(x[2]) + '|\n'
    if header:
        t += dash_line
        header = False
t += dash_line
f.close()
f = open('scores_table.txt', 'w')        
f.write(t)
f.close()
<2>
กำหนดให้ x0 เป็นลิสต์ของจำนวนเต็ม
- ให้ x1 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x0 มาบวกกัน
  เช่น x0 = [1,2,3,4] จะได้ 
      x1 = [1+2, 2+3, 3+4] = [3,5,7]
- ให้ x2 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x1 มาบวกกัน
  ต่อจากตัวอย่างที่แล้ว ได้ x2 = [3+5, 5+7] = [8,12]
- ให้ x3 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x2 มาบวกกัน
  ต่อจากตัวอย่างที่แล้ว ได้ x3 = [8+12] = [20]
- แล้วก็ไม่สามารถหา x4 ได้แล้ว เพราะ x3 มีตัวเดียว

จงเขียนฟังก์ชัน f(x0) ที่
- รับ x0 เป็นลิสต์ของจำนวนเต็มมีข้อมูลอย่างน้อย 1 ตัว
- คืนลิสต์ซ้อนลิสต์ [x0, x1, x2, ..., xk] 
  โดยที่ x1, x2, ... หาได้ด้วยวิธีข้างต้น
       xk คือลิสต์ที่เหลือแค่ตัวเดียว

เช่น f([1, 2, 3, 4]) ได้
    [[1, 2, 3, 4], [3, 5, 7], [8, 12], [20]]
Solution:
def f(x0):
  z = [x0]
  for i in range(1,len(x0)):
    x = z[-1]
    z.append([x[j]+x[j+1] for j in range(len(x)-1)])
  return z
<2>
กำหนดให้ x0 เป็นลิสต์ของจำนวนเต็ม
- ให้ x1 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x0 มาบวกกัน
  เช่น x0 = [1,2,3,4] จะได้ 
      x1 = [1+2, 2+3, 3+4] = [3,5,7]
- ให้ x2 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x1 มาบวกกัน
  ต่อจากตัวอย่างที่แล้ว ได้ x2 = [3+5, 5+7] = [8,12]
- ให้ x3 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x2 มาบวกกัน
  ต่อจากตัวอย่างที่แล้ว ได้ x3 = [8+12] = [20]
- แล้วก็ไม่สามารถหา x4 ได้แล้ว เพราะ x3 มีตัวเดียว

จงเขียนฟังก์ชัน f(x0) ที่
- รับ x0 เป็นลิสต์ของจำนวนเต็มมีข้อมูลอย่างน้อย 1 ตัว
- คืนลิสต์ซ้อนลิสต์ [xk, ..., x2, x1, x0] 
  โดยที่ x1, x2, ... หาได้ด้วยวิธีข้างต้น
       xk คือลิสต์ที่เหลือแค่ตัวเดียว

เช่น f([1, 2, 3, 4]) ได้
    [[20], [8, 12], [3, 5, 7], [1, 2, 3, 4]]
Solution:
def f(x0):
  z = [x0]
  for i in range(1,len(x0)):
    x = z[0]
    z.insert(0,[x[j]+x[j+1] for j in range(len(x)-1)])
  return z
<2>
กำหนดให้ x0 เป็นลิสต์ของจำนวนเต็ม
- ให้ x1 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x0 มาคูณกัน
  เช่น x0 = [1,2,3,4] จะได้ 
      x1 = [1*2, 2*3, 3*4] = [2,6,12]
- ให้ x2 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x1 มาคูณกัน
  ต่อจากตัวอย่างที่แล้ว ได้ x2 = [2*6, 6*12] = [12,72]
- ให้ x3 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x2 มาคูณกัน
  ต่อจากตัวอย่างที่แล้ว ได้ x3 = [12*72] = [864]
- แล้วก็ไม่สามารถหา x4 ได้แล้ว เพราะ x3 มีตัวเดียว

จงเขียนฟังก์ชัน f(x0) ที่
- รับ x0 เป็นลิสต์ของจำนวนเต็มมีข้อมูลอย่างน้อย 1 ตัว
- คืนลิสต์ซ้อนลิสต์ [x0, x1, x2, ..., xk] 
  โดยที่ x1, x2, ... หาได้ด้วยวิธีข้างต้น
       xk คือลิสต์ที่เหลือแค่ตัวเดียว

เช่น f([1, 2, 3, 4]) ได้
    [[1, 2, 3, 4], [2, 6, 12], [12, 72], [864]]
Solution:
def f(x0):
  z = [x0]
  for i in range(1,len(x0)):
    x = z[-1]
    z.append([x[j]*x[j+1] for j in range(len(x)-1)])
  return z
<2>
กำหนดให้ x0 เป็นลิสต์ของจำนวนเต็ม
- ให้ x1 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x0 มาคูณกัน
  เช่น x0 = [1,2,3,4] จะได้ 
      x1 = [1*2, 2*3, 3*4] = [2,6,12]
- ให้ x2 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x1 มาคูณกัน
  ต่อจากตัวอย่างที่แล้ว ได้ x2 = [2*6, 6*12] = [12,72]
- ให้ x3 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x2 มาคูณกัน
  ต่อจากตัวอย่างที่แล้ว ได้ x3 = [12*72] = [864]
- แล้วก็ไม่สามารถหา x4 ได้แล้ว เพราะ x3 มีตัวเดียว

จงเขียนฟังก์ชัน f(x0) ที่
- รับ x0 เป็นลิสต์ของจำนวนเต็มมีข้อมูลอย่างน้อย 1 ตัว
- คืนลิสต์ซ้อนลิสต์ [xk, ..., x2, x1, x0] 
  โดยที่ x1, x2, ... หาได้ด้วยวิธีข้างต้น
       xk คือลิสต์ที่เหลือแค่ตัวเดียว

เช่น f([1, 2, 3, 4]) ได้
    [[864], [12, 72], [2, 6, 12], [1, 2, 3, 4]]
Solution:
def f(x0):
  z = [x0]
  for i in range(1,len(x0)):
    x = z[0]
    z.insert(0,[x[j]+x[j+1] for j in range(len(x)-1)])
  return z
<2>
กำหนดให้ x0 เป็นลิสต์ของจำนวนเต็ม
- ให้ x1 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x0 มาลบกัน
  เช่น x0 = [1,2,8,32] จะได้ 
      x1 = [1-2, 2-8, 8-32] = [-1,-6,-24]
- ให้ x2 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x1 มาลบกัน
  ต่อจากตัวอย่างที่แล้ว ได้ x2 = [-1-(-6), -6-(-24)] = [5,18]
- ให้ x3 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x2 มาลบกัน
  ต่อจากตัวอย่างที่แล้ว ได้ x3 = [5-18] = [-13]
- แล้วก็ไม่สามารถหา x4 ได้แล้ว เพราะ x3 มีตัวเดียว

จงเขียนฟังก์ชัน f(x0) ที่
- รับ x0 เป็นลิสต์ของจำนวนเต็มมีข้อมูลอย่างน้อย 1 ตัว
- คืนลิสต์ซ้อนลิสต์ [x0, x1, x2, ..., xk] 
  โดยที่ x1, x2, ... หาได้ด้วยวิธีข้างต้น
       xk คือลิสต์ที่เหลือแค่ตัวเดียว

เช่น f([1, 2, 8, 32]) ได้
    [[1, 2, 8, 32], [-1, -6, -24], [5, 18], [-13]]
Solution:
def f(x0):
  z = [x0]
  for i in range(1,len(x0)):
    x = z[-1]
    z.append([x[j]-x[j+1] for j in range(len(x)-1)])
  return z
<2>
กำหนดให้ x0 เป็นลิสต์ของจำนวนเต็ม
- ให้ x1 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x0 มาลบกัน
  เช่น x0 = [1,2,8,32] จะได้ 
      x1 = [1-2, 2-3, 8-32] = [-1,-6,-24]
- ให้ x2 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x1 มาลบกัน
  ต่อจากตัวอย่างที่แล้ว ได้ x2 = [-1-(-6), -6-(-24)] = [5,18]
- ให้ x3 คือลิสต์ที่ได้จากการนำสองตัวติดกันใน x2 มาลบกัน
  ต่อจากตัวอย่างที่แล้ว ได้ x3 = [5-18] = [-13]
- แล้วก็ไม่สามารถหา x4 ได้แล้ว เพราะ x3 มีตัวเดียว

จงเขียนฟังก์ชัน f(x0) ที่
- รับ x0 เป็นลิสต์ของจำนวนเต็มมีข้อมูลอย่างน้อย 1 ตัว
- คืนลิสต์ซ้อนลิสต์ [xk, ..., x2, x1, x0] 
  โดยที่ x1, x2, ... หาได้ด้วยวิธีข้างต้น
       xk คือลิสต์ที่เหลือแค่ตัวเดียว

เช่น f([1, 2, 8, 32]) ได้
    [[-13], [5, 18], [-1, -6, -24], [1, 2, 8, 32]]
Solution:
def f(x0):
  z = [x0]
  for i in range(1,len(x0)):
    x = z[0]
    z.insert(0,[x[j]-x[j+1] for j in range(len(x)-1)])
  return z