Tải bản đầy đủ (.pdf) (25 trang)

Quyển 1. Lý Thuyết và bài tập lập trình Python.pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (608.43 KB, 25 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>TIN HỌC BÌNH PHƯƠNG </b>

<b>LÝ THUYẾT VÀ BÀI TẬP </b>

<b>TIN HỌC LẬP TRÌNH PHỔ THƠNG </b>

<b>Giáo viên: NGUYỄN THẾ PHƯƠNG </b>

<i>Bình Tân, tháng 06 năm 2023 </i>

<i><b>Tài liệu lưu hành nội bộ </b></i>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>LỜI NÓI ĐẦU </b>

Trước khi bắt đầu bước vào học ngơn ngữ lập trình Python, bạn cần biết những từ khóa và quy ước quan trọng của ngơn ngữ này:

<b>1. * Từ khố trong Python (có phân biệt chữ hoa và chữ thường). and </b>

<b>as assert break class continue </b>

<b>def del elif else except </b>

<b>exec finally </b>

<b>for from global </b>

<b>if import </b>

<b>in is lambda </b>

<b>not or pass print raise return </b>

<b>try while </b>

<b>with yield </b>

<b>2. * Lệnh và cú pháp trong Python: </b>

- Sử dụng # để chú thích 1 dịng trong chương trình # comment - Sử dụng ''' để chú thích 1 đoạn '''

- Dấu ' và " word = 'word'

cau_van = "Chào mừng bạn đến với ngơn ngữ lập trình Python." doan_van = """Ngày đầu tiên đi học, mẹ dắt em...

một mình em đến lớp. """

- Sử dụng canh lề (bắt buộc) để bao khối lệnh của hàm, lớp hoặc luồng điều khiển - Số khoảng trắng dùng để canh lề có thể nhiều ít tuỳ ý nhưng tất cả lệnh trong một khối

phải được canh lề như nhau.

- Lệnh được viết trên nhiều dòng sử dụng ký tự \

<i><b>total = item_one +\ item_two + \ </b></i>

<b>import sys; x = 'foo'; sys.stdout.write(x + '\n') </b>

- Nhóm nhiều câu lệnh đơn tạo nên một khối lệnh và cũng được gọi là bộ (suites) - Các lệnh phức như if, while, def và class cần một dòng header và một bộ

- Dịng header bắt đầu câu lệnh (bằng một từ khố tương ứng ví dụ như if, def,…) và

<b>kết thúc bằng dấu hai chấm : theo sau là một tập hợp các câu lệnh (suite) </b>

def hi(name):

print 'Hello ' + name print 'Have a good day!' hi('nghi')

<i>Giờ chúng ta bắt đầu làm quen với Pythong nhé! </i>

<b>(suite) tập hợp các câu lệnh </b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>NGÔN NGỮ LẬP TRÌNH PYTHON I. TỐN TỬ: </b>

<small>− </small> Tốn tử số học: +, -, *, /, % (chia lấy dư), ** (lũy thừa)

<small>− </small> Toán tử so sánh: == (bằng), != (không bằng), > (lớn hơn), < (nhỏ hơn), >= (lớn hơn hoặc bằng), <= (nhỏ hơn hoặc bằng)

<small>− </small> Toán tử logic: and (và), or (hoặc), not (phủ định)

<b>II. KIỂU DỮ LIỆU: </b>

<b>1. Kiểu dữ liệu số nguyên (int): </b>

<b>7. Kiểu dữ liệu từ điển (dictionary): </b>

person = {"name": "Alice", "age": 25}

<b>8. Kiểu dữ liệu tập hợp (set): </b>

<i><b>c) Thay đổi giá trị của một phần tử trong danh sách: </b></i>

fruits[2] = "grape"

print(fruits) # Output: ["apple", "banana", "grape"]

<i><b>d) Thêm phần tử vào danh sách: </b></i>

fruits.append("kiwi")

print(fruits) # Output: ["apple", "banana", "grape", "kiwi"]

<i><b>e) Xóa phần tử khỏi danh sách: </b></i>

del numbers[2]

print(numbers) # Output: [1, 2, 4, 5]

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<i><b>f) Duyệt qua danh sách sử dụng vòng lặp: </b></i>

for fruit in fruits: print(fruit)

<i><b>g) Sử dụng các phương thức có sẵn của danh sách: </b></i>

numbers.sort() # Sắp xếp danh sách theo thứ tự tăng dần print(numbers)

<i>Để sắp xếp danh sách theo thứ tự giảm dần trong Python, bạn có thể sử dụng tham số reverse=True trong phương thức sort(): </i>

