Tư duy Tính toán

Biểu thức, Toán tử &
Nhập — xuất

Trường ĐH Công nghệ – Đại học Quốc gia Hà Nội

Quét mã QR để xem Slides tiếng Việt

QR code to Vietnamese slides

https://uet-iai-course.github.io/computational-thinking/2526-1/

1. Ví dụ thực tế:
Thu ngân
hiệu sách

Bài toán

Nhiệm vụ: Viết chương trình tính tổng tiền cho một hóa đơn.

  • Đầu vào: Danh sách sách trong hoá đơn. Ví dụ:
    # Tên Số lượng Đơn giá ($) Thành tiền ($)
    1 Book A 1 10.0 10.0
    2 Book B 2 2.5 5.0
  • Đầu ra: Tổng tiền cần thanh toán.
    • Trong ví dụ trên, tổng tiền là $15.0.

Phân rã & Mẫu chung

  • Tư duy tính toán: chia nhỏ vấn đề, tìm mẫu
  • Chia nhỏ vấn đề:
    • tổng_tiền = tổng của thành_tiền từng mục
  • Tìm mẫu:
    • thành_tiền = số_lượng × đơn_giá

Dữ liệu & Công thức

  • Dữ liệu:
    • Tên: chuỗi (str)
    • Số lượng: số nguyên (int)
    • Đơn giá / Thành tiền / Tổng tiền: số thực (float)
  • Công thức:
    • thành_tiền = số_lượng × đơn_giá

Biến, Kiểu dữ liệu, Biểu thức, Toán tử

Trong ví dụ trên:

  • Biến: tên, số_lượng, đơn_giá, thành_tiền, tổng_tiền
  • Kiểu dữ liệu: str, int, float
  • Biểu thức: số_lượng × đơn_giá
  • Toán tử: +, ×

2.
Biến,
Kiểu dữ liệu
& Gán

Biến là gì?

  • Biến dùng để tham chiếu & thao tác giá trị khi chạy chương trình.
  • Bản chất: tên gán cho một giá trị trong bộ nhớ.
  • Ví dụ: x = 5x là tên biến, 5 là giá trị kiểu int.

Quy tắc đặt tên biến (Python)

  • Chỉ gồm chữ cái, chữ số, và _; không bắt đầu bằng chữ số.
  • Phân biệt hoa–thường: myVarmyvar.
  • Không dùng từ khóa: if, for, ...

Kiểu dữ liệu phổ biến

  • Số (int, float): 5, 3.14
  • Boolean (bool): True / False
  • Chuỗi (str): 'Hello', "It's a good day"
  • Danh sách (list): [1, 2, 3]
  • Bộ (tuple): (1, 2, 3)
  • Tập hợp (set): {'Math', 'English'}
  • Từ điển (dict): {'name': 'Alice', 'age': 25}
  • NoneType: giá trị đặc biệt None

Xem kiểu & Gán giá trị

Dùng type(...) để xem kiểu của biến hoặc giá trị


>>> type(5)
<class 'int'>
>>> x = [1, 2, 3]
>>> type(x)
<class 'list'>
    

Gán giá trị cho biến bằng toán tử =


x = 5                       # gán cơ bản
a = b = c = 5               # gán cùng giá trị
x, y, z = 1, 2.5, "Python"  # gán nhiều giá trị
    

Kiểu động (Dynamic Typing)

  • Python không cần khai báo kiểu khi tạo biến.
  • Kiểu của biến phụ thuộc vào giá trị được gán và có thể thay đổi.

>>> x = 5
>>> type(x)
<class 'int'>
>>> x = "Hello"
>>> type(x)
<class 'str'>
  

Ép kiểu (Type Casting)

Ép kiểu: Chuyển đổi giá trị của một kiểu sang kiểu khác


s = "5"         # s là str
x = int(s)      # x là int
y = float(x)    # y là float
              

Biến cục bộ & Toàn cục

  • Cục bộ: chỉ dùng trong hàm.
    
    def f():
        x = 10   # cục bộ
        print(x)
    f()
    print(x)     # lỗi
          
  • Toàn cục: khai báo ngoài hàm, dùng được ở mọi nơi (⚠️ cần cẩn trọng).
    
    y = 20       # toàn cục
    def g():
        print(y)
    g()
    print(y)     # ok
          

