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

Quyển 2. Hướng dẫn giải bài tập lập trình Python thi Tin học trẻ bảng B.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 (1.41 MB, 32 trang )

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

<b>TÀI LIỆU THỰC HÀNH </b>

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

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

“Thầy truyền ngọn lửa đam mê, các em hãy tỏa sáng”

<i>Bình Tân, tháng 04 năm 2024 </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>Phần I. Cài đặt trình biên dịch ngơn ngữ lập trình Python</b>

Để soạn thảo và biên dịch ngơn ngữ lập trình Python cơ bản cần cài đặt một trong các chương trình sau: PyCharm, VS Code, Thony, Notepad++, v.v…

Chúng ta có thể cài đặt rất nhiều chương trình dịch ngơn ngữ lập trình Python. Tuy nhiên, trong tài liệu này tơi sẽ sử dụng trìn biên dịch Thony để giúp các em làm quen với ngôn ngữ Python một cách nhanh chóng và dễ dàng nhất. Truy cập vào đây để tải phần mềm Thony: Chọn bản Thony Official downloads for Windows:

<b>Installer with 64-bit Python 3.10, requires 64-bit Windows 8.1 / 10 / 11 </b>

thonny-4.1.1.exe (21 mb)

<b>Installer with 32-bit Python 3.8, suitable for all Windows versions since 7 </b>

thonny-py38-4.1.1.exe (20 MB) Sau khi cài đặt xong sẽ có giao diện rất đơn giản như hình:

Các phím tắt cơ bản giống với các ứng dụng khác của Windows

<b> Nhấn phím tắt F5 để chạy chương trình</b>

<b>. </b>

Vùng soạn Code

Vùng hiển thị kết quả Lệnh biên dịch và kiểm lỗi

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

<b>Phần II. Các khái niệm trong ngôn ngữ lập trình Python:</b>

Để soạn thảo và biên dịch ngơn ngữ lập trình Python cơ bản cần cài đặt một trong các chương trình sau: PyCharm, VS Code, Thony, Notepad++, v.v…

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

<b>Các từ khóa của Python 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>

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

- 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'

sentence = "This is a sentence." message = """This message will...

span several lines. """

- 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:

<b>if True: </b>

<b>print "Answer" print "True" else: </b>

<b>print "False" </b>

- 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>

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

- Dấu ; để cách nhiều lệnh trên dòng:

import sys; x = 'foo'; sys.stdout.write(x + '\n')

- 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à kết thúc bằng dấu hai chấm : theo sau là một suite

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

<b>Ví dụ: Lệnh Print để in dữ liệu ra màn hình. Lệnh Input để nhập dữ liệu vào </b>

<i><b>3. Biến, kiểu cơ bản, phép toán: </b></i>

<b>- Tên: ký tự bắt đầu phải là alphabet hoặc _ </b>

- <b>Không cần khai báo, chỉ gán giá trị (sử dụng dấu =) </b>

- Được tạo ra trong lần đầu gán giá trị - Phạm vi biến: cục bộ, toàn cục - Tham khảo đến đối tượng

- Thông tin về kiểu gắn liền với đối tượng - Kiểu cơ bản: int, float, complex, bool, string - Các phép toán số học: +, -, *, /, %, ** - Phép toán so sánh: ==, !=, >, >=, <, <= - Phép toán luận lý: and, or, not

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

<b>Phần III</b>

<b>. </b>

<b>Các cấu trúc lệnh trong Python: </b>

<i><b>1. Cấu trúc điều khiển rẽ nhánh </b></i>

Cấu trúc rẽ nhánh if if (cond1):

...

elif (cond2): ...

else:...

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

<i><b>2. Cấu trúc lặp while </b></i>

while (cond): ...

loop_body ...

<i><b>3. Cấu trúc lặp for </b></i>

for iter_var in seqence: ...

loop_body ...

return ...

– Tham số tùy chọn, có thể đặt giá trị mặc định

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

– Hàm có thể hoặc khơng trả về kết quả hoặc – Đệ quy