numbers.sort(reverse=True) # Sắp xếp danh sách theo thứ tự giảm dần print(numbers)

<b>III. CÁC CÂU LỆNH VÀ CẤU TRÚC ĐIỀU KHIỂN: 1. Cấu trúc rẽ nhánh (if-else): </b>

Kiểm tra một điều kiện và thực hiện các hành động khác nhau dựa trên kết quả của điều kiện.

<b>a) Cấu trúc điều khiển dạng thiếu: </b>

<i><b>Ví dụ: Cấu trúc điều khiển if </b></i>

x = 10 if x > 5:

print("x lớn hơn 5")  Kết quả: x lớn hơn 5

<b>b) Cấu trúc điều khiển dạng đủ: </b>

<i><b>Ví dụ : Cấu trúc điều khiển if-else </b></i>

x = 10 if x > 5:

print("x lớn hơn 5") else:

print("x nhỏ hơn hoặc bằng 5")  Kết quả: x lớn hơn 5

<b>2. Câu lệnh lặp: a) Vịng lặp for: </b>

<i><b>Ví dụ 1: In các phần tử trong danh sách danh_sach = [1, 2, 3, 4, 5] </b></i>

<b>for phan_tu in danh_sach: </b>

<i><b>Ví dụ 3: Cấu trúc điều khiển + vịng lặp for </b></i>

danh_sach = [1, 2, 3, 4, 5] for phan_tu in danh_sach: if phan_tu % 2 == 0: print(phan_tu, "là số chẵn")

<i><b>Kết quả: Nếu nhập 2 hoặc 4  là số chẵn; </b></i>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>b) Vịng lặp while: </b>

<i><b>Ví dụ 1: In các số từ 1 đến 5 bằng vòng lặp while </b></i>

i = 1

while i <= 5: print(i) i += 1

 Kết quả: Các phần tử được in ra từ 1 đến 5 và mỗi phần tử trên 1 dịng

<i><b> Ví dụ 2: Tính tổng các số từ 1 đến 10 bằng vòng lặp while </b></i>

tong = 0 i = 1

while i <= 10: tong += i i += 1

print("Tổng các số từ 1 đến 10 là:", tong)  Kết quả: Tổng các số từ 1 đến 10 là: 55

<i><b>Ví dụ 3: Cấu trúc điều khiển + vòng lặp while </b></i>

i = 1

while i <= 5: if i % 2 == 0:

print(i, "là số chẵn") else:

print(i, "là số lẻ") i += 1

 Kết quả: 1 là số lẻ; 2 là số chẵn; 3 là số lẻ; 4 là số chẵn; 5 là số lẻ

<b>IV. CÁC CÂU LỆNH CƠ BẢN: </b>

<small>− </small> Câu lệnh gán giá trị: gán giá trị cho một biến. Ví dụ: x = 5 + Phép gán giá trị biến:

x = 5 y = 10 tong = x + y

print("Tổng của x và y là:", tong) + Phép gán giá trị hằng số:

PI = 3.14 ban_kinh = 5

dien_tich = PI * ban_kinh * ban_kinh print("Diện tích hình tròn là:", dien_tich)

<small>− </small> Câu lệnh in (print): in một giá trị ra màn hình. Ví dụ: print("Hello World")

<small>− </small> Câu lệnh nhập (input): nhận giá trị từ người dùng. Ví dụ: name = input("Enter your name: ")

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>V. HÀM VÀ CÁCH DÙNG HÀM: 1. Hàm về số học và logic: </b>

<b>• print(): Hàm này được sử dụng để in ra màn hình các đối tượng được truyền vào. </b>

print("Hello, world!")

<b>• input(): Hàm này được sử dụng để nhận đầu vào từ người dùng thơng qua bàn phím. name = input("Nhập tên của bạn: ") </b>

<b>• sum(): Hàm này được sử dụng để tính tổng các phần tử trong một iterable (như danh </b>

sách, tuple, hoặc dãy số). numbers = [1, 2, 3, 4, 5] total = sum(numbers)

<b>• sorted(): Hàm này được sử dụng để sắp xếp một iterable và trả về một danh sách các </b>

phần tử đã được sắp xếp.

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] sorted_numbers = sorted(numbers)

<b>• max(): Hàm này được sử dụng để trả về phần tử lớn nhất trong một iterable hoặc </b>

length = len(s) # length = 13

<b>• lower(): Hàm này chuyển tất cả các ký tự trong chuỗi thành chữ thường. </b>

s = "Hello, World!"

