BIẾN (VARIABLES) LÀ GÌ?
Trong chương trước ta có dùng một biến có tên là x và trị số của nó biến thiên, thay đổi từ 0 đến 99. Vậy x là một biến. Vậy Biến là cái mà ta muốn máy điện toán ghi nhớ trong ký ức (bộ nhớ) trong khi chạy chương trình. Mỗi biến sẽ có một cái tên do ta đặt cho, nó sẽ là một vùng trong bộ nhớ và có điạ chỉ để máy có thể truy xuất và những gì chứa trong đó thay đổi. x bài trên chỉ là một thí dụ. Bạn có thể cho tên (name) cuả biến là i, là y là z hay gì cũng được. Biến có thể chứa số, chữ, những ký hiệu (symbols), câu văn (sentences), chuỗi (strings) v.v…Khi ta viết: x = 10.2 có nghiã ta chỉ định (assign) gán, số 10.2 vào một biến tên x. Hay khi ta viết yourname = “Van Khiem” có nghiã ta cho cái tên Van Khiem vào một Biến có tên yourname trong máy ở một điạ chỉ (address) nào đó do máy tự động làm, ta không cần biết. Sau đây là một chương trình làm thí dụ về Biến dùng trong Python:
# thankyou2.py – thư trẻ cám ơn bạn bè mua sách của trường tentoi = "Van Khiem" # bạn cho tên trẻ vào tuoitoi = 7 # bạn cho tuổi của trẻ vào tenban = input("What is your name? ") # trẻ hỏi tên người bạn mình tuoiban = input("How old are you? ") # trẻ hỏi tuổi của người bạn print("My name is", tentoi, ", and I am", tuoitoi, "years old.") print("Your name is", tenban, ", and you are", tuoiban, ".") print("Thank you for buying my book,", tenban, "!")
Trẻ này tên Van Khiem, 7 tuổi. Cháu nói tên, tuổi mình, hỏi tên tuổi bạn của cháu rồi cám ơn bạn đã mua sách. Trong chương trình trên tentoi, tuoitoi, tenban, tuoiban là những Biến, Biến tentoi được gán (assign) chữ Van Khiem (vì là chữ nên phải để trong ngoặc kép theo syntax của Python), biến tuoitoi được gán số 7 (số không để trong ngoặc kép). Những biến tenban, tuoiban vì phải cho tên và tuổi bạn của trẻ từ bàn phím nên phải dùng hàm (function: những chương trình con của Python soạn sẵn) input().
Bài tập: Bạn gọi IDLE để type chương trình trên rồi bấm Run->Run Module thử.
SỐ (NUMBERS) LÀ NHỮNG GÌ TRONG PYTHON?
Trong Python có 2 loại số: Integer number (số nguyên) và Floating point number (số lẻ, decimal numbers). Ngoài ra còn có Boolean number (số Boole chỉ có 2 trị số là True đúng và False sai) và cả Complex numbers (số tạp).
NHỮNG TOÁN TỬ (OPERATORS) TRONG PYTHON
Ngoài cộng, trừ, nhân, chia Python còn làm được những phép toán khác nữa, gọi chung là những Python operators (Toán tử Python) như bảng sau:
Ký hiệu Toán | Toán tử Python | Tên toán tử | Ví dụ | Kết quả |
+ | + | Addition (Cộng) | 5 + 6 | 11 |
– | – | Subtraction (Trừ) | 8 – 2 | 6 |
x | * | Multiplication (Nhân) | 5 * 3 | 15 |
÷ | / | Division (Chia) | 9 / 3 | 3 |
42 | ** | Exponent or Power
(Luỹ thừa) |
8 ** 2 | 64 |
() | () | Parentheses
(grouping) Ngoặc đơn |
(4 + 3) * 3 | 21 |
PYTHON SẼ LÀM TOÁN (MATH) THẾ NÀO TRONG PYTHON SHELL (cửa sổ window trên màn hình để bạn soạn chương trình như đã đề cập trong chương trước).
Xem bảng sau đây khi bạn gõ vào python shell, sau dấu promt >>> rồi xem kết quả (nhớ space giữa các số và toán tử):
Bạn sẽ thấy khi bạn gõ một biểu thức (expression) toán học, thí dụ 4 ** 2 rồi nhấn ENTER trên bàn phím (keyboard) thì Python cho kết quả là 16 ngay.
Bài tập: Bạn cho trẻ cho nhiều biểu thức khác nhau sau mỗi dấu >>> rồi nhấn ENTER sau đó để xem kết quả.
SAI “VĂN PHẠM” SYNTAX ERROR LÀ GÌ?
Xem bảng sau đây khi bạn gõ các biểu thức vào sau dấu promt >>> và xem kết quả:
Bạn thấy khi cho biểu thức 3 + 3 = máy sẽ cho một vệt đỏ sau dấu = và dưới đó có hàng chữ đỏ SyntaxError: invalid syntax. Đó là vì trong “văn phạm” của Python, không cần phải có dấu này trong biểu thức. Chỉ cần nhấn ENTER là xong. SyntaxError có thể xảy ra dưới nhiều hình thức, chẳng hạn viết tên function sai: input() lại viết thành imput hay thiếu dấu ngoặc v.v…
BIẾN (VARIABLES) TRONG PYTHON SHELL
Xem bảng sau đây khi bạn gõ vào sau dấu promt >>> và xem kết quả
Khi bạn gõ x = 5 có nghiã bạn đã assign (chỉ định, gán) trị số 5 vào biến x. Nhớ phải có 2 cái blancs (space, khi bạn bấm thanh dài trên keyboard) 2 bên dấu = kẻo bị syntax error. Ở dấu >>> sau bạn bấm x rồi ENTER máy sẽ cho ra kết quả là 5. Kế đó bạn cho biểu thức x * 2, máy sẽ cho kết quả là 10 v.v…Chỉ có một điều đặc biệt là khi bạn cho biểu thức x = x – 7 rồi kế đó ở dòng dưới bạn type x thì bạn thấy kết quả là 2. Máy không báo SyntaxError. Làm sao mà x bằng x-7 được?. Trong toán học như vậy là sai nhưng trong computer thì nó chỉ có nghiã bạn phải tính x-7 trước (sẽ là 2 trong thí dụ này) tức là 9-7 rồi lấy kết quả là 2 xong assign vào x trở lại. Như vậy x sẽ chứa 2 cho nên ở dòng sau, sau khi bạn gõ x rồi ENTER thì máy sẽ cho kết quả là 2, không có SyntaxError chi cả.
SỬ DỤNG TOÁN TỬ (OPERATORS)
Một thí dụ cho dễ hiểu: Nhà trường bảo con bạn bán sách Toán lớp 5 cho các bạn cùng lớp, thuế suất người mua mỗi quyển là 8%.. Cháu phải viết một chương trinh Python để giải quyết việc này. Cháu viết như sau:
# Mathbook.py – em bán sách # Ask the person how many books they want, get the # with eval() number_of_books = eval( input("How many books do you want: ") ) # Ask for the cost of each book cost_per_book = eval( input("How much does each book cost: ") ) # Calculate the total cost of the books as our subtotal subtotal = number_of_books * cost_per_book # Calculate the sales tax owed, at 8% of the subtotal tax_rate = 0.08 # we store 8% as the decimal value 0.08 sales_tax = subtotal * tax_rate # Add the sales tax to the subtotal for the final total total = subtotal + sales_tax # Show the user the total amount due, including tax print("The total cost is $", total) print("This includes $", subtotal, "for the book and") print("$", sales_tax, "in sales tax.")
Nếu thấy dễ hiểu rồi thì bạn có thể bỏ những dòng có dấu # vì chỉ là ghi chú cho dễ hiểu, là comments, máy không thi hành.
Kết quả chương trình sau khi Run sẽ như sau, với số sách mua là 15 và giá mỗi cuốn sách là $5 và thuế suất là 8%:
>>> ================== RESTART: ================================= How many books do you want: 15 How much does each book cost: 5 The total cost is $ 81.0 This includes $ 75 for the book and $ 6.0 in sales tax. >>>
Thí dụ này cho thấy sự kết hợp sử dụng variables (biến) và operators (toán tử). Một điểm đặc biệt là hàm eval(). Đó là hàm của Python đánh giá (evaluates) tức chuyển đổi những gì bạn cho vào từ bàn phím thành số vì bạn cần phải tính toán số tiền, thuế, tổng số.
Bài tập: bạn cho trẻ gõ chương trình này bằng IDLE rồi Run. Cho từ bàn phím số sách các bạn mua, giá mỗi quyển, rồi xem kết quả. Sau đó cho trẻ đổi chương trình thành ra mua ghế cho lớp học (20 ghế), giá 1 ghế 15$ và thuế suất 10%.
STRINGS (CHUỖI, HAY TEXT) TRONG PYTHON
String là text gồm những ký tự (chữ, số & các ký hiệu đặc biệt khác mà ta gõ từ bàn phím.). Khác nhau giữa strings và numbers là string không dùng để tính toán được. Muốn hiểu rõ string cùng những functions liên hệ, hãy xem chương trình sau:
# SayMyName.py – In tên trẻ 100 lần ten = input("What is your name? ") # Loop in tên trẻ 100 lần for x in range(100): # In tên trẻ 100 lần, cách nhau một space< print(ten, end = " ")
Cho Run chương trình này và giả sử cho tên trẻ là Anthony Nguyen, bạn sẽ có kết quả như sau:
>>> ================= RESTART: C:\PYTHONHUNGVIET\code\SayMyName.py ================= What is your name? Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony Nguyen Anthony >>>
Chương trình này lấy tên của trẻ gõ từ bàn phím rồi in ra tên ấy 100 lần mỗi tên cách nhau một space (1 blanc). Chỉ có một hàm đặc biệt là print(ten, end = “ ”). Trong hàm* này có 2 arguments là ten và end(), argument thứ 2 gọi là keyword argument là end = (“ “), có nghiã cuối mỗi argument đứng trước (ở đây là ten), khi print sẽ có một cái space giữa 2 cái tên. Nếu muốn cách ra 3 cái spces thì gõ 3 cái spaces (thanh dài ngang trên keyboard bấm 3 lần) trong 2 dấu ngoặc đôi “ “.
*Hàm (function) là những chương trình con viết sẵn mà trị của nó tuỳ thuộc vào những arguments bên trong ngoặc đôi, giống như hàm số trong toán học.
Bài tập: Bạn cho in tên trường học cuả trẻ 50 lần, cách nhau một cái space. Cho Run -> Run Module thử.
MỘT VÍ DỤ KHÁC VỀ STRINGS
Trong thí dụ này: bạn muốn khi cho tên (là một string) bạn hay con trẻ vào máy, máy sẽ in ra 100 cái tên ấy theo hình xoắn ốc. Ngoài ra bạn muốn dùng một cửa sổ bật lên (pop-op window) như dưới đây cho đẹp để cho tên vào:
Sau đây là chương trình thực hiện yêu cầu của bạn. Qua đó bạn sẽ hiểu thêm về string và một số functions mới của Python:
# SpiralMyName.py - Để in hình xoắn ốc màu tên của con cháu bạn import turtle # nhập chương trình turtle graphics của Python t = turtle.Pen() turtle.bgcolor("black") # màu nền colors = ["red", "yellow", "blue", "green"] # Hỏi tên bạn/trẻ, sử dụng hộp-bật textinput pop-up window trông đẹp hơn your_name = turtle.textinput("Enter your name", "What is your name?") # Vẽ hình xoắn ốc tên bạn lên màn hình 100 lần for x in range(100): t.pencolor(colors[x%4]) # Luân chuyển (rotate) qua 4 màu nói trên t.penup() # Nhấc bút của “con rùa” lên t.forward(x*4) # Cho con ruà nhích tới x*4 dots trên màn hình t.pendown() # Hạ bút xuống để viết tên, mỗi lúc một to ra t.write(your_name, font = ("Arial", int( (x + 4) / 4), "bold") ) # viết tên với font chữ là Arial, size là x + 4 / 4 và chữ đậm t.left(92) # Mũi tên (bút của con rùa) quay qua trái 92 độ.
Chữ đậm trong chương trình để bạn chú ý là những functions mới, khi gõ không cần phải chữ đậm.
Trong thí dụ trên, nếu bạn cho tên trẻ là Max chẳng hạn, bạn sẽ có hình vẽ như sau:
Bài tập: Bạn cho trẻ làm bài tập này với tên của trẻ thay vì là Max, rồi đổi font chữ là Calibri, cho “con rùa” quẹo phải (right) thay vì trái (left) phạm vi vòng lặp (range) là 50 thôi và danh sách (list) màu là colors = [“yellow”, “red”, “blue”, “purple”]
Một số Hàm (functions) hay lệnh mới của Python
Một variabe (Biến) có thể chứa chuỗi (strings), số (numbers) nhưng có thể cả một danh sách (list). List là một nhóm (group) những giá trị (values) ngăn cách bởi dấu phẩy (dấu ,) giữa 2 dấu móc [].
Như bài trên: biến colors chứa cả một list những màu đỏ, vàng, xanh dương, xanh lá cây: colors = [“red”, “yellow”, “blue”, “green”]. Có thể thêm một số màu nữa như colors = [“red”, “yellow”, “blue”, “green”, “orange”, “purple”, “white”, “gray”].
Bây giờ bạn xem chương trình sau đây để học và thực tập một số lệnh (hay functions) nữa của Python:
# ColorSpiralInput.py import turtle # Gọi chương trình turtle của Python chuyên để vẽ t = turtle.Pen() # Gán hàm turtle.Pen() của Python vào biến t để sau đó dùng cho gọn turtle.bgcolor("black") # nền đen # Lập danh sách 8 loại màu dùng những tên phải đúng như của Python qui định colors = ["red", "yellow", "blue", "green", "orange", "purple", "white", "gray"] # Hỏi trẻ cho vào bao nhiêu cạnh (sides) từ 1-8, trị định sẵn (default) là 4 sides = int(turtle.numinput("Number of sides", "How many sides do you want (1-8)?", 4, 1, 8)) # Vẽ một hình xoắn ốc màu tuỳ theo trẻ cho vào bao nhiêu cạnh for x in range(360): t.pencolor(colors[x % sides]) # Chỉ dùng đúng số của màu t.forward(x * 3 / sides + x) # Thay đổi kích thước (size) cho phù hợp với số cạnh t.left(360 / sides + 1) # Xoay 1 góc 360/số cạnh + 1 độ t.width(x * sides / 200) # Làm cho cây bút của “con rùa” to ra khi nó đi dần ra ngoài.
Trong bài này bạn sử dụng hàm turtle.numinput() với các arguments là “How many sides do you want (1-8)”, rồi đến 4, 1,8 . Số 4 ở đầu sẽ là trị định sẵn (default value) nghiã là khi Run bạn sẽ thấy số 4 để sẵn. Nếu bạn muốn 4 sides thì OK bấm ENTER cho vẽ ngay. Nếu không thì bạn gõ lại một số từ 1 đến 8 cạnh tuỳ thích.
Hàm width() làm cho “con rùa” to ra theo “công thức” (tuỳ bạn) của các arguments bên trong dấu ngoặc. Nên nhớ: hàm (function) luôn có dạng: tên function(argument1, argument2, etc…), Argument danh từ khoa học tiếng Việt là đối số.
Bài tập: Với bài tập trên, bạn cho trẻ đặt tên lại chương trình, cho sides đi từ 2 đến 6, default là 3. Colors chỉ còn 6 màu thôi. Run->Run Module thử xem.
PYTHON GIÚP TRẺ LÀM BÀI NHÀ (HOME WORK)
Bạn có thể viết chương trình cỏn con sau đây để máy làm tính cho trẻ, như một máy tính calculator:
#MathHomework.py print("MathHomework.py") # Hỏi trẻ cho bài toán nào? problem = input("Enter a math problem, or 'q' to quit: ") # Tiếp tục cho đến khi trẻ/bạn nhấn chữ q trên bàn phím để thôi (quit) while (problem != "q"): print("The answer to ", problem, "is:", eval(problem) ) # Ask for another math problem problem = input("Enter another math problem, or 'q' to quit: ") # Vòng lặp while loop này sẽ tiếp tục lập đi lập lại cho đến khi bạn nhấn chữ q trên keyboard để “nghỉ chơi”.
Hàm eval() có nghiã evaluation, là lượng giá, là tính toán. Nó làm tính theo những gì có trong argument (ở đây là problem, mà problem thì nhận được bài tính của bạn khi input).
Ngoài ra còn vòng lặp với hàm while (). Đây là vòng loop lập đi lập lại mãi cho đến khi nào bạn muốn thôi bằng cách nhấn chữ q trên bàn phím. Khác với vòng lặp for … in range () chỉ lập bao nhiêu lần giới hạn trong phạm vi range().
Vòng lặp While và For loops rất thông dụng trong thảo chương lập trình.
Sau đây là kết quả chạy thử chương trình trên với những bài toán mà bạn/trẻ cho vào để Python tính cho. Nhớ có “khoảng cách xã hội” là một space giữa các toán tử và các số.
================= RESTART: D:/PYTHONHUNGVIET/code/MathHomework.py ================ MathHomework.py Enter a math problem, or 'q' to quit: 7 / 2 The answer to 7 / 2 is: 3.5 Enter another math problem, or 'q' to quit: 7 // 2 The answer to 7 // 2 is: 3 Enter another math problem, or 'q' to quit: 7 % 2 The answer to 7 % 2 is: 1 Enter another math problem, or 'q' to quit: (3 + 5) * (4 / 2) The answer to (3 + 5) * (4 / 2) is: 16.0 Enter another math problem, or 'q' to quit: 9 ** 2 The answer to 9 ** 2 is: 81 Enter another math problem, or 'q' to quit: q >>>
Bài tập: Bạn cho trẻ soạn lại chương trình này: chỉ cho chấn dứt khi bạn nhấn chữ quit.