You are on page 1of 8

ÔN TẬP (Từ buổ i 1 đế n buổ i 6)

I. CƠ BẢN:
Bài 1: Biết lãi suất tiết kiệm là t%/tháng (nhập t từ bàn phím). Nhập số vốn ban đầu n và
số tháng gửi k. Tính số tiền nhận được sau k tháng.
Bài 2: Tiền điện hàng tháng được tính như sau:
- 100 số đầu tính m1 đồng/số
- từ số 101 trở lên tính m2 đồng/số
Nhập m1,m2, số điện năng tiêu thụ s. Hãy tính tiền điện phải trả.
Code Python
def bai2(m1, m2, s):
if (s < 100):
t = 100 * m1
print("so tien phai tra la:", t)
else:
t = 100 * m1 + (s - 100) * m2
print("so tien phai tra la:", t)

m1 = float(input("Nhap don gia cho 100 so dau: "))


m2 = float(input("Nhap don gia so 101 tro len: "))
s = int(input("Nhap so dien da dung trong thang: "))
bai2(m1, m2, s)

Bài 3: In ra m số nguyên tố đầu tiên


Input: Nhập vào số nguyên m
Process:
- Viết hàm kiểm tra tính nguyên tố của số k
+ nếu k<2: k không phải là số nguyên tố
+ lặp biến i từ 2 đến sqrt(k)
nếu k%i==0 thì k ko phải là số nguyên tố
- in ra các số nguyên tố:
+ gán biến dem=0, k=0
+ lặp: trong khi dem<m thì:
nếu k là nguyên tố: in k, tăng dem++
tăng k++
Output: in ra m số nguyên tố đầu tiên
Code python (chưa giải quyết trong hàm check_prime xét 2 đến sqrt(x))
def check_prime(x):
if (x < 2):
return 0
elif (x == 2):
return 1
t = range(x)
for i in t[2:]:
if (x % i == 0): return 0
return 1

m = int(input("Nhap m: "))
print("#", m, "so nguyen to dau tien la: ")
dem = k = 0
while (dem < m):
if (check_prime(k) == 1):
print(k)
dem = dem + 1
k = k + 1

Bài 4: Tìm phân số tối giản của một phân số. Ý tưởng: Ta tìm UCLN của tử số và mẫu số
bằng giải thuật Euclid, sau đó chia cả tử và mẫu cho UCLN.
Code Python
def ucln(a, b):
if a == 0 | b == 0:
return a + b
while (a != b):
if (a > b):
a = a - b
else:
b = b - a
return a

tu = int(input("Nhap tu so: "))


mau = int(input("Nhap mau so: "))

print('UCLN: ', ucln(tu, mau))


print("Phan so ban vua nhap la: ", tu, "/", mau)
print("Phan so toi gian la: ", tu / ucln(tu, mau), "/", mau / ucln(tu,
mau))

Bài 5: Nhập một số nguyên, đếm xem số đó có bao nhiêu chữ số và tính tổng các chữ số.
Bài 6: Tìm các số có 3 chữ số sao cho tổng lập phương của các chữ số bằng chính số đó
(gọi là các số Amstrong)
Code Python
t = range(10)
print('Danh sach so Amstrong co 3 chu so:')
for a in t[1:]:
for b in t:
for c in t:
if (a ** 3 + b ** 3 + c ** 3 == 100 * a + 10 * b + c):
print(100 * a + 10 * b + c)

Câu 7: Tìm và in ra màn hình tất cả các số hoàn hảo không vượt quá số n cho trước nhập
từ bàn phím. Số hoàn hảo là số bằng tổng các ước số của nó không kể ước số là chính số
đó. Ví dụ số 6 là số hoàn hảo vì 6 = 1 + 2 + 3, hay 28 vì 28 = 14 + 7 + 4 + 2 + 1.
Ý tưởng:
- Viế t mô ̣t hàm check mô ̣t số đầ u vào có phải là số hoàn hảo hay không? Nô ̣i dung
hàm như sau:
+) input: 1 số tự nhiên n đầ u vào
+) process: tìm ra tấ t cả ước số của số n, sau đó kiể m tra xem số n có bằ ng tổ ng
các ước số đó không. Nế u bằ ng thì trả về true, không thì trả về false
+) output: true (nế u n là số hoàn hảo)/ false (nế u n không là số hoàn hảo)
- Lă ̣p từ 2 đế n số n, và in ra những số thỏa mañ hàm check số hoàn hảo ở trên

def sohoanhao(_number):
sum = 0
a = _number // 2 + 1
for i in range(1, a):
if _number % i == 0:
sum += i

if _number == sum:
return True
else:
return False

n = int(input('Nhap vao so n:'))