lower_s = s.lower() # lower_s = "hello, world!"

<b>• upper(): Hàm này chuyển tất cả các ký tự trong chuỗi thành chữ hoa. </b>

s = "Hello, World!"

upper_s = s.upper() # upper_s = "HELLO, WORLD!"

<b>• strip(): Hàm này loại bỏ khoảng trắng ở đầu và cuối chuỗi. </b>

s = " Hello, World! "

stripped_s = s.strip() # stripped_s = "Hello, World!"

<b>• split(): Hàm này tách chuỗi thành một danh sách các chuỗi con dựa trên một ký tự </b>

phân tách.

s = "apple,banana,orange"

fruits = s.split(",") # fruits = ["apple", "banana", "orange"]

<b>• join(): Hàm này nối các phần tử của một iterable thành một chuỗi, sử dụng chuỗi gọi </b>

phương thức như ký tự phân tách.

fruits = ["apple", "banana", "orange"]

s = ",".join(fruits) # s = "apple,banana,orange"

<b>• replace(): Hàm này thay thế tất cả các xuất hiện của một chuỗi con trong chuỗi bằng </b>

một chuỗi khác.

s = "I like programming in Python"

new_s = s.replace("Python", "JavaScript") # new_s = "I like programming in JavaScript"

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>3. Hàm tự định nghĩa: def ten_ham(tham_so): return gia_tri </b>

<small>− </small> Hàm là một khối mã có thể được gọi và thực hiện một tác vụ cụ thể.

<small>− </small> Hàm có thể nhận đầu vào (tham số) và trả về một giá trị (nếu cần). Ví dụ: def square(x): return x ** 2

<b>• Hàm tìm giá trị lớn nhất: </b>

<b>def tim_gia_tri_lon_nhat(arr): </b>

max_value = arr[0] for num in arr:

if num > max_value: max_value = num

for _ in range(n): result *= x return result

<i><b># Sử dụng hàm </b></i>

base = 2 exponent = 3

power = tinh_luy_thua(base, exponent) print(f"{base} mũ {exponent} = {power}")

<i><b># Sử dụng hàm </b></i>

number = 17

if nguyen_to(number):

print(f"{number} là số nguyên tố") else:

print(f"{number} không phải là số nguyên tố")

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>VI. CHƯƠNG TRÌNH CON </b>

<i><b>Ví dụ 1: Viết một thủ tục tìm căn bậc 2 của N trong Python, bạn có thể sử dụng cú pháp </b></i>

sau:

def tinh_can_bac_hai(N): can_bac_hai = N ** 0.5 return can_bac_hai

so = int(input("Nhập số nguyên: ")) ket_qua = tinh_can_bac_hai(so)

print("Căn bậc hai của", so, "là", ket_qua)

<b> Thủ tục có tên là tinh_can_bac_hai nhận một tham số N. Thủ tục này tính căn bậc hai </b>

của N bằng cách sử dụng toán tử ** với mũ là 0.5 thủ tục trả về kết quả căn bậc hai.

<i><b>Ví dụ 2: Viết chương trình nhập vào số nguyên n, liệt kê các ước là số nguyên tố. Sử </b></i>

dụng thủ tục tìm số nguyên tố. def nguyen_to(n):

def liet_ke_uoc_nguyen_to(n):

uoc_nguyen_to = [i for i in range(1, n + 1) if n % i == 0 and nguyen_to(i)] return uoc_nguyen_to

# Nhập số nguyên n từ người dùng n = int(input("Nhập số nguyên n: ")) # Liệt kê các ước là số nguyên tố của n

uoc_nguyen_to = liet_ke_uoc_nguyen_to(n)

print(f"Các ước nguyên tố của {n} là: {uoc_nguyen_to}")

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<b>VII. MỘT SỐ THUẬT TOÁN TRONG PYTHON: 1. Thuật toán Sắp xếp nổi bọt (Bubble Sort): </b>

<small>def bubble_sort(arr): n = len(arr) for i in range(n-1): for j in range(0, n-i-1): if arr[j] > arr[j+1]: </small>

<small> arr[j], arr[j+1] = arr[j+1], arr[j] arr = [64, 34, 25, 12, 22, 11, 90] </small>

<small>bubble_sort(arr) </small>

<small>print("Mảng đã được sắp xếp theo thứ tự tăng dần:") for i in range(len(arr)): </small>

<small> print(arr[i]) </small>

<b>2. Thuật toán Tìm kiếm nhị phân (Binary Search): </b>

def binary_search(arr, low, high, x): if high >= low:

