Nội Dung Chính
(Trang 52)
Sau bài này em sẽ:
|
Có lẽ em đã biết đến tính năng liệt kê danh sách bạn chung giữa những người dùng khác nhau để đề xuất kết bạn của Facebook. Nếu cần lập danh sách bạn chung của em và của một bạn khác trên Facebook thì em sẽ làm như thế nào? |
NHIỆM VỤ 1
Cho tệp các tài khoản Facebook và danh sách bạn bè của tài khoản Facebook đó được lưu trong tệp. Mỗi dòng bao gồm tên tài khoản Facebook được ngăn cách với tên bạn bè bằng dấu hai chấm, tên bạn bè được ngăn cách nhau bởi dấu phẩy như sau:
ban_fb.inp |
Nam: Sơn, Hương, Quang, Dũng, Tuấn, Tùng Sơn: Mai, Danh, Quang, Dũng, Văn, Tùng Hương: Phương, Hường, Hà, Dũng, Huyền, Tùng Huyền: Ngọc, Hương, Quang, Lâm, Đức, Tùng Hà: Trung, Hương, Phương, Dũng, Hải, Tùng Hùng: Thành, Hương, Linh, Dũng, Tuấn, Nam |
Viết chương trình đọc dữ liệu danh sách bạn bè từ tệp, sau đó cho phép người dùng nhập tên hai tài khoản Facebook từ bàn phím và in ra số bạn chung của hai tài khoản đó.
Hướng dẫn:
Phân tích: Ở bài toán này để tìm ra số bạn chung của hai tài khoản Facebook, chúng ta cần thực hiện hai bước sau:
Bước 1: Xác định danh sách bạn bè của hai tài khoản Facebook đó. Việc này được thực hiện bằng cách sử dụng thuật toán tìm kiếm để tìm ra số thứ tự của hai tài khoản trong danh sách tên Facebook, từ đó suy ra được danh sách bạn bè của hai tài khoản.
(Trang 53)
Bước 2: Sau khi đã xác định được danh sách bạn bè của hai tài khoản, chúng ta cần xác định số phần tử chung của hai danh sách đó. Việc này có thể thực hiện bằng cách duyệt từng phần tử trong một danh sách xem phần tử này có xuất hiện trong danh sách còn lại hay không? Nếu có xuất hiện, tăng số bạn chung lên một, nếu không xuất hiện, tiếp tục duyệt đến phần tử tiếp theo trong danh sách cho đến hết.
Bài toán tìm số bạn chung có thể được thực hiện như sau:
banchung.py
1 def banchung(A, B): # tính số phần tử chung có trong 2 danh sách
2 kq = 0
3 for i in range(len(A)):
4 if A[i] in B:
5 kq = kq + 1
6 return kq
7
8 input_file = open("ban_fb.inp", encoding = "utf-8")
9 ten_fb = []
10 ban_fb = []
11 for line in input_file.readlines():
12 ten, ban = line.split(":")
13 ten_fb.append(ten)
14 ban = ban.strip().split(",")
15 for i in range(len(ban)):
16 ban[i] = ban[i].strip()
17 ban_fb.append(ban)
18 input_string = input("Nhập tên 2 tài khoản Facebook cần kiểm tra:")
19 ten1,ten2 = input_string.split()
20 index1 = index2 = -1
21 for i in range(0,len(ten_fb)): # tìm vị trí của tài khoản thứ
22 if ten1==ten_fb[i]: # nhất trong danh sách
index1 = i
23 for i in range(0,len(ten_fb)): # tìm vị trí của tài khoản thứ hai trong danh sách
24 if ten2==ten_fb[i]:
25 index2 = i
26 if (index1==-1) or (index2==-1):
(Trang 53)
27 print("Không tồn tại tài khoản cần tìm trong danh sách")
28 else:
29 print("Số bạn chung của hai tài khoản Facebook là:",banchung(ban_fb[index1],ban_fb[index2]))
NHIỆM VỤ 2
Cho trước tên các tài khoản Facebook và danh sách nhóm mà tài khoản đó tham gia, được lưu trong tệp. Mỗi dòng bao gồm tên tài khoản Facebook được ngăn cách với tên các nhóm bằng dấu hai chấm, tên các nhóm được ngăn cách nhau bởi dấu phẩy như sau:
group_fb.inp |
Nam: học tập, phim ảnh, đá bóng, kpop, cpop, thời trang Sơn: học tập, chụp ảnh, đá bóng, du lịch, cpop, game Hương: thể dục, phim ảnh, tiếng Anh, kpop, thư giãn, thời trang Huyền: học tập, tiếng Trung, cpop, thư giãn, du lịch Hà: thể dục, game, tiếng Pháp, kpop, piano, trà sữa Hùng: phượt, phim ảnh, tiếng Anh |
Viết chương trình gợi ý kết bạn cho các tài khoản Facebook để gợi ý các bạn có cùng sở thích với tài khoản này. Hai tài khoản được coi là có chung sở thích nếu tham gia ít nhất 3 nhóm chung. In ra màn hình danh sách kết bạn đề xuất cho từng tài khoản.
Hướng dẫn:
Phân tích: Để thực hiện đề xuất kết bạn cho tất cả các tài khoản Facebook chúng ta cần duyệt toàn bộ các tài khoản Facebook, với mỗi tài khoản, kiểm tra sở nhóm chung với tất cả các tài khoản Facebook còn lại, nếu có trên 3 nhóm chung thì đưa vào danh sách đề xuất kết bạn.
Bài toán đề xuất kết bạn có thể được thực hiện như sau:
ketban.py
1 def nhomchung(A, B): # tính số phần tử chung có trong danh hai danh sách
2 kq = 0
3 for i in range(len(A)):
4 if A[i] in B:
5 kq = kq + 1
6 return kq
7
8 input_file = open("group_fb.inp", encoding = "utf-8")
9 ten_fb = []
10 group_fb = []
11 for line in input_file.readlines():
12 ten, group = line.split(":")
13 ten_fb.append(ten)
14 group = group.strip().split(",")
15 for i in range(len (group)):
16 group[i] = group[i].strip()
17 group_fb.append (group)
18 print("Danh sách đề xuất kết bạn cho các tài khoản như sau:")
19 for i in range(len(ten_fb)):
20 dexuat = []
21 for j in range(len(ten_fb)):
22 if i!=j: # không đề xuất kết bạn với chính mình
23 if nhomchung(group_fb[i],group_fb[j]) >= 3:
24 dexuat.append(ten_fb[j])
25 print("Đề xuất kết bạn cho", ten_fb[i],"là:",dexuat)
LUYỆN TẬP
Sửa chương trình trong Nhiệm vụ 1 để in ra được danh sách bạn chung của hai tài khoản.
VẬN DỤNG
1. Trong bài toán đề xuất danh sách kết bạn, không tìm thấy đối tượng phù hợp cho hai bạn Hà, Hùng. Hãy viết chương trình tìm nhóm gợi ý cho một bạn bất kì (được nhập vào từ bàn phím). Nhóm được gợi ý là nhóm các bạn này chưa tham gia và đang có nhiều thành viên nhất.
2. Viết chương trình để tìm ra hai bạn có nhiều bạn chung nhất, hai bạn có nhiều nhóm chung nhất.
Bình Luận
Để Lại Bình Luận Của Bạn