Collections.namedtuple() Pytanie praktyczne w języku Python

Nov 28 2022
collections.namedtuple() Zasadniczo nazwane krotki są łatwymi do utworzenia, lekkimi typami obiektów.

collections.namedtuple()
Zasadniczo nazwane krotki są łatwymi do utworzenia, lekkimi typami obiektów.
Zamieniają krotki w wygodne pojemniki do prostych zadań.

Dzięki nazwanym krotkom nie trzeba używać indeksów całkowitych do uzyskiwania dostępu do członków krotki.

Przykład :

Kod 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

Dr John Wesley ma arkusz kalkulacyjny zawierający listę identyfikatorów uczniów, ocen, klas i nazwisk.
Twoim zadaniem jest pomóc dr Wesleyowi obliczyć średnią ocen uczniów.

Notatka:

1. Kolumny mogą być w dowolnej kolejności. Identyfikatory, znaki, klasę i imię można wpisać w arkuszu kalkulacyjnym w dowolnej kolejności.

2. Nazwy kolumn to ID, ZNAKI, KLASA i NAZWA. (Pisownia i rodzaj wielkości liter w tych nazwach nie ulegną zmianie).

Format wejściowy:

Pierwszy wiersz zawiera liczbę całkowitą N, całkowitą liczbę uczniów.
Drugi wiersz zawiera nazwy kolumn w dowolnej kolejności.

Kolejne N wierszy zawiera znaki, identyfikatory, nazwę i klasę, pod odpowiednimi nazwami kolumn.

Ograniczenia:

  • 0 <= N <= 100

Wydrukuj średnie oceny z listy skorygowane do 2 miejsc po przecinku.

Przykładowe dane wejściowe:

PRZYKŁAD TESTOWY 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

PRZYKŁAD TESTOWY 01

78.00

81.00

PRZYKŁAD TESTOWY 01

Średnia = (97 + 50 + 91 + 72 + 80)/5

Czy potrafisz rozwiązać to wyzwanie w 4 liniach kodu lub mniej?

UWAGA: Nie ma kar za rozwiązania, które są poprawne, ale mają więcej niż 4 linie.

Rozwiązanie

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)