<b>Ví dụ: Một số hàm do người dùng tạo: </b>

---

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

print("Chào bạn ", ten, " lớp ", lop, " đến với ngơn ngữ lập trình Python".

<b>Bài tập 2:</b>Hãy nhập tên, nhập năm sinh, năm hiện tại. Xuất ra tên và tuổi của bạn.ten = input("Nhập tên của bạn: ")

ns = int(input("Nhập năm sinh của bạn: ")) nht = int(input("Nhập năm hiện tại: ")) tuoi = nht - ns

print("Xin chào,", ten) print("Bạn", tuoi, "tuổi.")

<b>Bài tập 3: </b>Nhập một số nguyên N, xuất ra màn hình N là số chẵn hay số lẻ. N = int(input("Nhập một số nguyên: "))

if N % 2 == 0:

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

print(N, "là số lẻ")

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

<b>Bài tập 4: </b>Nhập một số nguyên N, xuất ra màn hình N có chia hết cho 2 và 5 hay không? N = int(input("Nhập một số nguyên: "))

if N % 2 == 0 and N % 5 == 0: print(N, "chia hết cho cả 2 và 5") else:

print(N, "không chia hết cho cả 2 và 5")

<b>Bài tập 5: </b>Nhập một số nguyên N, xuất ra màn hình N là số ngun tố hay khơng? N = int(input("Nhập một số nguyên: "))

if N > 1:

for i in range(2, N): if (N % i) == 0:

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

else:

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

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

<b>Bài tập 6: </b>Nhập một số nguyên N, xuất ra màn hình N là số chính phương hay khơng? N = int(input("Nhập một số nguyên: "))

if N >= 0 and int(N**0.5)**2 == N: print(N, "là số chính phương") else:

print(N, "khơng là số chính phương")

<b>Bài tập 7: </b>Nhập một số nguyên N, xuất ra màn hình N là số hồn hảo hay khơng? N = int(input("Nhập một số ngun: "))

sum = 0

for i in range(1, N): if N % i == 0: sum += i if sum == N:

print(N, "là số hồn hảo") else:

print(N, "khơng là số hoàn hảo")

<b>Bài tập 8: </b>Nhập một số nguyên N, xuất ra màn hình các ước của N và tổng các ước của N? N = int(input("Nhập một số nguyên: "))

uoc = []

for i in range(1, N+1): if N % i == 0: uoc.append(i) tong_uoc = sum(uoc)

print("Các ước của", N, "là:", uoc)

print("Tổng các ước của", N, "là:", tong_uoc)

<b>Bài tập 9: </b>Nhập một số ngun N, xuất ra màn hình N có là số đối xứng hay không? N = int(input("Nhập một số nguyên: "))

reverse_N = int(str(N)[::-1]) if N == reverse_N:

print(N, "là số đối xứng") else:

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

print(N, "không là số đối xứng")

<b>Bài tập 10: </b>Nhập 4 số nguyên a, b, c, d. Xuất ra màn hình số lớn nhất, số nhỏ nhất? a = int(input("Nhập số nguyên a: "))

b = int(input("Nhập số nguyên b: ")) c = int(input("Nhập số nguyên c: ")) d = int(input("Nhập số nguyên d: ")) max_num = max(a, b, c, d)

min_num = min(a, b, c, d)

print("Số lớn nhất là:", max_num) print("Số nhỏ nhất là:", min_num)

<b>Bài tập 11: </b>Nhập 4 số nguyên a, b, c, d ngẫu nhiên. Sắp xếp lại các số theo thứ tự tăng dần? a = int(input("Nhập số nguyên a: "))

b = int(input("Nhập số nguyên b: ")) c = int(input("Nhập số nguyên c: ")) d = int(input("Nhập số nguyên d: ")) numbers = [a, b, c, d]

numbers.sort()

print("Các số theo thứ tự tăng dần là:", numbers)

<b>Bài tập 12: </b>Hãy nhập số nguyên N ngẫu nhiên. Xuất ra bảng cửu chương N? N = int(input("Nhập số nguyên N: "))

for i in range(1, 11): print(N, "x", i, "=", N*i)

<b>Bài tập 13: N</b>hập số nguyên N. Xuất ra kết quả N giai thừa? import math

N = int(input("Nhập số nguyên N: ")) factorial = math.factorial(N)

print("Kết quả N giai thừa là:", factorial)

<b>Bài tập 14: Nhập số nguyên N. Xuất ra tổng các chữ số của N? </b>

N = int(input("Nhập số nguyên N: ")) tong = 0

while N > 0: digit = N % 10 tong += digit N //= 10

print("Tổng các chữ số của N là:", tong)

<b>Bài tập 15: Cho dãy số Fibonaci: 3, 5, 8, 13, 21,…? Tìm số tiếp theo trong dãy? </b>

def fibonacci(n): if n <= 0: return 0 elif n == 1: return 1 else:

return fibonacci(n-1) + fibonacci(n-2) n = 6

nextnumber = fibonacci(n)

print("Số tiếp theo trong dãy là:" nextnumber)

Dùng lệnh

numbers.sort(reverse=True) để sắp xếp dãy số giảm dần

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

<b>Bài tập 16: Cho dãy số tăng: 1, 5, 9, 13, 17,…? Tìm số tiếp theo trong dãy? </b>

danhsach = [1, 5, 9, 13, 17] sotieptheo = danhsach[-1] + 4

print("Số tiếp theo trong dãy là: ", sotieptheo)

<b>Bài tập 17: Cho dãy số có dạng S = 1+ 1/3 + 1/7 + 1/11+1/n? Nhập N >= 15. Tính tổng A? </b>

N = int(input("Nhập giá trị của N (N >= 15): ")) S = 0

for n in range(1, N+1): S += 1/n

print("Tổng của dãy S là:", S)

<b>Bài tập 18: Nhập số từ 2 đến 8 hiển thị thứ từ Thứ 2 đến Chủ nhật. </b>

number = int(input("Nhập số từ 2 đến 8: ")) # Nhập số từ người dùng if number == 2:

print("Thứ 2") elif number == 3: print("Thứ 3") elif number == 4: print("Thứ 4") elif number == 5: print("Thứ 5") elif number == 6: print("Thứ 6") elif number == 7: print("Thứ 7") elif number == 8: print("Chủ nhật") else:

print("Số không hợp lệ")

<b>Bài tập 19: Nhập một số nguyên từ tệp SOVAO.txt, xuất ra SORA.txt các ước và tổng các </b>

ước chẵn của N?

def uoc_chan(n): uoc_chan = [] tong_uoc_chan = 0 for i in range(1, n+1): if n % i == 0:

uoc_chan.append(i) if i % 2 == 0:

tong_uoc_chan += i return uoc_chan, tong_uoc_chan file_vao = open("SOVAO.txt", "r") file_ra = open("SORA.txt", "w") n = int(file_vao.read())

uoc_chan, tong_uoc_chan = uoc_chan(n)

file_ra.write("Các ước của N là: " + str(uoc_chan) + "\n")

file_ra.write("Tổng các ước chẵn của N là: " + str(tong_uoc_chan)) file_vao.close()

file_ra.close()

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

<b>Lưu ý: Trước khi chạy code, hãy tạo một tệp SOVAO.txt và nhập số nguyên N vào tệp đó. </b>

<b>Bài tập 20: </b>Nhập hai số nguyên a, b từ tệp INPUT.txt, thực hiện tính tổng, hiệu, tích, thương của a và b rồi xuất kết quả ra tệp OUTPUT.txt.

file_vao = open("INPUT.txt", "r") file_ra = open("OUTPUT.txt", "w") a, b = map(int, file_vao.readline().split()) tong = a + b

hieu = a - b tich = a * b thuong = a / b

file_ra.write("Tổng của a và b là: " + str(tong) + "\n") file_ra.write("Hiệu của a và b là: " + str(hieu) + "\n") file_ra.write("Tích của a và b là: " + str(tich) + "\n") file_ra.write("Thương của a và b là: " + str(thuong)) file_vao.close()

<i><b># Ghi dãy số nhị phân vào tệp OUTPUT.txt </b></i>

with open("OUTPUT.txt", "w") as file: file.write(binary)

<i><b>Trong đoạn code trên, chúng ta định nghĩa một hàm decimal_to_binary để chuyển đổi </b></i>

<i>số nguyên từ hệ thập phân sang hệ nhị phân. Sau đó, chúng ta đọc số nguyên N từ tệp </i>

<i><b>INPUT.txt, chuyển đổi N sang dạng nhị phân bằng cách gọi hàm decimal_to_binary, và ghi </b></i>

<i>dãy số nhị phân vào tệp OUTPUT.txt. </i>

<b>Bài tập 22: </b>Nhập một dãy nhị phân từ tệp INPUT.txt. Xuất ra tệp OUTPUT.txt là một số thập phân tương ứng

def binary_to_decimal(binary): decimal = 0

power = len(binary) - 1 for digit in binary:

decimal += int(digit) * (2 ** power)

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

power – = 1 return decimal

<i><b># Đọc dãy nhị phân từ tệp INPUT.txt </b></i>

with open("INPUT.txt", "r") as file: binary = file.readline().strip()

<i><b># Chuyển đổi dãy nhị phân sang số thập phân </b></i>

decimal = binary_to_decimal(binary)

<i><b># Ghi số thập phân vào tệp OUTPUT.txt </b></i>

with open ("OUTPUT.txt", "w") as file: file.write(str(decimal))

<b>Bài tập 23: </b>Nhập một số nguyên từ tệp INPUT.txt. Xuất ra tệp OUTPUT.txt là một số bát phân tương ứng.

def decimal_to_octal(decimal): octal = ""

while decimal > 0:

remainder = decimal % 8 octal = str(remainder) + octal decimal = decimal // 8

<i><b># Ghi số bát phân vào tệp OUTPUT.txt </b></i>

with open("OUTPUT.txt", "w") as file:

<b> } </b>

