Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Xử lý data nhập từ file text, mọi người giúp em với

23:07 09-08-2023 421 lượt xem 3 bình luận 22:58 19-08-2023

em có 1 file text như này:

Ma HS, Toan, Ly, Hoa, Sinh, Van, Anh, Su, Dia
Quang; 5,7,7,8;5,5,6,6;8,6,7,7;4,8,5,7;7,7,6,7,9;7,5,8,6,7;7,8,8,5,9;5,8,6,8,7
Minh; 8,6,8,6;5,5,8,4;4,9,9,7;4,9,3,4;6,7,7,7,4;8,9,6,7,5;5,7,7,9,6;6,6,4,4,7

phần điểm số thành phần của các môn được ngăn cách bằng dấu ; 
vd 5,7,7,8 là điểm môn Toán của Quang=> dùng để tính điểm trung bình

yêu cầu nhập data từ file, xử lý và tính điểm trung bình của các môn mà out ra định dạng là 1 dictionaty {‘tên HS’: {‘Mon hoc’: Điểm TB}}

Vd  {‘Quang’: {‘Toan’: 9.00; ‘Ly’: 8.55, …}, ‘Minh’: {…‘Su’: 9.00; ‘Dia’: 8.55}}

em nghĩ mãi không tìm ra hướng ai có thể gợi ý giúp mình với :((((

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Hieu Dang đã bình luận 23:41 11-08-2023

Trong Python bạn có thể tham khảo cách như dưới đây:

- Đọc input từ file

- Hàm split trong Python giúp bạn cắt các phần tử của 1 string bởi 1 character do bạn chỉ định. VD:

"abc, cde, fgh".split(',') => Output: ["abc", "cde", "fgh"]

- Sử dụng dictionary lồng dictionary như bên dưới:

+ {Tên_HS : {Tên_Môn_Học: Điểm_TB}}

# Đọc input file
def read_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as f: # Với keyword "with" bạn không cần close file thủ công
        lines = f.readlines()
    return lines

def process_data(lines):
    data = {} # Chứa data dạng {"name": <Điểm TB>, ...}
    for line in lines:
        line = line.strip().split(';') # cắt 1 line thành các phần tử = dấu ;
        name = line[0]                 # Phần tử đầu tiên là Tên HS
        scores = line[1:]              # Các giá trị tiếp theo là điểm
        scores = [list(map(int, score.split(','))) for score in scores] # chuyển điểm đọc được thành kiểu int
        scores_dict = {}               # Lưu điểm trung bình các môn của 1 HS
        for i, score in enumerate(scores):
            subject = ['Toan', 'Ly', 'Hoa', 'Sinh', 'Van', 'Anh', 'Su', 'Dia'][i]
            avg_score = sum(score) / len(score) # Tính điểm trung bình mỗi môn học
            scores_dict[subject] = avg_score    # Gán điểm trung bình cho mỗi môn học
        data[name] = scores_dict                # Gán các điểm trung bình của môn học cho HS có tên 'name'
    return data                                 # Trả về output như bạn cần


file_path = 'your_input_file.txt'
lines = read_file(file_path)
data = process_data(lines)
print(data)

 

Hieu Dang đã bình luận 23:41 11-08-2023

Những ngôn ngữ khác bạn cũng có thể làm cách tương tự!

Câu hỏi mới nhất