1
votes

Comment parcourir une liste de tuples?

J'ai des doutes sur ce devoir sur python. L'exercice comprend les éléments suivants:

Ce bus dispose d'un système de contrôle d'entrée et de sortie des passagers pour surveiller le nombre d'occupants qu'il transporte et ainsi détecter quand la capacité est trop élevée.

À chaque arrêt, l'entrée et la sortie des passagers sont représentées par un tuple composé de deux nombres entiers.

bus_is_full = False
bus_capacity = 0
stops = [(20, 0), (13, 7), (40, 10), (1, 20)]
while not bus_is_full == True:
    for stop in stops:
        bus_capacity = stops()
        if bus_capacity == 50:
            bus_is_full = True
            stops +=1 
        elif bus_capacity < 50:
            stops +=1
    print(bus_capacity)

La succession d'arrêts est représentée par une liste de ces tuples.

stops = [(in1, out1), (in2, out2), (in3, out3), (in4, out4)]

Objectifs:

  • Utiliser des listes, des tuples
  • Utiliser les boucles while / for
  • Utiliser une longueur minimale, maximale
  • Utiliser l'écart type moyen

Tâches:

  • Calculez le nombre d'arrêts.
  • Attribuer à une variable une liste dont les éléments sont le nombre de passagers à chaque arrêt (in-out),
  • Trouvez l'occupation maximale du bus.

Jusqu'à présent, j'ai trouvé ce code mais il ne renvoie rien, donc je fais certainement quelque chose de mal en raison de mon inexpérience avec python.

bus_stop = (in, out)


7 commentaires

pour une question de débogage, je vois que vous avez fourni l'entrée, et votre sortie actuelle (rien) si bon début. Vous devez également dire ce que la sortie "devrait être".


bus_capacity = arrête ()?


Lorsque j'essaye d'exécuter le code tel que publié, j'obtiens une erreur. Cela compte comme sortie, vous devriez donc avoir publié cela également.


Vous ne devez poser qu'une seule question à la fois sur stackoverflow. Relisez vos "Objectifs" et pensez à une meilleure façon de déterminer le nombre d'arrêts, en utilisant un seul appel à une fonction intégrée python que vous êtes censé utiliser. (bien qu'il soit mal orthographié dans la section "Objectifs")


À côté du point, mais tant qu'il n'est pas bus_is_full == True -> alors qu'il n'est pas bus_is_full


Rien dans le problème ne dit quoi que ce soit sur le fait que le bus est plein ou ne peut transporter que 50 personnes. D'où vient cela? Il dépasse clairement 50.


Cela aidera sur la deuxième partie: docs.python.org/3 / tutoriel /… vers la partie inférieure de cette petite section.


3 Réponses :


0
votes

Le code ci-dessous s'arrête au 3e arrêt avec une capacité supérieure à 50 (population réelle 56)

bus_is_full = False
bus_capacity = 0
stops = [(20, 0), (13, 7), (40, 10), (1, 20)]
stops_count = 0 # count the number of bust stops till capacity limit reached (including this stop)
for stop in stops:
    bus_capacity += stop[0] - stop[1]  # update tot bus_capacity with change in current bus stop (e.g if (13, 7) -> +6 people added)
    if bus_capacity >= 50:
        bus_is_full = True
        stops_count += 1 
        break
    elif bus_capacity < 50:
        stops_count += 1
print(bus_capacity)
print(stops_count)


0 commentaires

0
votes

Vous pouvez convertir votre tuple dans une liste.

    bus_is_full = False
    bus_capacity = 0
    stops = [(20, 0), (13, 7), (40, 10), (1, 20)]
    number_stops = len(stops)
    print("The number of stops is : {0}\n".format(bus_capacity))
    i=0
    while i < number_stops :
        for stop in stops:
            l = list(stop)
            in_i = l[0]
            out_i = l[1]
            print("For the {0} stop, {1} passengers entered and {2} passengers left the bus".format(i, in_i, out_i) )
            i += 1


0 commentaires

0
votes

Voici une manière un peu plus simple d'écrire ce que Sultan1991 a dit

bus_capacity = 0
stops = [(20, 0), (13, 7), (40, 10), (1, 20)]
num_stops = 0
for on, off in stops:
    bus_capacity += on - off
    num_stops += 1
    if bus_capacity >= 50:
       break
print("Bus capacity:", bus_capacity)
print("Number of stops:",num_stops)

Attention également: une boucle comme celle-ci n'est pas particulièrement performante sur de grands ensembles de données. Donc, si vous travaillez avec plus de données que cela, je vous suggère de regarder les bibliothèques numpy ou pandas car elles pourraient considérablement accélérer et réduire la mémoire nécessaire pour des opérations comme celle-ci. .


0 commentaires