3.
Biểu thức
& Toán tử

Biểu thức

Biểu thức = tổ hợp toán tửtoán hạng tạo ra giá trị.

Đơn giản

3 + 5
2 * (3 + 4)
        
Phức tạp

(a + b) / 2 > 10 and (a*b) % 2 == 0
        

Toán tử số học

Toán tử Mô tả
+ Cộng
- Trừ
* Nhân
/ Chia thường
// Chia lấy nguyên
% Chia lấy dư
** Lũy thừa

Toán tử số học: Ví dụ


>>> 3 + 5
8
>>> 10 - 2 * 3
4
>>> 7 / 2
3.5
>>> 7 // 2
3
>>> 7 % 2
1
>>> 2 ** 3
8
    

Toán tử so sánh

Toán tử Kết quả
== So sánh bằng
!= So sánh khác
< Nhỏ hơn
<= Nhỏ hơn hoặc bằng
> Lớn hơn
>= Lớn hơn hoặc bằng

⚠️ Với số thực: dùng math.isclose(a, b) thay cho ==.

Toán tử so sánh: Ví dụ


>>> 3 == 5
False
>>> 3 != 5
True
>>> 3 < 5
True
>>> 3 <= 3
True
>>> 3 > 5
False
>>> 3 >= 3
True
    

So sánh chuỗi

Chuỗi: so sánh từng ký tự theo mã Unicode.


>>> "apple" < "banana"
True
>>> "Apple" < "apple"   # chữ hoa < chữ thường
True
>>> "abc" < "abcd"      # chuỗi ngắn hơn < chuỗi dài hơn
True
    

So sánh Cấu trúc: List/Tuple

List/Tuple: so sánh từng phần tử từ trái sang phải.


>>> [1, 2, 3] == [1, 2, 3]
True
>>> (1, 2) != (1, 2, 0)
True
>>> [1, 2, 3] < [1, 2, 4]
True
>>> (1, 2) < (1, 2, 0)
True
>>> [1, 2, 3] < [1, 2]
False
    

Toán tử Logic

  • and: cả hai điều kiện đều đúng
  • or: ít nhất một điều kiện đúng
  • not: phủ định giá trị logic

>>> a = True
>>> b = False
>>> a and b
False
>>> a or b
True
>>> not a
False
        

Toán tử Bit (Bitwise)

  • Bitwise: thao tác trên từng bit của số nguyên.
  • Các toán tử:
    • &: AND
    • |: OR
    • ^: XOR
    • ~: NOT
    • <<: dịch trái
    • >>: dịch phải

Toán tử Bit: Ví dụ


a = 10         # 1010 (nhị phân)
b = 4          # 0100

print(a & b)   # 1010 & 0100 = 0000  -> 0
print(a | b)   # 1010 | 0100 = 1110  -> 14
print(~a)      # bit NOT của a       -> -11 (dạng bù 2)
print(a ^ b)   # 1010 ^ 0100 = 1110  -> 14
print(a >> 2)  # 1010 >> 2  = 0010   -> 2
print(a << 2)  # 1010 << 2  = 101000 -> 40
    

Toán tử Gán

  • Gán: dùng để lưu giá trị cho biến.
  • =: gán cơ bản.
  • +=, -=, *=, /=, ... : gán kèm tính toán.

a = 10
b = a       # b = 10
print(b)

b += a      # b = b + a = 20
print(b)

b -= a      # b = b - a = 10
print(b)

b *= a      # b = b * a = 100
print(b)

b <<= a     # dịch trái rồi gán
print(b)    # 102400
  

Toán tử Thành viên (Membership)

  • in: kiểm tra giá trị có trong tập hợp/chuỗi không.
  • not in: kiểm tra giá trị không có trong tập hợp/chuỗi.

>>> x = 24
>>> y = 20
>>> lst = [10, 20, 30, 40, 50]
>>> x in lst
False
>>> y in lst 
True
>>> x not in lst
True
>>> y not in lst
False
>>> "Hello" in "Hello World"
True
>>> "Python" not in "Hello World"
True
        

Độ ưu tiên & Kết hợp

Thứ tự Tên Toán tử
1 Ngoặc (), [], {}
2 Lũy thừa **
3 Cộng/Trừ đơn -a, +a, ~a
4 Nhân, Chia /, *, //, %
5 Cộng & Trừ +, -

