Collections.namedtuple () Question de pratique Python

Nov 28 2022
collections.namedtuple() Fondamentalement, les namedtuples sont des types d'objets légers et faciles à créer.

collections.namedtuple()
Fondamentalement, les namedtuples sont des types d'objets légers et faciles à créer.
Ils transforment les tuples en conteneurs pratiques pour des tâches simples.

Avec les tuples nommés, vous n'avez pas besoin d'utiliser des indices entiers pour accéder aux membres d'un tuple.

Exemple :

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

Le Dr John Wesley dispose d'une feuille de calcul contenant une liste des identifiants, des notes, de la classe et du nom des étudiants.
Votre tâche est d'aider le Dr Wesley à calculer les notes moyennes des étudiants.

Noter:

1. Les colonnes peuvent être dans n'importe quel ordre. Les identifiants, les marques, la classe et le nom peuvent être écrits dans n'importe quel ordre dans la feuille de calcul.

2. Les noms des colonnes sont ID, MARKS, CLASS et NAME. (L'orthographe et la casse de ces noms ne changeront pas.)

Format d'entrée :

La première ligne contient un entier N, le nombre total d'élèves.
La deuxième ligne contient les noms des colonnes dans n'importe quel ordre.

Les N lignes suivantes contiennent les marques, les identifiants, le nom et la classe, sous leurs noms de colonne respectifs.

Contraintes :

  • 0 <= N <= 100

Imprimez les notes moyennes de la liste corrigées à 2 décimales.

Exemple d'entrée :

CAS D'ESSAI 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

CAS D'ESSAI 01

78.00

81.00

CAS D'ESSAI 01

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

Pouvez-vous résoudre ce défi en 4 lignes de code ou moins ?

REMARQUE : Il n'y a pas de pénalité pour les solutions correctes mais comportant plus de 4 lignes.

La solution

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)