กระดาษทดเขียนโปรแกรมม.1

In [1]:
# มีคนสงสัยว่า a,b = 3,4 แปลว่าอะไร
# แปลว่าให้ a มีค่า 3 และ b มีค่า 4
a, b  = 3, 4
In [2]:
a
Out[2]:
3
In [3]:
b
Out[3]:
4
In [4]:
# เขียนแบบนี้ก็ได้เหมือนกัน
(a, b) = (3, 4)
In [5]:
a
Out[5]:
3
In [6]:
b
Out[6]:
4
In [7]:
# ตัวอย่างพิมพ์ค่า a, b มาด้วย f-string
# ดูเพิ่มเติมได้ที่ https://realpython.com/python-f-strings/

print(f'a is {a}, b is {b}')
a is 3, b is 4
In [8]:
# ตัวอย่างลิสต์

mylist = [1,2,3,4]
In [9]:
print(mylist)
[1, 2, 3, 4]
In [10]:
# เพิ่มของเข้าไปในลิสต์ด้วย append

mylist.append(5)
print(mylist)
[1, 2, 3, 4, 5]
In [11]:
# append เพิ่มของทีละตัวเท่านั้น

mylist.append(6,7)
print(mylist)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-18e23e6dd11b> in <module>
      1 # append เพิ่มของทีละตัวเท่านั้น
      2 
----> 3 mylist.append(6,7)
      4 print(mylist)

TypeError: append() takes exactly one argument (2 given)
In [12]:
# เครื่องหมายเปอร์เซ็นต์ทำหน้าที่หาเศษจากการหารให้เรา
1024 % 16
Out[12]:
0
In [13]:
# 5 หารด้วย 2 เหลือเศษ 1
5 % 2
Out[13]:
1
In [14]:
# 1024 หารด้วย 7 เหลือเศษ 2
1024 % 7
Out[14]:
2
In [15]:
# ใช้ == ตรวจว่าสองข้างเท่ากันไหม
# ในที่นี้ 1024 หาร 16 ลงตัวหรือเปล่า (ดูว่าหารแล้วเศษเท่ากับ 0 หรือเปล่า)

1024 % 16  == 0
Out[15]:
True
In [16]:
# เราสามารถเอาความรู้นี้มาหาตัวประกอบของ 1024 ได้
# เอาเลข 1, 2, 3, ... 1024 ไปหารดูว่าหารลงตัวไหม
# ถ้าหารลงตัวก็เป็นตัวประกอบของ 1024

for i in range(1, 1024 + 1):
    if 1024 % i == 0:
        print(i)
1
2
4
8
16
32
64
128
256
512
1024
In [17]:
# หาตัวประกอบของ 577

for i in range(1, 577):
    if 576 % i == 0:
        print(i)
1
2
3
4
6
8
9
12
16
18
24
32
36
48
64
72
96
144
192
288
576
In [18]:
# ทำเป็นฟังก์ชั่นหาตัวประกอบของตัวเลช x ใดๆ

def หาตัวประกอบ(x):
    for i in range(1, x + 1):
        if x % i == 0:
            print(i)
In [19]:
หาตัวประกอบ(1)
1
In [20]:
หาตัวประกอบ(20)
1
2
4
5
10
20
In [21]:
หาตัวประกอบ(1234567)
1
127
9721
1234567
In [22]:
หาตัวประกอบ(12345678)
1
2
3
6
9
18
47
94
141
282
423
846
14593
29186
43779
87558
131337
262674
685871
1371742
2057613
4115226
6172839
12345678
In [23]:
หาตัวประกอบ(123456789)
1
3
9
3607
3803
10821
11409
32463
34227
13717421
41152263
123456789
In [24]:
# นับด้วยว่ามีตัวประกอบกี่ตัว

def หาตัวประกอบ(x):
    count = 0
    for i in range(1, x + 1):
        if x % i == 0:
            print(i)
            count = count + 1
    print("ตัวประกอบมี " + str(count) + " ตัว" )
In [25]:
หาตัวประกอบ(20)
1
2
4
5
10
20
ตัวประกอบมี 6 ตัว
In [26]:
# ฟังก์ชั่นที่ดีควรส่งผลลัพธ์กลับมาให้ผู้ใช้เอาไปทำอะไรต่อได้ให้เป็นประโยชน์มากขึ้น
# ดังนั้นเราจะส่งผลลัพธ์เป็นลิสต์ที่มีตัวประกอยไปให้ผู้ใช้แทนที่จะพิมพ์ในฟังก์ชั่นของเรา

def หาตัวประกอบ(x):
    factors = []
    for i in range(1, x + 1):
        if x % i == 0:
            factors.append(i)
    return(factors)

# สมมุติว่าเราไม่ชอบชื่อเดิมของฟังก์ชั่น เราจะตั้งชื่อใหม่ให้มันด้วยก็ได้

