จงเติมคำสั่งในบรรทัดที่ให้ค่ากับตัวแปร y
เพื่อให้ yi = 2(xi)2 - 5
สำหรับทุกค่าของ i
(แก้ไขบรรทัด y = ___ บรรทัดเดียว ไม่ต้องแก้ไขบรรทัดอื่น ๆ)
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-5.0, 5.0, 0.1)
y = _________
plt.plot(x, y)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-5.0, 5.0, 0.1)
y = 2*x**2 - 5
plt.plot(x, y)
plt.show()
Ex().check_function('matplotlib.pyplot.plot', missing_msg = "ฟังก์ชัน plot หายไปไหน ?").\
check_args(["args", 1]).has_equal_value(incorrect_msg="ยังไม่ถูกต้อง: โจทย์ให้พล็อต กำลังสองของ x")
จงเติมคำสั่งในบรรทัดที่ให้ค่ากับตัวแปร x
กับ y
โดย x เก็บมุม 0, 1, 2, ..., 360 องศา ส่วน y เก็บค่า sin(x) คือให้ yi = sin(xi)
สำหรับทุกค่าของ i
(แก้ไขบรรทัด x = และ y = เท่านั้น ไม่ต้องแก้ไขบรรทัดอื่น ๆ)
import matplotlib.pyplot as plt
import numpy as np
x = ________
y = ________
plt.plot(x, y)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 361, 1)
y = np.sin(np.radians(x))
plt.plot(x, y)
plt.show()
Ex().check_function('matplotlib.pyplot.plot', missing_msg = "ฟังก์ชัน plot หายไปไหน ?").multi(
check_args(["args", 0]).has_equal_value(
incorrect_msg="ยังไม่ถูกต้อง: โจทย์ให้พล็อต x จาก 0,1,2,..,360 องศา"),
check_args(["args", 1]).has_equal_value(
incorrect_msg="ยังไม่ถูกต้อง: โจทย์ให้พล็อต y = sin(x)")
)
เขียนคำสั่งเพื่อสร้างอาเรย์ในตัวแปรชื่อต่อไปนี้ (ไม่ใช้คำสั่งวงวน)
a1
ขนาด 10x10 ทุกช่องมีค่า -3a2
ขนาด 10x10 แถวคู่เป็น 2 ทุกตัว แถวคี่เป็น 7 ทุกตัวa3
ขนาด 10x10 ทุกช่องเป็น 0 ยกเว้นในแนวทแยงมุมจากซ้ายบนลงมาขวาล่างเป็น 9a4
ขนาด 10x10 ทุกช่องเป็น 0 ยกเว้นในแนวทแยงมุมจากขวาบนลงมาซ้ายล่างเป็น 9
import numpy as np
import numpy as np
a1 = np.ndarray((10,10), int)
a1[:,:] = -3
a2 = np.ndarray((10,10), int)
a2[::2, :] = 2
a2[1::2, :] = 7
ir = np.arange(0, 10, 1)
a3 = np.zeros((10,10), int)
a3[ir,ir] = 9
a4 = np.zeros((10,10), int)
a4[ir,ir[::-1]] = 9
Ex().check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ")
vars = ['a1', 'a2', 'a3', 'a4']
for v in vars:
obj = Ex().check_object(v, missing_msg = "ไม่มีตัวแปร `" + v + "`")
obj.has_equal_value(expr_code = "type("+v+")", incorrect_msg = "`" + v + "` ต้องเป็น numpy array")
obj.has_equal_value(expr_code = v+".dtype", incorrect_msg = "`" + v + "` เก็บข้อมูลที่มีประเภทข้อมูลไม่ตรงตามโจทย์")
obj.has_equal_value(incorrect_msg = "`" + v + "` มีค่าไม่ตรงตามโจทย์")
กำหนดให้มี A เป็นอาเรย์หนึ่งมิติ (มีให้แล้ว) จงเขียนคำสั่งเพื่อนำข้อมูลจาก A มาสร้างอาเรย์ใหม่ในตัวแปรชื่อต่อไปนี้ (ไม่ใช้คำสั่งวงวน)
a1
เก็บจำนวนของข้อมูลใน A ที่มีค่าติดลบa2
เป็นอาเรย์เก็บข้อมูลใน A ทั้งหมดที่มีค่าติดลบ (ลำดับก่อนหลังเดียวกับที่อยู่ใน A)a3
เป็นอาเรย์เก็บอินเด็กซ์ของ A ทั้งหมดที่มีค่าติดลบ (ลำดับก่อนหลังเดียวกับที่อยู่ใน A)a4
เป็นอาเรย์เก็บข้อมูลใน A ทั้งหมดที่มีค่าตั้งแต่ -5 ถึง 5 (ลำดับก่อนหลังเดียวกับที่อยู่ใน A)
import numpy as np
A = np.array([-10, -5, -2, 0, 5, 33])
import numpy as np
import numpy as np
a1 = sum(A < 0)
a2 = A[A < 0]
a3 = np.arange(len(A))[A < 0]
t = A[A<=5]
a4 = t[-5<=t]
import numpy as np
Ex().check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ")
vars = ['a1', 'a2', 'a3', 'a4']
must_be_array = [False, True, True, True]
for i in range(len(vars)):
v = vars[i]
obj = Ex().check_object(v, missing_msg = "ไม่มีตัวแปร `" + v + "`")
if must_be_array[i]:
obj.has_equal_value(expr_code = "type("+v+")", incorrect_msg = "`" + v + "` ต้องเป็น numpy array")
obj.has_equal_value(expr_code = v+".dtype", incorrect_msg = "`" + v + "` เก็บข้อมูลที่มีประเภทข้อมูลไม่ตรงตามโจทย์")
ex = Ex().set_env(A = np.random.randint(-10, 10, np.random.randint(10,100)))
ex.has_equal_value(name = v, incorrect_msg = "`" + v + "` มีค่าไม่ตรงตามโจทย์")
จงเขียนฟังก์ชัน clip_to(x, e)
ที่รับ x
เป็นอาเรย์มิติเดียว และ e
เป็นจำนวน ฟังก์ชันนี้จะเปลี่ยนค่าใน x ที่เกิน e ให้เท่ากับ e ฟังก์ชันนี้ไม่คืนอะไร (ไม่ต้องใช้คำสั่งวงวน)
import numpy as np
def clip_to(x,e):
import numpy as np
def clip_to(x,e):
x[x>e] = e
import numpy as np
q = "`"
fname = "clip_to"
arg1 = 'np.array([1,1,2,3,4,5,4,5,1,2,1,3,3,4,5,4,6])'
arg2 = '3'
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์สองตัว')
func.check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ")
fcall = fname + "(" + arg1 + "," + arg2 + ")"
func.check_call(fcall).has_equal_value(incorrect_msg= "ฟังก์ชันนี้ต้องไม่คืนอะไรเลย")
func.check_body().set_context(eval(arg1), eval(arg2)).has_equal_value(name = "x", incorrect_msg = "ยังทำงานไม่ถูกต้อง")
จงเขียนฟังก์ชัน to_second(hms)
รับ hms
เป็นอาเรย์ขนาด nx3 แต่ละแถวมี 3 ช่องเก็บจำนวนชั่วโมง นาที และวินาที ฟังก์ชันนี้คืนอาเรย์ n ช่องของจำนวนเต็ม โดยช่องที่ k จะเก็บจำนวนวินาทีรวมที่คำนวณได้จากจำนวนชั่วโมง นาที และวินาทีของแถวที่ k ของ hms (ไม่ต้องใช้คำสั่งวงวนใด ๆ ในฟังก์ชัน)
import numpy as np
def to_second(hms):
import numpy as np
def to_second(hms):
return hms[:,0]*3600 + hms[:,1]*60 + hms[:,2]
import numpy as np
q = "`"
fname = "to_second"
arg = 'np.array(' + \
str([[np.random.randint(0, 20),
np.random.randint(0, 59),
np.random.randint(0, 59)] for k in range(10)]) + ')'
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์หนึ่งตัว')
func.check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ")
fcall = fname + "(" + arg + ")"
func.check_call(fcall).has_equal_value(incorrect_msg=(q+fname+q) + " ให้ผลผิด")
จงเขียนฟังก์ชัน to_hms(second)
รับ second
เป็นอาเรย์ขนาด n ช่อง แต่ละช่องเก็บจำนวนวินาที ฟังก์ชันนี้คืนอาเรย์ nx3 ช่องของจำนวนเต็ม แต่ละแถวมี 3 ช่อง เก็บจำนวนชั่วโมง นาที และวินาทีตามลำดับ โดยนำ second ช่องที่ k ไปแปลงเป็นชั่วโมง นาที วินาที แล้วเก็บในแถวที่ k ของผลลัพธ์ เช่น 3661 วินาที แปลงได้เป็น 1 ชั่วโมง 1 นาที และ 1 วินาที (ไม่ต้องใช้คำสั่งวงวนใด ๆ ในฟังก์ชัน)
import numpy as np
def to_hms(second):
import numpy as np
def to_hms(second):
return np.array([
second//3600,
second%3600//60,
second%60]).T
import numpy as np
q = "`"
fname = "to_hms"
arg = 'np.array(' + str([np.random.randint(3000, 30000) for k in range(10)]) + ')'
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์หนึ่งตัว')
func.check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ")
fcall = fname + "(" + arg + ")"
func.check_call(fcall).has_equal_value(incorrect_msg=(q+fname+q) + " ให้ผลผิด")