import math
class SinhVien:
def __init__(self, id, name, sex, age, diemToan, diemLy, diemHoa):
# Hàm khởi tạo cho đối tượng SinhVien với các thuộc tính cơ bản
self._id = id
self._name = name
self._sex = sex
self._age = age
self._diemToan = diemToan
self._diemLy = diemLy
self._diemHoa = diemHoa
self._diemTB = 0
self._hocLuc = ""
class QuanLySinhVien:
listSinhVien = []
def generateID(self):
# Hàm tạo ID tự động tăng dần cho sinh viên mới
maxId = 1
if [Link]() > 0:
maxId = max(sv._id for sv in [Link]) + 1
return maxId
def soLuongSinhVien(self):
# Hàm trả về số lượng sinh viên hiện có trong danh sách
return len([Link])
def nhapSinhVien(self):
# Hàm nhập thông tin sinh viên mới từ người dùng
svId = [Link]()
name = input("Nhap ten sinh vien: ")
sex = input("Nhap gioi tinh sinh vien: ")
age = int(input("Nhap tuoi sinh vien: "))
diemToan = float(input("Nhap diem toan: "))
diemLy = float(input("Nhap diem Ly: "))
diemHoa = float(input("Nhap diem Hoa: "))
sv = SinhVien(svId, name, sex, age, diemToan, diemLy, diemHoa)
[Link](sv)
[Link](sv)
[Link](sv)
def updateSinhVien(self, ID):
# Hàm cập nhật thông tin sinh viên dựa trên ID
sv = [Link](ID)
if sv is not None:
name = input("Nhap ten sinh vien: ")
sex = input("Nhap gioi tinh sinh vien: ")
age = int(input("Nhap tuoi sinh vien: "))
diemToan = float(input("Nhap diem toan: "))
diemLy = float(input("Nhap diem Ly: "))
diemHoa = float(input("Nhap diem Hoa: "))
sv._name = name
sv._sex = sex
sv._age = age
sv._diemToan = diemToan
sv._diemLy = diemLy
sv._diemHoa = diemHoa
[Link](sv)
[Link](sv)
else:
print(f"Sinh vien co ID = {ID} khong ton tai.")
def sortByID(self):
# Hàm sắp xếp danh sách sinh viên theo ID tăng dần
[Link](key=lambda x: x._id)
def sortByName(self):
# Hàm sắp xếp danh sách sinh viên theo tên tăng dần
[Link](key=lambda x: x._name)
def sortByDiemTB(self):
# Hàm sắp xếp danh sách sinh viên theo điểm trung bình tăng dần
[Link](key=lambda x: x._diemTB)
def findByID(self, ID):
# Hàm tìm kiếm sinh viên theo ID
for sv in [Link]:
if sv._id == ID:
return sv
return None
def findByName(self, keyword):
# Hàm tìm kiếm sinh viên theo tên, trả về danh sách sinh viên khớp với
từ khóa
return [sv for sv in [Link] if [Link]() in
sv._name.upper()]
def deleteById(self, ID):
# Hàm xóa sinh viên khỏi danh sách theo ID
sv = [Link](ID)
if sv is not None:
[Link](sv)
return True
return False
def tinhDTB(self, sv):
# Hàm tính điểm trung bình cho sinh viên
diemTB = (sv._diemToan + sv._diemLy + sv._diemHoa) / 3
sv._diemTB = round(diemTB, 2)
def xepLoaiHocLuc(self, sv):
# Hàm xếp loại học lực cho sinh viên dựa trên điểm trung bình
if sv._diemTB >= 8:
sv._hocLuc = "Gioi"
elif sv._diemTB >= 6.5:
sv._hocLuc = "Kha"
elif sv._diemTB >= 5:
sv._hocLuc = "Trung Binh"
else:
sv._hocLuc = "Yeu"
def showSinhVien(self, listSV):
# Hàm hiển thị danh sách sinh viên ra màn hình console
print("{:<8} {:<18} {:<8} {:<8} {:<8} {:<8} {:<8} {:<8} {:<8}"
.format("ID", "Name", "Sex", "Age", "Toan", "Ly", "Hoa", "Diem
TB", "Hoc Luc"))
for sv in listSV:
print("{:<8} {:<18} {:<8} {:<8} {:<8} {:<8} {:<8} {:<8} {:<8}"
.format(sv._id, sv._name, sv._sex, sv._age, sv._diemToan,
sv._diemLy,
sv._diemHoa, sv._diemTB, sv._hocLuc))
print("\n")
def getListSinhVien(self):
# Hàm trả về danh sách sinh viên hiện tại
return [Link]
# Để chạy thử:
qlsv = QuanLySinhVien()
[Link]() # Nhập thông tin sinh viên
[Link]([Link]()) # Hiển thị danh sách sinh viên
# Bài tập 8.1: Xây dựng lớp tam giác với dữ liệu thành phần là chiều dài ba
# cạnh của tam giác, mầu sắc; các hàm thành phần gồm hàm tính chu vi, diện
# tích tam giác, hàm hiển thị thông tin về tam giác ra màn hình, hàm hiển thị
loại
# của tam giác như: Tam giác cân, vuông, vuông cân, đều hay tam giác thường.
class TamGiac:
def __init__(self, a, b, c, color):
self.a = a
self.b = b
self.c = c
[Link] = color
def chu_vi(self):
return self.a + self.b + self.c
def dien_tich(self):
s = (self.a + self.b + self.c) / 2
return (s * (s - self.a) * (s - self.b) * (s - self.c)) ** 0.5
def loai_tam_giac(self):
if self.a == self.b == self.c:
return "Tam giác đều"
elif self.a == self.b or self.b == self.c or self.a == self.c:
if self.a ** 2 + self.b ** 2 == self.c ** 2 or self.a ** 2 +
self.c ** 2 == self.b ** 2 or self.b ** 2 + self.c ** 2 == self.a ** 2:
return "Tam giác vuông cân"
else:
return "Tam giác cân"
elif self.a ** 2 + self.b ** 2 == self.c ** 2 or self.a ** 2 + self.c
** 2 == self.b ** 2 or self.b ** 2 + self.c ** 2 == self.a ** 2:
return "Tam giác vuông"
else:
return "Tam giác thường"
def kiemtra(self):
if self.a + self.b > self.c and self.a + self.c > self.b and self.b +
self.c > self.a:
return "3 canh tren tao thanh hinh tam giac"
else:
return "3 canh tren khong tao thanh hinh tam giac"
def hien_thi_thong_tin(self):
print("Chiều dài các cạnh:", self.a, ",", self.b, ",", self.c)
if [Link]() == "3 canh tren tao thanh hinh tam giac":
print("kiem tra tam giac:", [Link]())
print("Màu sắc:", [Link])
print("Chu vi:", self.chu_vi())
print("Diện tích:", self.dien_tich())
print("Loại tam giác:", self.loai_tam_giac())
else:
print("kiem tra tam giac:", [Link]())
tg = TamGiac(3, 1, 1, "Đỏ")
tg.hien_thi_thong_tin()
# Bài tập 8.2: Xây dựng lớp hình tròn với dữ liệu thành phần là bán
kính của
# hình tròn và các hàm thành phần gồm: Hàm tính chu vi; hàm tính diện tích
# của hình tròn; hàm hiển thị thông tin về đường tròn đó.
import math
class HinhTron:
def __init__(self, ban_kinh):
self.ban_kinh = ban_kinh
def chu_vi(self):
return 2 * [Link] * self.ban_kinh
def dien_tich(self):
return [Link] * self.ban_kinh ** 2
def hien_thi_thong_tin(self):
print("Bán kính của hình tròn:", self.ban_kinh)
print("Chu vi của hình tròn:", self.chu_vi())
print("Diện tích của hình tròn:", self.dien_tich())
ht = HinhTron(5)
ht.hien_thi_thong_tin()
# Bài tập 8.3: Xây dựng lớp điểm để biểu diễn các điểm trong không gian hai
# chiều với dữ liệu thành phần gồm: Tọa độ x, tọa độ y và mầu sắc của điểm;
# các hàm thành phần gồm:
# – Hàm khởi tạo dữ liệu điểm.
# – Hàm hiển thị thông tin điểm .
# – Hàm tinhTien(int x): Tịnh tiến điểm đó theo trục hoành.
# – Hàm tinhTien(int x, int y): Tịnh tiến trục đó theo cả hai hướng Ox, Oy.
# – Hàm khoangCach(): Tính khoảng cách của điểm đó so với gốc tọa độ O(0,0).
import math
class Diem:
def __init__(self, x, y, color):
self.x = x
self.y = y
[Link] = color
def hien_thi_thong_tin(self):
print("Tọa độ của điểm: ({}, {})".format(self.x, self.y))
print("Màu sắc của điểm:", [Link])
def tinh_tien(self, x_tt, y_tt=None):
if y_tt is None:
self.x += x_tt
else:
self.x += x_tt
self.y += y_tt
def khoang_cach(self):
return [Link](self.x ** 2 + self.y ** 2)
d = Diem(3, 4, "Đỏ")
d.hien_thi_thong_tin()
d.tinh_tien(2, 3)
d.hien_thi_thong_tin()
print("Khoảng cách của điểm đến gốc tọa độ:", d.khoang_cach())
# Bài tập 8.4: Xây dựng lớp toán học với dữ liệu thành phần gồm n số; các
# hàm thành phần gồm:
# – tinhTong(*nso): Hàm tính tổng n số.
# – tinhTrungBinh(*nso): Hàm tính trung bình cộng của n số.
# – timMax(*nso): Hàm tìm số lớn nhất của n số.
# – timMin(*nso): Hàm tìm số nhỏ nhất của n số.
# – hienThi(): Hàm hiển thị thông tin về n số ra màn hình
class ToanHoc:
def __init__(self, *nso):
[Link] = nso
def tinh_tong(self):
return sum([Link])
def tinh_trung_binh(self):
return sum([Link]) / len([Link])
def tim_max(self):
return max([Link])
def tim_min(self):
return min([Link])
def hien_thi(self):
print("Danh sách các số:", [Link])
print("Tổng các số:", self.tinh_tong())
print("Trung bình cộng các số:", self.tinh_trung_binh())
print("Số lớn nhất:", self.tim_max())
print("Số nhỏ nhất:", self.tim_min())
th = ToanHoc(1, 2, 3, 4, 5)
th.hien_thi()
#dem so chu cai va chu so trong chuoi nhap vao
def demsochuso_chucai(string):
count_so = 0
count_chu = 0
for char in string:
if [Link]():
count_so += 1
for char in string:
if [Link]():
count_chu += 1
return (count_so, count_chu)
def main():
string = input("Enter a string: ")
count_so, count_chu = demsochuso_chucai(string)
print("so chu so trong chuoi la: ", count_so)
print("so chu cai trong chuoi la: ", count_chu)
if __name__ == "__main__":
main()
#tao ra tro choi keo-bua-bao
import random
class Rock_paper_scissors:
def __init__(self, rounds):
[Link] = rounds
self.current_round = 0
self.player_wins = 0
self.computer_wins = 0
[Link] = ['rock', 'paper', 'scissors']
def get_computer_choice(self):
return [Link]([Link])
def find_round_winner(self, player_choice, computer_choice):
if player_choice == computer_choice:
return 'draw'
elif (player_choice == 'rock' and computer_choice == 'scissors') or \
(player_choice == 'scissors' and computer_choice == 'paper') or \
(player_choice == 'paper' and computer_choice == 'rock'):
self.player_wins += 1
return 'player'
else:
self.computer_wins += 1
return 'computer'
def check_game_winner(self):
if self.player_wins > self.computer_wins:
return 'player'
elif self.player_wins < self.computer_wins:
return 'computer'
else:
return 'draw'
def play_round(self, player_choice):
if self.current_round < [Link]:
self.current_round += 1
computer_choice = self.get_computer_choice()
round_winner = self.find_round_winner(player_choice,
computer_choice)
print(f"Round {self.current_round}: Player chose {player_choice},
Computer chose {computer_choice}.{round_winner.capitalize()} wins this
round.") # capitalize() : in cho dep
if self.current_round == [Link]:
game_winner = self.check_game_winner()
print(f"Game over! The winner of the game is:
{game_winner.capitalize()}")
else:
print("The game has already ended.")
n = 5
game = Rock_paper_scissors(n)
print("Welcome to Rock, Paper, Scissors!")
print("5 round:")
for i in range(5):
player_choice = input("Enter your choice (rock, paper, or scissors): ")
game.play_round(player_choice)
print()
#tao hinh kim cuong với chieu cao nhap vao
height = int(input("Enter the height of the diamond: "))
for i in range(height // 2 + 1):
spaces = " " * (height // 2 - i)
stars = "*" * (2 * i + 1)
print(spaces + stars)
for i in range(height // 2, 0, -1):
spaces = " " * (height // 2 - i + 1)
stars = "*" * (2 * i - 1)
print(spaces + stars)
# Tạo danh sách 20 phần tử ngẫu nhiên từ 0 đến 1
# Đếm số lần xuất hiện liên tiếp lớn nhất
import random
# Tạo danh sách 20 phần tử ngẫu nhiên từ 0 đến 1
random_list = [[Link]() for _ in range(20)]
# In danh sách
print("Danh sách phần tử ngẫu nhiên từ 0 đến 1:")
print(random_list)
# Đếm số lần xuất hiện liên tiếp lớn nhất
max_count = 0
current_count = 1
for i in range(1, len(random_list)):
if random_list[i] == random_list[i - 1]:
current_count += 1
else:
max_count = max(max_count, current_count)
current_count = 1
max_count = max(max_count, current_count)
print("Số lần xuất hiện liên tiếp lớn nhất:", max_count)