mid = (high + low) // 2 if arr[mid] == x: return mid elif arr[mid] > x:

return binary_search(arr, low, mid - 1, x) else:

return binary_search(arr, mid + 1, high, x) else:

return -1

arr = [2, 3, 4, 10, 40] x = 10

result = binary_search(arr, 0, len(arr)-1, x) if result != -1:

print("Phần tử", x, "được tìm thấy tại vị trí", result) else:

print("Phần tử", x, "khơng có trong mảng")

<b>3. Thuật toán Quicksort: </b>

<small>def quicksort(arr): if len(arr) <= 1: return arr </small>

<small> pivot = arr[len(arr) // 2] </small>

<small> left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] </small>

<small> return quicksort(left) + middle + quicksort(right) arr = [64, 34, 25, 12, 22, 11, 90] </small>

<small>sorted_arr = quicksort(arr) </small>

<small>print("Mảng đã được sắp xếp theo thứ tự tăng dần:") for i in range(len(sorted_arr)): </small>

<small> print(sorted_arr[i]) </small>

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>VIII. NHẬP, XUẤT TỆP TRONG PYTHON </b>

Trong Python, để nhập và xuất dữ liệu từ tệp, chúng ta có thể sử dụng các hàm như open(), read(), write(), và close().

Đầu tiên, chúng ta cần mở tệp bằng cách sử dụng hàm open() với các tham số như tên tệp và chế độ (ví dụ: "r" để đọc, "w" để ghi, "a" để ghi thêm).

with open("tep_vao.txt", "r") as f: f.read ("Doc noi dung tu tep vao")

Sau đó, chúng ta có thể sử dụng các phương thức như read() để đọc dữ liệu từ tệp, write() để ghi dữ liệu vào tệp, và close() để đóng tệp sau khi hồn thành cơng việc.

Để ghi dữ liệu vào tệp, chúng ta có thể sử dụng code sau: with open("tep_ra.txt", "w") as f: f.write("Noi dung can ghi ra tep")

<b>Ví dụ 1. Nhập hai số nguyên từ tệp và xuất ra tệp ra số nào là số lớn nhất. </b>

with open('input.txt', 'r') as f: numbers = f.readlines() num1 = int(numbers[0]) num2 = int(numbers[1])

max_num = max(num1, num2) with open('output.txt', 'w') as f: f.write(str(max_num))

<b>Ví dụ 2. Nhập một chuỗi từ tệp và xuất ra chuỗi đảo ngược, ghi vào tệp. </b>

with open('input.txt', 'r') as f: string = f.read().strip() reversed_string = string[::-1] with open('output.txt', 'w') as f: f.write(reversed_string)

<b>Ví dụ 3. Nhập một mảng số nguyên từ tệp, sắp xếp lại mảng tăng dần. </b>

with open('input.txt', 'r') as f: numbers = f.readlines()

numbers = [int(x) for x in numbers] numbers.sort()

with open('output.txt', 'w') as f: for num in numbers:

f.write(str(num) + '\n')

<b>IX. BÀI TẬP VẬN DỤNG </b>

<b>SỬ DỤNG TOÁN TỬ </b>

<i><b>Bài 1. Viết một chương trình tính tổng của hai số nguyên. </b></i>

<i># Nhập hai số nguyên từ người dùng </i>

so1 = int(input("Nhập số thứ nhất: ")) so2 = int(input("Nhập số thứ hai: "))

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<i><b>Bài 2. Viết một chương trình tính tổng của hai số thực. </b></i>

# Nhập hai số thực từ người dùng so1 = float(input("Nhập số thứ nhất: ")) so2 = float(input("Nhập số thứ hai: ")) # Tính tổng hai số

tong = so1 + so2 # In kết quả

print("Tổng của hai số là:", tong)

<i><b>Bài 3. Viết một chương trình tính tổng của ba số nguyên. </b></i>

# Nhập ba số nguyên từ người dùng so1 = int(input("Nhập số thứ nhất: ")) so2 = int(input("Nhập số thứ hai: ")) so3 = int(input("Nhập số thứ ba: ")) # Tính tổng ba số

tong = so1 + so2 + so3 # In kết quả

print("Tổng của ba số là:", tong)

<i><b>Bài 4. Viết một chương trình tính hiệu của hai số ngun. </b></i>

# Nhập hai số nguyên từ người dùng so1 = int(input("Nhập số thứ nhất: ")) so2 = int(input("Nhập số thứ hai: ")) # Tính hiệu hai số

hieu = so1 - so2 # In kết quả