find_factors = หาตัวประกอบ
In [27]:
หาตัวประกอบ(20)
Out[27]:
[1, 2, 4, 5, 10, 20]
In [28]:
find_factors(20)
Out[28]:
[1, 2, 4, 5, 10, 20]
In [29]:
# ตัวอย่างเอาผลลัพธ์จากฟังก์ชั่นไปทำอะไรต่อ
# ในที่นี้เอามาดูว่า 20 มีตัวประกอบกี่ตัวด้วย len(...)

f = หาตัวประกอบ(20)
print(len(f))
6
In [30]:
# ไล่ดูว่าตัวเลข 1 ถึง 10 แต่ละตัวมีตัวประกอบกี่ตัว

for n in range(1,11):
    factors = หาตัวประกอบ(n)
    print(n, len(factors))
1 1
2 2
3 2
4 3
5 2
6 4
7 2
8 4
9 3
10 4
In [31]:
# เรียงลำดับเลข 1-100 ตามลำดับจำนวนตัวประกอบของมันจากมากไปน้อย

results = []  #ลิสต์ที่จะเก็บคู่ลำดัย (จำนวนตัวประกอบ, ตัวเลข)
for n in range(1,101):  #ไล่ตัวเลขไปตั้งแต่ 1-100
    factors = find_factors(n)  #หาตัวประกอบของมัน
    results.append((len(factors),n)) #เก็บคู่ลำดับ (จำนวนตัวประกอบ, ตัวเลข) ไว้ในลิสต์
print(results)  #พิมพ์ลิสต์มาดู
print("-" * 100) #พิมพ์บรรทัดคั่น
print(sorted(results, reverse=True)) #เรียงลำดับ (จำนวนตัวประกอบ, ตัวเลข) ตามจำนวนตัวประกอบจากมากไปน้อยด้วย sorted(..., reverse=True)
    
[(1, 1), (2, 2), (2, 3), (3, 4), (2, 5), (4, 6), (2, 7), (4, 8), (3, 9), (4, 10), (2, 11), (6, 12), (2, 13), (4, 14), (4, 15), (5, 16), (2, 17), (6, 18), (2, 19), (6, 20), (4, 21), (4, 22), (2, 23), (8, 24), (3, 25), (4, 26), (4, 27), (6, 28), (2, 29), (8, 30), (2, 31), (6, 32), (4, 33), (4, 34), (4, 35), (9, 36), (2, 37), (4, 38), (4, 39), (8, 40), (2, 41), (8, 42), (2, 43), (6, 44), (6, 45), (4, 46), (2, 47), (10, 48), (3, 49), (6, 50), (4, 51), (6, 52), (2, 53), (8, 54), (4, 55), (8, 56), (4, 57), (4, 58), (2, 59), (12, 60), (2, 61), (4, 62), (6, 63), (7, 64), (4, 65), (8, 66), (2, 67), (6, 68), (4, 69), (8, 70), (2, 71), (12, 72), (2, 73), (4, 74), (6, 75), (6, 76), (4, 77), (8, 78), (2, 79), (10, 80), (5, 81), (4, 82), (2, 83), (12, 84), (4, 85), (4, 86), (4, 87), (8, 88), (2, 89), (12, 90), (4, 91), (6, 92), (4, 93), (4, 94), (4, 95), (12, 96), (2, 97), (6, 98), (6, 99), (9, 100)]
----------------------------------------------------------------------------------------------------
[(12, 96), (12, 90), (12, 84), (12, 72), (12, 60), (10, 80), (10, 48), (9, 100), (9, 36), (8, 88), (8, 78), (8, 70), (8, 66), (8, 56), (8, 54), (8, 42), (8, 40), (8, 30), (8, 24), (7, 64), (6, 99), (6, 98), (6, 92), (6, 76), (6, 75), (6, 68), (6, 63), (6, 52), (6, 50), (6, 45), (6, 44), (6, 32), (6, 28), (6, 20), (6, 18), (6, 12), (5, 81), (5, 16), (4, 95), (4, 94), (4, 93), (4, 91), (4, 87), (4, 86), (4, 85), (4, 82), (4, 77), (4, 74), (4, 69), (4, 65), (4, 62), (4, 58), (4, 57), (4, 55), (4, 51), (4, 46), (4, 39), (4, 38), (4, 35), (4, 34), (4, 33), (4, 27), (4, 26), (4, 22), (4, 21), (4, 15), (4, 14), (4, 10), (4, 8), (4, 6), (3, 49), (3, 25), (3, 9), (3, 4), (2, 97), (2, 89), (2, 83), (2, 79), (2, 73), (2, 71), (2, 67), (2, 61), (2, 59), (2, 53), (2, 47), (2, 43), (2, 41), (2, 37), (2, 31), (2, 29), (2, 23), (2, 19), (2, 17), (2, 13), (2, 11), (2, 7), (2, 5), (2, 3), (2, 2), (1, 1)]