print('Danh sach so hoan hao < ', n, ':')
for i in range(1, n):
if sohoanhao(i):
print(i)
Câu 8: Một người cần có một số tiền T, tích lũy bằng cách gửi tiết kiệm số tiền ban đầu là
S với lãi suất có kỳ hạn theo năm là P% theo phương thức lũy tiến (lãi của mỗi năm được
cộng vào với tiền gốc). Viế t mô ̣t hàm cho phép nhập vào các số thực T, S, P và xác định
số năm cần gửi tiết kiệm.
Câu 9: Một người cần rút một số tiền T từ ngân hàng và muốn tổng số tờ ít nhất. Cho biết
có các loại tiền mệnh giá 100, 20, 5 và 1. Viế t mô ̣t hàm cho phép nhập từ bàn phím số tiền
T và in ra số tờ mỗi loại mệnh giá; tổng số tờ nhận được.
money = int(input('Nhap vao so tien:'))

# So to tien 100:
_t100 = money // 100
# So to tien 20:
money = money - (100 * _t100)
_t20 = money // 20
# So to tien 5:
money = money - 20 * _t20
_t5 = money // 5
# So to tien 1:
_t1 = money - 5 * _t5

print('So to 100: ', _t100, '; So to 20: ', _t20, '; So to 5: ', _t5, ';
So to 1: ', _t1)

Câu 10: Viết hàm tìm ước số chung lớn nhất của 2 số tự nhiên; một hàm tìm bội số chung
nhỏ nhất của 2 số tự nhiên.
def ucln(a, b):
if a == 0 | b == 0:
return a + b
while (a != b):
if (a > b):
a = a - b
else:
b = b - a
return a

def bcnn(a, b):


_result = ucln()
return (a * b) / _result

Câu 11: Viế t hàm số tìm và in ra phần tử nhỏ nhất, lớn nhất, tính và in ra trung bình cộng
của các phần tử trong danh sách hoă ̣c tuple cho trước. In ra các phần tử nhỏ hơn, lớn hơn
trung bình cộng.
Gơ ̣i ý: Sử du ̣ng hàm min, max. Trung bình cô ̣ng thì bằ ng tổ ng chia cho số phầ n tử hay
đô ̣ lài (len).

Câu 12: Viết hàm đếm số các đoạn tăng và tìm đoạn tăng dài nhất của mô ̣t danh sách cho
trước. Sau đó in ra kế t quả số đoạn tăng và đoạn tăng dài nhất trong danh sách.
Gơ ̣i ý:
- Dùng 1 biế n _count để đế m số đoa ̣n tăng.
- Lă ̣p qua từng phầ n tử của danh sách, so sánh nó với phầ n tử trước nó, nế u lớn
hơn thì là thuô ̣c đoa ̣n tăng. Đưa các đoa ̣n tăng này vào 1 danh sách mới.
- Sau khi kế t thúc 1 đoa ̣n tăng thì tăng _count lên 1.

Câu 13: Viết hàm kiểm tra tính đối xứng của 1 xâu ký tự. Sau đó go ̣i hàm và nhập xâu ký
tự từ bàn phím và cho biết xâu đó có đối xứng không.
_str = input('Nhap vao chuoi: ')

# Dao nguoc chuoi


_reversed = _str[::1]

if _str == _reversed:
print('Chuoi Doi xung.')
else:
print('Day khong phai la chuoi Doi xung.')

Câu 14: Viết một hàm chuẩn hóa xâu ký tự: biến đổi xâu ký tự nhâ ̣p vào từ bàn phím thành
xâu chuẩ n sao cho trong xâu không có 2 dấu cách liền nhau, chữ cái đầ u tiên và sau dấ u
cách của chuỗi phải đươ ̣c viế t hoa, các chữ cái khác phải viế t thường. Ví du ̣: Nhâ ̣p vào
chuỗi: nGuyen VaN A  chuẩ n hóa: Nguyen Van A.
_str = input('Nhap vao chuoi: ')

# Bien chuoi thanh chu thuong:


_new = str.lower(_str)

# Chuyen chuoi thanh danh sach


_list = _new.split()

# Chuoi chuan hoa:


_standard = ''
for i in _list:
_standard += i.title() + ' '

print('Chuoi chuan hoa: ', _standard)


Câu 15: Viế t hàm nhập vào danh sách tên sinh viên và in ra danh sách theo thứ tự ABC
của tên.
Gơ ̣i ý: Dùng hàm sort để sắ p xế p danh sách.

II. NÂNG CAO:


̣
1. Têp:
Câu 1: Tạo tệp số, đếm số, số lớn nhất, số nhỏ nhất
Tạo tệp chứa danh sách các số nguyên đươ ̣c nhâ ̣p từ bàn phím. Sau đó đọc từ tệp đã tạo để
thống kê và in ra kết quả: số lượng các số trong tệp, số lượng các số dương, số lớn nhất, số
nhỏ nhất.
_n = input('Nhap danh sach cac so tu ban phim: ')

# Dua cac so thanh 1 danh sach


_list = _n.split(',')

# Tao file file.txt


_file = open('file.txt', 'w+')
# Ghi danh sach cac so vua nhap vao tep
_file.write(_n)
# So luong cac so trong tep
_len = len(_list)
print('Len: ', _len)
_file.write('Len: ' + str(_len))
# So lon nhat
_max = max(_list)
print('Max: ', _max)
_file.write('Max: ' + _max)
# So nho nhat
_min = min(_list)
print('Min: ', _min)
_file.write('Min: ' + _min)

_file.close()

Câu 2: Tạo tệp tên sinh viên, sắp xếp và in


Tạo tệp văn bản chứa danh sách tên sinh viên nhập từ bàn phím. Sau đó đọc từ tệp đã tạo
vào 1 danh sách; sắp xếp danh sách tăng dần theo tên và in ra danh sách sinh viên đã sắp
xếp kèm theo cột số thứ tự.
Ví du ̣: Nô ̣i dung file cau2.txt ban đầ u: File sau khi sắ p xế p la ̣i là:
An 1. An
Minh 2. Bình
Bình 3. Minh

# Mo file cau2.txt
_file = open('cau2.txt', 'r+')
# Ghi danh sach cac so vua nhap vao tep
_list = _file.readlines()
# Sap xep danh sach theo ABC
_new = sorted(_list)
# Xoa toan bo noi dung file da cho:
# Dua con tro ve dau file
_file.seek(0)
# Xoa toan bo file tu vi tri con tro
_file.truncate()
# Ghi lai danh sach vao file da co
for i in range(len(_new)):
_file.writelines(str(i + 1) + ". " + _new[i])

_file.close()

Câu 3: Tạo tệp danh sách hồ sơ sinh viên theo yêu cầu
Tạo tệp chứa danh sách hồ sơ sinh viên gồm mã số, họ tên, điểm trung bình. Sau đó đọc từ
tệp đã tạo vào 1 danh sách; sắp xếp giảm dần theo điểm trung bình và in ra danh sách sinh
viên theo các cột, có kèm theo cột chỉ số thứ tự.
Ví du ̣: File đầ u cau3.txt vào là Kế t quả in ra sau khi sắ p xế p là:
Masv01 – An – 8.1 1. Masv03 – Minh – 9. 6
Masv02 – Bình – 7.3 2. Masv01 – An – 8.1
Masv03 – Minh – 9.6 3. Masv02 – Bình – 7.3

Ý tưởng: Ta ̣o ra 1 dach sách các phầ n tử là các dictionary gồ m các key: ‘masv’, ‘ten’,
‘diem’.
 Từ file đầ u vào ta có danh sách như sau:
[{‘masv’: ‘Masv01’,‘ten’: ‘An’ ,‘diem’: 8.1}, {‘masv’: ‘Masv02’ ,‘ten’: ‘Bình’ ,‘diem’:
7.3}, {‘masv’: ‘Masv03’ ,‘ten’: ‘Minh’ ,‘diem’: 9.6}] . Danh sách này gồ m 3 phầ n tử,
mỗi phầ n tử là 1 dictionary, mỗi dictionary sẽ có 3 că ̣p key:value.
 Dùng hàm sorted và truyề n vào tham số để thực hiê ̣n sắ p xế p:
_list = [{'masv': 'Masv01', 'ten': 'An', 'diem': 8.1}, {'masv': 'Masv02', 'ten':
'Binh', 'diem': 7.3},
{'masv': 'Masv03', 'ten': 'Minh', 'diem': 9.6}]

_new = sorted(_list, key=lambda k: k['diem'], reverse=True)

print('Danh sach sau khi sap xep theo diem: ', _new)

Câu 4: Sử dụng danh sách các dictionary lưu họ tên thí sinh, số báo danh, điểm thi các
môn toán, lý, hóa và tổng điểm. Ghi danh sách thí sinh trúng tuyển (tổng điểm>=điểm
chuẩn) vào mô ̣t file, với điể m chuẩ n đươ ̣c nhâ ̣p từ bàn phím.
Ý tưởng: Ta ̣o ra 1 dach sách các phầ n tử là các dictionary gồ m các key: ‘sobaodanh’,
‘ten’, ‘toan’, ‘ly’, ‘hoa’, ‘tongdiem’.
 Nhâ ̣p vào điể m chuẩ n n từ bàn phím
 Duyê ̣t từng phầ n tử của danh sách đó, mỗi mô ̣t phầ n tử là 1 dict, nế u
dict[‘tongdiem’] > n thì cho vào danh sách mới lưu những ho ̣c sinh đủ điể m
chuẩ n.
 Ta ̣o file và ghi danh sách mới ở trên vào file đó.

You might also like