roman = ""

for value, symbol in roman_numerals.items():

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

while decimal >= value: roman += symbol decimal -= value return roman

<i><b># Ghi số La Mã vào tệp OUTPUT.txt </b></i>

with open("OUTPUT.txt", "w") as file: file.write(roman)

<i><b>Trong đoạn code trên, ta định nghĩa một hàm decimal_to_roman để chuyển đổi một số </b></i>

<i>nguyên sang số La Mã. Sau đó, chúng ta đọc số nguyên từ tệp INPUT.txt, chuyển đổi số nguyên </i>

<i><b>sang số La Mã bằng cách gọi hàm decimal_to_roman, và ghi số La Mã vào tệp OUTPUT.txt. </b></i>

phân tương ứng.

def roman_to_decimal(roman):

<b> roman_numerals = { </b>

"M": 1000, "CM": 900, "D": 500, "CD": 400, "C": 100, "XC": 90, "L": 50, "XL": 40, "X": 10, "IX": 9, "V": 5, "IV": 4, "I": 1

<b> } </b>

decimal = 0 i = 0

while i < len(roman):

if i + 1 < len(roman) and roman[i:i+2] in roman_numerals: decimal += roman_numerals[roman[i:i+2]]

i += 2 else:

decimal += roman_numerals[roman[i]] i += 1

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

