Câu hỏi:

11/07/2024 2,322

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:

verified
Giải bởi Vietjack

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) 

Bình luận


Bình luận

CÂU HỎI HOT CÙNG CHỦ ĐỀ

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)

Media VietJack

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.

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

Media VietJack
Vietjack official store
Đăng ký gói thi VIP

VIP +1 - Luyện thi tất cả các đề có trên Website trong 1 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ 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 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

Mua ngay

VIP +3 - Luyện thi tất cả các đề có trên Website trong 3 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ 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 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

Mua ngay

VIP +6 - Luyện thi tất cả các đề có trên Website trong 6 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ 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 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

Mua ngay

VIP +12 - Luyện thi tất cả các đề có trên Website trong 12 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ 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 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

Mua ngay