Collections.namedtuple() Python-Übungsfrage

Nov 28 2022
collections.namedtuple() Im Grunde genommen sind namedtuples einfach zu erstellende, leichtgewichtige Objekttypen.

collections.namedtuple()
Grundsätzlich sind namedtuples einfach zu erstellende, leichtgewichtige Objekttypen.
Sie verwandeln Tupel in praktische Container für einfache Aufgaben.

Bei namedtuples müssen Sie keine Integer-Indizes verwenden, um auf Mitglieder eines Tupels zuzugreifen.

Beispiel :

Code 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 hat eine Tabelle mit einer Liste von Schülerausweisen, Noten, Klassen und Namen.
Ihre Aufgabe ist es, Dr. Wesley bei der Berechnung der Durchschnittsnoten der Schüler zu helfen.

Notiz:

1. Spalten können in beliebiger Reihenfolge sein. IDs, Marken, Klasse und Name können in beliebiger Reihenfolge in die Tabelle geschrieben werden.

2. Spaltennamen sind ID, MARKS, CLASS und NAME. (Die Schreibweise und Groß-/Kleinschreibung dieser Namen ändert sich nicht.)

Eingabeformat :

Die erste Zeile enthält eine ganze Zahl N, die Gesamtzahl der Schüler.
Die zweite Zeile enthält die Namen der Spalten in beliebiger Reihenfolge.

Die nächsten N Zeilen enthalten die Markierungen, IDs, Namen und Klassen unter ihren jeweiligen Spaltennamen.

Einschränkungen:

  • 0 <= N <= 100

Drucken Sie die Durchschnittsnoten der Liste auf 2 Dezimalstellen korrigiert aus.

Beispieleingabe:

TESTFALL 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

TESTFALL 01

78.00

81.00

TESTFALL 01

Durchschnitt = (97 + 50 + 91 + 72 + 80)/5

Können Sie diese Herausforderung in 4 Codezeilen oder weniger lösen?

HINWEIS: Es gibt keine Strafe für Lösungen, die richtig sind, aber mehr als 4 Linien haben.

Lösung

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)