- ตัวดำเนินการ
-
เรียนรู้
ศูนย์การเรียนรู้ Python ตัวอย่างที่รันได้, NumPy, pandas และอื่น ๆ ศูนย์การเรียนรู้ C และ C++ พอยน์เตอร์ หน่วยความจำ STL และ C++ สมัยใหม่ ศูนย์การเรียนรู้ C#พื้นฐาน C#, OOP, LINQ, async และแบบฝึกหัด .NET อัลกอริทึม Python การค้นหา การเรียงลำดับ รีเคอร์ชัน และภาพจำลอง O(n) อัลกอริทึม C และ C++ เปรียบเทียบการเขียนด้วย C และ C++
- โจทย์
Q-learning เรียนรู้ว่าแต่ละการกระทำดีแค่ไหนในแต่ละสถานะ หรือ Q(s, a) จากประสบการณ์เพียงอย่างเดียว หลังจากทำการกระทำ a ในสถานะ s ได้รับ reward และไปถึงสถานะ s':
- target = reward ถ้า episode จบแล้ว (
done= 1) - target = reward + gamma × ค่าสูงสุดเหนือ a' ของ Q(s', a') ในกรณีอื่น
- Q(s, a) ← Q(s, a) + alpha × (target - Q(s, a))
เริ่มด้วยค่า Q ทุกตัวเป็น 0 แล้วใช้การเปลี่ยนสถานะตามลำดับ
จง implement q_learning(num_states, num_actions, transitions, alpha, gamma)
อินพุต
num_states, num_actions: ขนาดของตาราง
transitions: หนึ่งแถว [state, action, reward, next_state, done] ต่อหนึ่งก้าว
alpha: อัตราการเรียนรู้
gamma: ตัวประกอบส่วนลด
เอาต์พุต
คืนตาราง Q เป็นเมทริกซ์ที่มีหนึ่งแถวต่อสถานะและหนึ่งคอลัมน์ต่อการกระทำ
เงื่อนไข
1 ≤ num_states, num_actions ≤ 100, 0 ≤ จำนวนการเปลี่ยนสถานะ ≤ 10,000
-100 ≤ reward ≤ 100, done เป็น 0 หรือ 1
0 < alpha ≤ 1, 0 ≤ gamma ≤ 1
ตัวอย่าง
ตัวอย่างที่ 1
อินพุต:
alpha = 0.5
gamma = 0.9
num_states = 2
num_actions = 2
transitions = [
[0, 1, 0, 1, 0],
[1, 0, 10, 0, 1]
]
ผลลัพธ์ที่คาดหวัง:
[
[0.0, 0.0],
[5.0, 0.0]
]
คำอธิบาย
ก้าวแรกยังไม่พบรางวัล: target = 0 + 0.9 × max(Q[1]) = 0 ดังนั้น Q[0][1] ยังเป็น 0 ก้าวที่สองจบ episode ด้วยรางวัล 10: Q[1][0] = 0 + 0.5 × (10 - 0) = 5
ตัวอย่างที่ 2
อินพุต:
alpha = 0.5
gamma = 0.9
num_states = 2
num_actions = 2
transitions = [
[1, 0, 10, 0, 1],
[0, 1, 0, 1, 0]
]
ผลลัพธ์ที่คาดหวัง:
[
[0.0, 2.25],
[5.0, 0.0]
]
คำอธิบาย
ก้าวเดิมแต่สลับลำดับ Q[1][0] กลายเป็น 5 ก่อน ก้าวจากสถานะ 0 จึงเห็นค่านี้: target = 0 + 0.9 × 5 = 4.5 และ Q[0][1] = 0.5 × 4.5 = 2.25 รางวัลไหลย้อนกลับไปหนึ่งสถานะ
แหล่งอ้างอิง
-
ตัวอย่างที่ 1 ยังไม่ได้รันอินพุต:
alpha = 0.5 gamma = 0.9 num_states = 2 num_actions = 2 transitions = [ [0, 1, 0, 1, 0], [1, 0, 10, 0, 1] ]ผลลัพธ์ที่คาดหวัง:[ [0.0, 0.0], [5.0, 0.0] ]เอาต์พุตของคุณ -
ตัวอย่างที่ 2 ยังไม่ได้รันอินพุต:
alpha = 0.5 gamma = 0.9 num_states = 2 num_actions = 2 transitions = [ [1, 0, 10, 0, 1], [0, 1, 0, 1, 0] ]ผลลัพธ์ที่คาดหวัง:[ [0.0, 2.25], [5.0, 0.0] ]เอาต์พุตของคุณ
มี 4 การทดสอบที่ซ่อนอยู่จะถูกรันเมื่อคุณส่งคำตอบ
คอมไพเลอร์และดีบักเกอร์ Python ออนไลน์
เขียน รัน และดีบัก Python ออนไลน์ ใช้ breakpoint และการทำงานทีละขั้นในโหมดเซิร์ฟเวอร์ได้โดยไม่ต้องติดตั้ง
🚀 4,279,692 การดำเนินการทั้งหมด (92 ในเดือนนี้)
ฝึก Python ด้วยโจทย์เขียนโค้ด
แก้โจทย์จริงใน editor นี้: รันทดสอบตัวอย่าง ส่งคำตอบ และรับรีวิวโค้ดจาก AI
🐍 เกี่ยวกับตัวรัน Python ออนไลน์นี้
CodeUtility Python Executor ให้คุณเขียน รัน และทดสอบโค้ด Python ได้โดยตรงบนเบราว์เซอร์ของคุณ - ไม่ต้องตั้งค่าหรือทำการติดตั้งใด ๆ ใช้งานบนแซนด์บ็อกซ์ที่ปลอดภัยซึ่งรองรับเวอร์ชัน Python จริง ตั้งแต่ 3.10 ถึง 3.13
ไม่ว่าคุณจะเรียนรู้ Python เป็นครั้งแรก ทดสอบโค้ดสั้น ๆ หรือดีบั๊กลอจิก เครื่องมือนี้มอบสภาพแวดล้อมการเขียนโค้ดที่รวดเร็วและไร้สิ่งรบกวน คุณสามารถทดลองได้อย่างอิสระและเห็นผลลัพธ์ทันทีในคอนโซลที่มีมาให้
เหมาะกับผู้เริ่มต้น นักศึกษา และนักพัฒนาที่ต้องการ IDE ออนไลน์แบบเบา ๆ สำหรับฝึก Python หรือสร้างโปรโตไทป์อย่างรวดเร็ว
มากกว่าเครื่องมือรันโค้ด
ใช้ตัวแก้ไขหลายไฟล์ เทอร์มินัลประมวลผลแบบแยกส่วน ไลบรารีเฉพาะรันไทม์ พื้นที่ทำงานถาวร การแชร์ และการทำงานร่วมกันแบบเรียลไทม์ได้จากตัวประมวลผลเดียวกัน
วิธีใช้ตัวประมวลผลนี้
เลือกรันไทม์ เปิดหรือสร้างไฟล์ เขียนโค้ด แล้วเลือกเรียกใช้ ผลลัพธ์จะแสดงในเทอร์มินัล ส่วนผู้ใช้ที่ลงชื่อเข้าใช้สามารถเก็บไฟล์ในพื้นที่ทำงาน ติดตั้งไลบรารี และทำงานร่วมกันผ่านการแชร์ได้
- เลือกเวอร์ชันแล้วแก้ไขไฟล์ปัจจุบัน หรือเปิดไฟล์อื่นในพื้นที่ทำงาน
- เรียกใช้โค้ด ป้อนข้อมูลในเทอร์มินัลเมื่อระบบร้องขอ และตรวจสอบประวัติการเรียกใช้ที่บันทึกไว้
- ใช้ไลบรารี เครื่องมือพื้นที่ทำงาน การแชร์ และแชท เมื่องานของคุณต้องใช้โค้ดมากกว่าหนึ่งส่วน
💡 พื้นฐาน Python และตัวอย่างที่คุณลองได้ด้านบน
1. การประกาศตัวแปรและค่าคงที่
Python เป็นภาษาที่กำหนดชนิดแบบไดนามิก จึงไม่ต้องประกาศชนิดข้อมูลล่วงหน้า ไม่มีคีย์เวิร์ดสำหรับค่าคงที่โดยตรง แต่ตามธรรมเนียมจะเขียนค่าคงที่ด้วยตัวพิมพ์ใหญ่ทั้งหมด
# ตัวแปร
x = 10
pi = 3.14
name = "Alice"
is_active = True
# ค่าคงที่ (ตามธรรมเนียม)
MAX_USERS = 100
APP_NAME = "CodeUtility"
# ค่าคงที่ยังสามารถถูกกำหนดค่าใหม่ได้ (ไม่ได้บังคับ)
MAX_USERS = 200 # ⚠️ ทำได้ในทางเทคนิค แต่ไม่แนะนำ
2. เงื่อนไข
ควบคุมลอจิกด้วยบล็อก if, elif, และ else ใน Python 3.10+ คุณยังสามารถใช้ match-case เป็นทางเลือกแทน switch-case ได้
# รูปแบบดั้งเดิม if-elif-else
x = 2
if x == 1:
print("หนึ่ง")
elif x == 2:
print("สอง")
else:
print("อื่น ๆ")
ทางเลือก: match-case (Python 3.10+)
# ต้องใช้ Python 3.10+
x = 2
match x:
case 1:
print("หนึ่ง")
case 2:
print("สอง")
case _:
print("อื่น ๆ")
3. ลูป
for ใช้สำหรับวนผ่านลำดับข้อมูล ส่วน while จะทำงานตราบใดที่เงื่อนไขเป็นจริง
for i in range(3):
print(i)
count = 3
while count > 0:
print(count)
count -= 1
4. ลิสต์
ลิสต์เป็นคอลเลกชันที่มีลำดับและแก้ไขได้ คุณสามารถเข้าถึงสมาชิกด้วยดัชนี
fruits = ["apple", "banana"]
print(fruits[0])
print(len(fruits))
5. การจัดการลิสต์
เพิ่ม ลบ สไลซ์ และกลับลิสต์ได้ List comprehension ช่วยให้เขียนการวนซ้ำได้อย่างกระชับ
fruits.append("cherry")
fruits.insert(1, "kiwi")
fruits.remove("banana")
fruits.pop()
print(fruits[1:3])
print(fruits[::-1])
squares = [x*x for x in range(5)]
6. อินพุต/เอาต์พุตคอนโซล
ใช้ input() เพื่อรับค่าจากผู้ใช้ และ print() เพื่อแสดงผลลัพธ์
คุณสามารถพิมพ์หลายบรรทัดได้โดยใช้ \n (ตัวอักขรขึ้นบรรทัดใหม่) หรือเรียก print() หลายครั้ง
# รับอินพุต
name = input("กรอกชื่อของคุณ: ")
print("สวัสดี", name)
# พิมพ์หลายบรรทัด
print("บรรทัด 1\nบรรทัด 2\nบรรทัด 3")
# หรือใช้ print หลายครั้ง
print("บรรทัด A")
print("บรรทัด B")
print("บรรทัด C")
7. ฟังก์ชัน
ฟังก์ชันช่วยจัดระเบียบโค้ดและนำกลับมาใช้ซ้ำได้ ใช้พารามิเตอร์และค่าที่ส่งกลับ
def greet(name):
return "สวัสดี " + name
print(greet("Alice"))
8. ดิกชันนารี
เก็บข้อมูลแบบคู่คีย์-ค่า คีย์จะไม่ซ้ำกัน และสามารถเข้าถึงค่าได้ผ่านคีย์
person = {"name": "Bob", "age": 25}
print(person["name"])
print(person.get("email", "ไม่ได้ระบุ"))
9. การจัดการข้อยกเว้น
ใช้ try และ except เพื่อดักและจัดการข้อผิดพลาดอย่างเหมาะสม
try:
x = 1 / 0
except ZeroDivisionError:
print("ไม่สามารถหารด้วยศูนย์ได้")
10. การทำงานกับไฟล์ (File I/O)
อ่านและเขียนไฟล์ด้วย open()
with open("data.txt", "w") as f:
f.write("สวัสดีโลก")
with open("data.txt", "r") as f:
print(f.read())
11. การจัดการสตริง
สตริงของ Python มีเมธอดที่ทรงพลัง เช่น strip(), replace(), และ split()
text = " สวัสดี โลก "
print(text.strip())
print(text.upper())
print(text.replace("สวัสดี", "ไฮ"))
print(text.split())
12. คลาสและอ็อบเจ็กต์
กำหนดพิมพ์เขียวที่นำกลับมาใช้ซ้ำได้ด้วยคลาส ใช้ __init__ เพื่อเริ่มต้นอ็อบเจ็กต์
class Person:
def __init__(self, name):
self.name = name
def greet(self):
return "สวัสดี ฉันชื่อ " + self.name
p = Person("Alice")
print(p.greet())
🐞 วิธีดีบักโค้ด Python ออนไลน์
ใช้ดีบักเกอร์ Python ออนไลน์เพื่อค้นหาข้อผิดพลาดทางตรรกะโดยไม่ต้องติดตั้ง Python หรือ IDE การดีบักทำงานด้วย Python 3.10–3.13 ในโหมดเซิร์ฟเวอร์
- เลือกเวอร์ชัน Python ที่ทำงานบนเซิร์ฟเวอร์
- คลิกข้างหมายเลขบรรทัดเพื่อตั้ง breakpoint
- เลือก Debug เพื่อเริ่มโปรแกรมและหยุดที่ breakpoint แรก
- ตรวจสอบบรรทัดและตัวแปร แล้วใช้ Continue, Step Over, Step Into หรือ Step Out
- เลือก Stop เพื่อจบการดีบัก
เริ่มจากตัวอย่างขนาดเล็กที่ทำให้เกิดปัญหาได้ และตั้ง breakpoint ก่อนค่าจะผิดจากที่คาดไว้ โหมดเซิร์ฟเวอร์ยังใช้ไฟล์ใน workspace และไลบรารีที่ติดตั้งแล้วได้