Độ ưu tiên & Kết hợp

Thứ tự Tên Toán tử
6 Dịch bit <<, >>
7 AND bit &
8 XOR bit ^
9 OR bit |
10 So sánh >=, <=, >, <
11 Bằng/Khác ==, !=
12 Gán =, +=, -=, ...
13 Đồng nhất & Thành viên is, in, ...
14 Logic and, or, not

Biểu thức trong thực hành

Điều kiện trong câu lệnh rẽ nhánh / vòng lặp


if (score >= 5) and (absence < 3):
    print("Qua môn")

x = 0
while x < 10:
    x += 1
    

Biểu thức trong thực hành

Điều kiện trong danh sách


squares = [x**2 for x in range(10) if x % 2 == 0]

Biểu thức trong hàm


def square(x):
    return x**2

Biểu thức phức tạp


ok = max(a, b, c) > 10 and (a + b) % 2 == 0
    

4.
Nhập & Xuất
trong Python

Nhập dữ liệu với input()

  • input(): nhận dữ liệu từ người dùng.
  • Trả về giá trị dạng chuỗi (str).

>>> name = input("Nhập tên của bạn: ")
Nhập tên của bạn: Alice
>>> print("Xin chào,", name, "! Chào mừng bạn!")
Xin chào, Alice ! Chào mừng bạn!
        

Nhập nhiều giá trị

  • Dùng split() để tách nhiều giá trị nhập cùng lúc.

>>> x, y = input("Nhập 2 số: ").split()
Nhập 2 số: 10 20
>>> print("Số thứ nhất:", x)
Số thứ nhất: 10
>>> print("Số thứ hai:", y)
Số thứ hai: 20
    

Ép kiểu khi nhập

  • Giá trị từ input() luôn là chuỗi (str).
  • Dùng int() hoặc float() để chuyển đổi sang số nguyên hoặc số thực khi cần thiết.

>>> n = int(input("Có bao nhiêu bông hoa? "))
Có bao nhiêu bông hoa? 5
>>> print(n)
5
>>> price = float(input("Giá mỗi bông hoa: "))
Giá mỗi bông hoa: 2.5
>>> print(price)
2.5
        

Lỗi thường gặp khi nhập

  • Quên ép kiểu → kết quả sai hoặc lỗi.

>>> n = input("Nhập số: ")
Nhập số: 5
>>> print(n * 2)  # lặp chuỗi, không phải nhân số
55
>>> price = int(input("Giá: "))  # nhập 2.5 sẽ gây lỗi 
Giá: 2.5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '2.5'
        

Xuất dữ liệu với print()

  • print(): hiển thị văn bản, biến, biểu thức.

>>> name = input("Nhập tên: ")
Nhập tên: Alice
>>> print("Xin chào,", name, "! Chào mừng bạn!")
Xin chào, Alice ! Chào mừng bạn!
          

Xuất với .format()

  • Dùng .format() để chèn biến vào chuỗi mẫu.
  • Thứ tự chèn theo vị trí của dấu {}.

>>> name = "UET-FIT" 
>>> age = 30
>>> print("Xin chào, tôi là {} và {} tuổi.".format(name, age))
Xin chào, tôi là UET-FIT và 30 tuổi.
            

Xuất với f-string

  • f-string: định dạng chuỗi dễ dàng hơn.
  • Chèn biến trực tiếp trong dấu {}.
  • Hỗ trợ biểu thức và định dạng nâng cao.

>>> import datetime
>>> today = datetime.date.today()
>>> print(f"Hôm nay: {today:%d-%m-%Y}")
Hôm nay: 05-03-2024
>>> name = "UET-FIT"
>>> age = 30 
>>> print(f"Xin chào, tôi là {name}, {age} tuổi.")
Xin chào, tôi là UET-FIT, 30 tuổi.
          

Tổng kết

  • Biến: tên gắn với giá trị.
  • Kiểu quy định thao tác hợp lệ;
    • Kiểu động: thay đổi trong quá trình chạy.
  • Biểu thức = toán tử + toán hạng → tạo giá trị.
  • Toán tử: số học, so sánh, logic, bit, gán, kiểm tra phần tử; chú ý thứ tự ưu tiên.
  • I/O: input() trả về chuỗi; dùng print() với f-string hoặc .format().