<i><b># Ghi số thập phân vào tệp OUTPUT.txt </b></i>

with open("OUTPUT.txt", "w") as file: file.write(str(decimal))

<b>Bài tập 1: Nhập một xâu kí tự và tạo một xâu mới gồm tất cả các chữ số của xâu ban đầu: </b>

s1 = input("Nhập xâu S1: ") s2 = ""

for char in s1: if char.isdigit(): s2 += char

print("Xâu mới gồm tất cả các chữ số của xâu S1 là:", s2)

<b>Bài tập 2: </b>Nhập một xâu kí tự và tạo một xâu mới gồm tất cả các chữ cái của xâu ban đầu: s1 = input("Nhập xâu S1: ")

s2 = ""

for char in s1: if char.isalpha(): s2 += char

print("Xâu mới gồm tất cả các chữ cái của xâu S1 là:", s2)

<b>Bài tập 3: </b>Nhập xâu S. Tìm ra có bao nhiêu chữ cái, bao nhiêu chữ số. s = input("Nhập xâu S: ")

count_letters = 0 count_digits = 0 for char in s: if char.isalpha(): count_letters += 1 elif char.isdigit(): count_digits += 1

print("Số lượng chữ cái trong xâu S là:", count_letters) print("Số lượng chữ số trong xâu S là:", count_digits)

