จงเขียนโปรแกรมอ่านรายการของชื่อโรงเรียน เพื่อแสดงรายการการแข่งขันฟุตบอลแบบพบกันหมด โดยแสดงบรรทัดละคู่ (เรียงตามพจนานุกรม) ดูตัวอย่างในรูปประกอบ
___inp___ = ["BCC AC DS SK"]
def input():
t = ___inp___.pop(0)
___inp___.append(t)
return t
schools = input().split()
schools = input().split()
schools.sort()
for i in range(len(schools)):
for j in range(i+1, len(schools)):
print(schools[i],'vs',schools[j])
Ex().has_equal_output(pre_code = "___inp___[0] = 'B D A F C'", incorrect_msg = "ยังได้ผลไม่ตรงตามโจทย์")
จงเขียนโปรแกรมที่รับจำนวนเต็ม N เพื่อแสดงตารางสูตรคูณของแม่ 2 จนถึงแม่ N ดังรูป โดยขอแสดงผลการคูณด้วย 1 ถึง 5 ก็พอ กำหนดให้ใช้แค่ 4 ช่องเพื่อแสดงผลแต่ละจำนวน โดยแสดงจำนวนแบบชิดขวา (ดูรูปประกอบ) สามารถใช้ฟังก์ชัน left_pad ที่เขียนให้แล้ว และให้เขียนโปรแกรมด้วยคำสั่ง for เท่านั้น (ห้ามใช้ while)
___inp___ = ["6"]
def input():
t = ___inp___.pop(0)
___inp___.append(t)
return t
def left_pad(n, k):
# แปลง n เป็นสตริงที่ยาว k โดยเติมช่องว่างทางซ้าย
# left_pad(12, 4) ได้ " 12"
return (" "*k +str(n))[-k:]
N = int(input())
def left_pad(n, k):
return (" "*k +str(n))[-k:]
N = int(input())
for k in range(2, N+1):
line = ""
for m in range(1, 6):
line += left_pad(k*m, 4)
print(line)
Ex().check_not(has_code("while "),msg = "ข้อนี้ห้ามใช้ while ให้ใช้แต่ for")
Ex().has_equal_output(pre_code = "___inp___[0] = 30", incorrect_msg = "ยังได้ผลไม่ต้องตามโจทย์")
เขียนโปรแกรมทำงานตามผังงานในรูป (แต่แทนที่จะใช้วงวน while ให้ใช้แต่ for) หมายเหตุ: อาจต้องปรับเงื่อนไขบ้างเล็กน้อย เพื่อให้เขียนในรูปของวงวน for
___inp___ = ["20"]
def input():
t = ___inp___.pop(0)
___inp___.append(t)
return t
N = int(input())
print(prime)
N = int(input())
prime = [True]*(N+1)
prime[0] = prime[1] = False
for p in range(2, int(N**0.5)+1):
if prime[p] == True:
for i in range(2*p, N+1, p):
prime[i] = False
print(prime)
Ex().check_not(has_code("while "),msg = "ข้อนี้ห้ามใช้ while ให้ใช้แต่ for")
Ex().has_equal_output(pre_code = "___inp___[0] = 32", incorrect_msg = "ยังได้ผลไม่ต้องตามผังงาน")
จงเขียนฟังก์ชัน min_distance(x, y)
มี x และ y เป็นลิสต์ที่เก็บพิกัด x และ y ของจุดต่าง ๆ โดยจุดที่ k มีพิกัดที่ x[k],y[k] ฟังก์ชันนี้คืนระยะทางของคู่จุดที่อยู่ใกล้กันที่สุด (ในโปรแกรมที่เขียนมีฟังก์ชัน distance มาให้ เผื่อจะใช้เป็นประโยชน์) เช่น min_distance([0, 9, 9],[0, 9, 8])
ได้ 1.0
def distance(x1,y1,x2,y2):
dx = x1 - x2
dy = y1 - y2
return (dx**2 + dy**2)**0.5
#-------------------------------------
def min_distance(x, y):
def distance(x1,y1,x2,y2):
dx = x1 - x2
dy = y1 - y2
return (dx**2 + dy**2)**0.5
#-------------------------------------
def min_distance(x, y):
min_distance = distance(x[0],y[0],x[1],y[1])
k = 0
for i in range(len(x)):
for j in range(i+1, len(x)):
d = distance(x[i],y[i],x[j],y[j])
if d < min_distance:
min_distance = d
return min_distance
#-------------------------------------
q = "`"
fname = "min_distance"
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์สองตัว')
import random
x = [random.randint(-10,10) for i in range(6)]
y = [random.randint(-10,10) for i in range(6)]
params = ["[0,2,3], [0,3,2]", str(x) + "," + str(y)]
for p in params:
fcall = fname + "(" + p + ")"
func.check_call(fcall).has_equal_value(incorrect_msg=(q+fcall+q) + " ให้ผลผิด")
จงเขียนฟังก์ชัน print_month(m, y)
รับเลขเดือนและเลขปี ค.ศ. เพื่อจะแสดงปฏิทินของเดือนปีที่ได้รับ (รูปแสดงตัวอย่างปฏิทินของเดือนสิงหาคม 2019) กำหนดให้วันแรกของสัปดาห์คือวันอาทิตย์ และมีฟังก์ชัน days_in_month
กับ day_of_week
ให้ใช้ประโยชน์
def days_in_month(m, y):
if m == 2:
if y%400 or y%4==0 and y%100 != 0:
return 29
else:
return 28
elif m in [4,6,9,11]:
return 30
else:
return 31
#-----------------------------------------
def day_of_week(d, m, y):
# 0 -> Sunday, 1 -> Monday, ...
if m < 3 :
m += 12
y -= 1
c = y // 100
k = y % 100
w = (d+26*(m+1)//10+k+k//4+c//4+5*c)%7
return (w-1) % 7
#-----------------------------------------
def print_month(m, y):
print(" SU MO TU WE TH FR SA")
def days_in_month(m, y):
if m == 2:
if y%400 or y%4==0 and y%100 != 0:
return 29
else:
return 28
elif m in [4,6,9,11]:
return 30
else:
return 31
#-----------------------------------------
def day_of_week(d, m, y):
# 0 -> Sunday, 1 -> Monday, ...
if m < 3 :
m += 12
y -= 1
c = y // 100
k = y % 100
w = (d+26*(m+1)//10+k+k//4+c//4+5*c)%7
return (w-1) % 7
#-----------------------------------------
def print_month(m, y):
print(" SU MO TU WE TH FR SA")
dow1 = day_of_week(1,m,y)
num_days = days_in_month(m,y)
line = ' '*dow1
s = dow1
d = 1
while d <= num_days:
for j in range(s,7):
line += (" "+str(d))[-3:]
d += 1
if d > num_days: break
print(line)
line = ""
s = 0
q = "`"
fname = "print_month"
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์สองตัว')
import random
my = str(random.randint(1,12)) + ", " + str(random.randint(2008, 2050))
params = ["9, 2019", my, "2, 2020"]
for p in params:
fcall = fname + "(" + p + ")"
func.check_call(fcall).has_equal_output(incorrect_msg=(q+fcall+q) + " ยังแสดงไม่ถูกต้อง")