Mở rộng bài tập trên như sau:
- Việc sắp xếp thứ tự phải ưu tiên tính theo tên trước, rồi đến họ, rồi đến đệm.
- Sắp xếp theo thứ tự của bảng chữ cái tiếng Việt.
Lưu ý: Bảng chữ cái tiếng Việt (bao gồm cả dấu thanh) được sắp xếp theo thứ tự sau:
AÀÁẢÃẠĂẰẮẲẴẶÂẤẨẪẬBCDĐEÈÉẺẼẸÊỀẾỂỄỆGHIÌÍỈĨỊJKLMNOÒÓỎÕỌƠỚỞỠỢÔỒỐỔỖỘPQRSTUÙÚỦŨỤƯỪỨỬỮỰVXXYỲÝỶỸỴaàáảãạăằắẳẵặâấẩẫậbcdđeèéẻẽẹêềếểễệghiìíỉĩịjklmnoòóỏõọơớởỡợôồốổỗộpqrstuùúủũụưừứửữựvxxyỳýỷỹỵ.
Mở rộng bài tập trên như sau:
- Việc sắp xếp thứ tự phải ưu tiên tính theo tên trước, rồi đến họ, rồi đến đệm.
- Sắp xếp theo thứ tự của bảng chữ cái tiếng Việt.
Lưu ý: Bảng chữ cái tiếng Việt (bao gồm cả dấu thanh) được sắp xếp theo thứ tự sau:
AÀÁẢÃẠĂẰẮẲẴẶÂẤẨẪẬBCDĐEÈÉẺẼẸÊỀẾỂỄỆGHIÌÍỈĨỊJKLMNOÒÓỎÕỌƠỚỞỠỢÔỒỐỔỖỘPQRSTUÙÚỦŨỤƯỪỨỬỮỰVXXYỲÝỶỸỴaàáảãạăằắẳẵặâấẩẫậbcdđeèéẻẽẹêềếểễệghiìíỉĩịjklmnoòóỏõọơớởỡợôồốổỗộpqrstuùúủũụưừứửữựvxxyỳýỷỹỵ.
Quảng cáo
Trả lời:
Hướng dẫn:
Để làm được bài tập này chúng ta cần thiết kế cơ chế so sánh từ điển tiếng Việt giữa hai xâu bất kì. Cách làm là đưa ra một từ điển Alphabet bao gồm các chữ cái tiếng Việt theo đúng thứ tự. Việc so sánh theo thứ tự từ điển được thực hiện bởi hàm so_sanh(s1, s2). Hàm này có ý nghĩa như sau:
Giá trị hàm trả lại: Bằng 0, nếu s1 = s2.
Bằng 1, nếu s1 > s2.
Bằng -1, nếu s1 < s2.
Sau khi đã định nghĩa được thứ tự từ điển mới thì các bước tiếp theo là khá dễ dàng.
Chương trình có thể viết như sau:
Alphabet = " AÀÁẢÃẠĂẰẮẲẴẶÂẤẨẪẬBCDĐEÈÉẺẼẸÊỀẾỂỄỆGHIÌÍỈĨỊJKLMN\ OÒÓỎÕỌƠỚỞỠỢÔỒỐỔỖỘPQRSTUÙÚỦŨỤƯỪỨỬỮỰVXXYỲÝỶỸỴ\ aàáảãạăằắẳẵặâấẩẫậbcdđeèéẻẽẹêềếểễệghiìíỉĩịjklmn\ oòóỏõọơớởỡợôồốổỗộpqrstuùúủũụưừứửữựvxxyỳýỷỹỵ."
MAX = 30
def so_sanh(s1, s2):
m = min(len (s1), len(s2))
kq = 0
k = 0
while k < m and kq == 0:
ch1, ch2 = s1[k], s2[k]
if Alphabet.index(ch1) < Alphabet.index(ch2):
kq = -1
return -1
if Alphabet.index(ch1) > Alphabet.index(ch2):
kq = 1
return 1
k = k + 1
if len(s1) < len(s2):
return -1
elif len(s1) > len(s2):
return 1
else:
return 0
def tach_ten(hoten):
sline = hoten.split()
return sline[len(sline)-1]
def space(k):
return " "*k
def transform(A):
B = []
for s in A:
ten = tach_ten(s)
tenmoi = ten + space(MAX - len(ten)) + s
B.append(tenmoi)
return B
def sap_xep(A):
hs = A.copy( )
B = transform(A)
for i in range(1, len(B)):
j = i
while j > 0 and so_sanh (B[j],B[j-1]) == -1:
B[j],B[j-1] = B[j-1],B[j]
hs[j],hs[j-1] = hs[j-1],hs[j]
j = j-1
return hs
# Chương trình chính
A = []
n = int(input("Nhập số học sinh của lớp: "))
for k in range(n):
hoten = input("Nhập tên học sinh thứ "+str(k+1)+": ")
A.append(hoten)
hs = sap_xep(A)
print("Danh sách học sinh trong lớp: ")
for s in hs:
print(s)
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Đang tải chế độ Học...
Hot: 1000+ đề thi giữa kì 1 lớp 1-12 đầy đủ các môn (Update 2026) (chỉ từ 60k). Tải ngay
Đăng ký VIP để học và luyện thi không giới hạn
Trọn bộ quyền lợi trên Vietjack, trong một tài khoản.
- Phòng luyện thi cấp tốc: ĐGNL - ĐGTD, Tốt nghiệp THPT, Ôn vào 10, Ôn vào 6, Ôn Giữa kì/Cuối kì
- Hơn 200K đề thi thử, đề minh hoạ, chính thức các năm
- Với 3tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
- Tải xuống đề thi [DOCX] với đầy đủ đáp án
- Xem hàng ngàn bài giảng đính kèm củng cố thêm kiến thức
- Bao gồm tất cả các bậc từ Tiểu học đến Đại học
- Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện
- Đăng ký ngay
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Chương trình có thể viết như sau:
def sap_xep (A):
B = A.copy()
for i in range(1, len(B)):
j = i
while j > 0 and B[j] < B[j-1]:
B[j], B[j-1] = B[j-1], B[j]
j = j-1
return B
# Chương trình chính
A = []
n = int(input("Nhập số học sinh của lớp: "))
for k in range(n):
hoten = input("Nhập tên học sinh thứ "+str(k+1)+": ")
A.append(hoten)
B = sap_xep(A)
print("Danh sách học sinh trong lớp: ")
for hs in B:
print(hs)
Lưu ý: Hàm sap_xep(A) sẽ trả lại dãy đã được sắp xếp tăng dần của A, bản thân dãy A không thay đổi.
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Hướng dẫn:
Em đã biết cách tách phần họ và tên của một xâu kí tự họ tên đầy đủ. Bài tập này yêu cầu tách thêm phần đệm, tức là phần nằm giữa tên và họ ra. Việc tách này khá đơn giản bằng cách sử dụng phương thức join() của xâu kí tự. Xâu kí tự họ tên gốc trước tiên được tách thành một dãy bằng hàm split(). Sau khi lấy phần họ, tên, phần đệm sẽ được lấy ra bằng lệnh sau:
dem = " ".join(slist[1:n-1])
Trong đó slist là dãy đã được tách ra từ xâu kí tự họ tên đầy đủ, n là độ dài của xâu slist. Chương trình hoàn chỉnh có thể viết như sau:
hoten = input("Nhập họ tên đầy đủ của bạn: ")
slist = hoten.split()
n = len(slist)
ho = slist[0]
ten = slist[n-1]
dem = " ".join(slist[1:n-1])
print("Tên của bạn là",ten)
print("Họ của bạn là", ho)
if n > 2:
print("Đệm của bạn là:", dem)
* Chương trình chạy thử:
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Đăng ký để học cùng Vietjack. Hoàn toàn miễn phí!
Bằng việc đăng ký, bạn đồng ý với Điều khoản sử dụng và Chính sách bảo mật của Vietjack.