Collections.namedtuple() Câu hỏi thực hành Python

Nov 28 2022
collections.namedtuple() Về cơ bản, các bộ tên được đặt tên rất dễ tạo, các loại đối tượng nhẹ.

collections.namedtuple()
Về cơ bản, namedtuple rất dễ tạo, các kiểu đối tượng nhẹ.
Chúng biến các bộ dữ liệu thành các thùng chứa thuận tiện cho các tác vụ đơn giản.

Với các bộ được đặt tên, bạn không phải sử dụng các chỉ số nguyên để truy cập các thành viên của một bộ.

Ví dụ :

Mã 01

>>> from collections import namedtuple
>>> Point = namedtuple('Point','x,y')
>>> pt1 = Point(1,2)
>>> pt2 = Point(3,4)
>>> dot_product = ( pt1.x * pt2.x ) +( pt1.y * pt2.y )
>>> print dot_product
11

>>> from collections import namedtuple
>>> Car = namedtuple('Car','Price Mileage Colour Class')
>>> xyz = Car(Price = 100000, Mileage = 30, Colour = 'Cyan', Class = 'Y')
>>> print xyz
Car(Price=100000, Mileage=30, Colour='Cyan', Class='Y')
>>> print xyz.Class
Y

Tiến sĩ John Wesley có một bảng tính chứa danh sách ID, Điểm, lớp và tên của học sinh.
Nhiệm vụ của bạn là giúp Tiến sĩ Wesley tính điểm trung bình của các sinh viên.

Ghi chú:

1. Các cột có thể theo thứ tự bất kỳ. ID, nhãn hiệu, lớp và tên có thể được viết theo bất kỳ thứ tự nào trong bảng tính.

2. Tên cột là ID, MARKS, LỚP và TÊN. (Cách viết và kiểu chữ hoa/thường của những tên này sẽ không thay đổi.)

Định dạng đầu vào :

Dòng đầu tiên chứa số nguyên N là tổng số học sinh.
Dòng thứ hai chứa tên của các cột theo thứ tự bất kỳ.

N dòng tiếp theo chứa các nhãn hiệu, ID, tên và lớp, bên dưới tên cột tương ứng của chúng.

Hạn chế :

  • 0 <= N <= 100

In ra điểm trung bình cộng của danh sách đã sửa đến 2 chữ số thập phân.

Đầu vào mẫu:

THỬ NGHIỆM 01

5
ID         MARKS      NAME       CLASS     
1          97         Raymond    7         
2          50         Steven     4         
3          91         Adrian     9         
4          72         Stewart    5         
5          80         Peter      6

5
MARKS      CLASS      NAME       ID        
92         2          Calum      1         
82         5          Scott      2         
94         2          Jason      3         
55         8          Glenn      4         
82         2          Fergus     5

THỬ NGHIỆM 01

78.00

81.00

THỬ NGHIỆM 01

Trung bình = (97 + 50 + 91 + 72 + 80)/5

Bạn có thể giải quyết thử thách này trong 4 dòng mã trở xuống không?

LƯU Ý: Không có hình phạt cho các giải pháp đúng nhưng có nhiều hơn 4 dòng.

Dung dịch

import collections

n = int(input())
scol = ','.join(input().split())
Student = collections.namedtuple('Student',scol)

sum = 0
for i in range(n):
    row = input().split()
    student = Student(*row)
    sum += int(student.MARKS)

print(sum/n)