<b>Bài tập 4: </b>Nhập vào xâu S1, chuyển đổi chữ hoa thành chữ thường s1 = input("Nhập xâu S1: ")

s2 = s1.lower()

print("Xâu mới sau khi chuyển đổi chữ hoa thành chữ thường là:", s2)

<b>Bài tập 5: </b>Nhâp vào xâu S, chuyển đổi xâu chữ thường thành chữ hoa s = input("Nhập xâu S: ")

s_upper = s.upper()

print("Xâu mới sau khi chuyển đổi chữ thường thành chữ hoa là:", s_upper)

<b>Bài tập 6: </b>Nhập vào tên họ của bạn, chuyển đổi chữ hoa đầu mỗi từ. cau = input("Nhập hãy nhập họ tên của bạn: ")

cau_title = cau.title()

print("Họ tên của bạn sau khi chuẩn hoá viết hoa đầu mỗi từ là: ", cau_title)

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

<b>Bài tập 7: </b>Nhập một câu. Xóa hết khoảng trắng thừa trong câu. cau = input("Nhập một câu: ")

tu = cau.split()

cau_moi = " ".join(tu)

print("Câu nhập vào sau khi chuẩn hoá là: ", cau_moi)

<b>Bài tập 8: </b>Nhập một xâu gồm chữ và số. Xóa hết số trong xâu chỉ còn lại chữ cái. xau = input("Nhập một xâu gồm chữ và số: ")

xau_moi = "" for ky_tu in xau: if ky_tu.isalpha(): xau_moi += ky_tu

print("Xâu sau khi xoá hết các số là: ", xau_moi)

<b>Bài tập 9: </b>Nhập một xâu gồm chữ và số. Xố hết các chữ cái chỉ cịn lại số. xau = input("Nhập một xâu gồm chữ và số: ")

xau_moi = "" for ky_tu in xau: if ky_tu.isdigit(): xau_moi += ky_tu

print("Xâu sau khi xoá hết các chữ cái chỉ còn số là: ", xau_moi)

<b>Bài tập 10: </b>Nhập một xâu gồm chữ, số và kí tự đặc biệt. Xố hết các kí tự đặc biệt trong xâu

xau = input("Nhập một xâu gồm chữ, số và kí tự đặc biệt: ") xau_moi = ""

for ky_tu in xau: if ky_tu.isalnum(): xau_moi += ky_tu

print("Xâu sau khi xố hết các kí tự đặc biệt là: ", xau_moi)

<b>Bài tập 11: </b>Nhập vào một câu. In ra câu đảo theo từng từ cau = input("Nhập vào một câu: ")

tu = cau.split() tu.reverse()

cau_dao = " ".join(tu) print(cau_dao)

<b>Bài tập 12: </b>In xâu S1 xuất hiện bao nhiêu lần trong xâu S2 S1 = input("Nhập xâu S1: ")

S2 = input("Nhập xâu S2: ") so_lan_xuat_hien = S2.count(S1)

print("Xâu S1 xuất hiện", so_lan_xuat_hien, "lần trong xâu S2")

<b>Bài tập 13: Nhập một câu. </b>Đếm số từ trong câu. cau = input("Nhập vào một câu: ")

tu = cau.split()

</div>

×