print("Hiệu của hai số là:", hieu)

<i><b>Bài 5. Viết một chương trình tính tích của hai số nguyên. </b></i>

# Nhập hai số nguyên từ người dùng so1 = int(input("Nhập số thứ nhất: ")) so2 = int(input("Nhập số thứ hai: ")) # Tính tích hai số

tich = so1 * so2 # In kết quả

print("Tích của hai số là:", tich)

<i><b>Bài 6. Viết một chương trình tính thương của hai số ngun. </b></i>

# Nhập hai số nguyên từ người dùng so1 = int(input("Nhập số thứ nhất: ")) so2 = int(input("Nhập số thứ hai: ")) # Kiểm tra nếu số thứ hai bằng 0 if so2 == 0:

print("Không thể chia cho 0") else:

# Tính thương hai số thuong = so1 / so2 # In kết quả

print("Thương của hai số là:", thuong)

<i><b>Bài 7. Viết một chương trình tính phần dư của hai số nguyên. </b></i>

# Nhập hai số nguyên từ người dùng

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

so1 = int(input("Nhập số thứ nhất: ")) so2 = int(input("Nhập số thứ hai: ")) # Kiểm tra nếu số thứ hai bằng 0 if so2 == 0:

print("Không thể chia cho 0") else:

# Tính phần dư hai số phan_du = so1 % so2 # In kết quả

print("Phần dư của hai số là:", phan_du)

<i><b>Bài 8. Viết một chương trình tính lũy thừa của một số nguyên. </b></i>

# Nhập số nguyên từ người dùng so = int(input("Nhập số nguyên: ")) # Nhập số mũ từ người dùng

mu = int(input("Nhập số mũ: ")) # Tính lũy thừa

ket_qua = so ** mu # In kết quả

print("Kết quả lũy thừa là:", ket_qua)

<i><b>Bài 9. Viết một chương trình tính căn bậc hai của một số thực. </b></i>

import math

# Nhập số thực từ người dùng so = float(input("Nhập số thực: ")) # Tính căn bậc hai

ket_qua = math.sqrt(so) # In kết quả

print("Căn bậc hai của số thực là:", ket_qua)

<i><b>Bài 10. Viết một chương trình tính tổng của các phần tử trong một danh sách. </b></i>

# In kết quả

print("Tổng của các phần tử trong danh sách là:", tong)

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<b>BÀI TẬP SỬ DỤNG KIỂU DỮ LIỆU </b>

<i><b>Bài 1. Viết một chương trình để tính để kiểm tra xem một số nguyên có phải là số chẵn hay </b></i>

không.

# Nhập số nguyên từ người dùng so = int(input("Nhập số nguyên: ")) # Kiểm tra số chẵn

if so % 2 == 0:

print("Số", so, "là số chẵn") else:

print("Số", so, "không phải là số chẵn")

<i><b>Bài 2. Viết một chương trình để tính để kiểm tra xem một số ngun có phải là số ngun tố </b></i>

hay khơng.

def kiem_tra_so_nguyen_to(n): if n < 2:

return False

for i in range(2, int(n**0.5) + 1): if n % i == 0:

return False return True

so_nguyen = int(input("Nhập một số nguyên: ")) if kiem_tra_so_nguyen_to(so_nguyen):

print(so_nguyen, "là số nguyên tố") else:

print(so_nguyen, "không là số nguyên tố")

<i><b>Bài 3. Viết một chương trình tính tổng của các phần tử trong một danh sách số nguyên. </b></i>

def tinh_tong(danh_sach): tong = 0

for so in danh_sach: tong += so

return tong

danh_sach_so = [1, 2, 3, 4, 5] tong = tinh_tong(danh_sach_so)

print("Tổng của các phần tử trong danh sách là:", tong)

<i><b>Bài 4. Viết một chương trình để tính để tìm giá trị lớn nhất trong một danh sách số nguyên. </b></i>

def tim_gia_tri_lon_nhat(danh_sach): gia_tri_lon_nhat = danh_sach[0] for so in danh_sach:

if so > gia_tri_lon_nhat: gia_tri_lon_nhat = so return gia_tri_lon_nhat danh_sach_so = [1, 2, 3, 4, 5]

gia_tri_lon_nhat = tim_gia_tri_lon_nhat(danh_sach_so) print("Giá trị lớn nhất trong danh sách là:", gia_tri_lon_nhat)

<i><b>Bài 5. Viết một chương trình tính tổng các chữ số của một số nguyên. </b></i>

def tinh_tong_chu_so(so_nguyen): tong = 0

</div>

×