Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  2 1530
Ok, jeg har klødd meg kraftig i hodet på dette her, og dette er ganske enkelt å få til, og kan gjøres på maaange måter, men jeg er en sta person, som liker å gjøre ting på bestemte måter, og ønsker å gjøre det på denne måten også, så jeg skal forklare:

kort fortalt: jeg har laget et simuleringsprogram i python, hvor biler ankommer forskjellige ladestasjoner, lader, også stikker. Programmet funker helt fint! ladestasjonene er lagt til i forskjellige lister som "jobb" stasjoner, "vanlig" stasjoner og "hotspot" stasjoner(stasjoner som er plassert på turist attraksjons steder.

Det jeg ønsker nå er å lagre informasjonen fra programmet som kjøres, før så hadde jeg dette i en dictionary, men etter anbefaling om å bruke "namedtuples", samt at jeg liker det, så ønsker jeg å gjøre det på denne måten da dette gjøre det enklere for meg litt senere når jeg skal lage CSV fil.

her er den lille kodesnutten som jeg driver og klør meg i hodet over:

Kode

                hotspot_record = namedtuple("hotspot_day_info", ('hour', 'name', 'cars_in_queue', 'rejected_cars', 'bailed_cars','count_queue_per_hour_and_avg'))
                hotspot_stats_per_hours.append(hotspot_record(
                hour=hour,
                name=hotspot.station_name,
                cars_in_queue=len(hotspot.cars_waiting_in_queue),
                rejected_cars=hotspot.rejected_cars,
                bailed_cars=hotspot.bailed_cars,
                count_queue_per_hour_and_avg = []))  # Hvordan antall kø fra time og inn her?
Dette funker, og disse feltene får inn informasjon(utentatt siste),

Det jeg ønsker med siste feltet, er at den samler tallene fra felt 3(cars in queue), for deretter å summere, også dele dette på 24 slik at jeg kan se hva gjenomsnitts ladestasjonen er på hver kø.

slik printes dette ut i terminalen slik koden fungerer akkurat nå:

Kode

----------------------
hotspot_day_info(hour=24, name='Vika-National theatre & Akershus fortress', cars_in_queue=20, rejected_cars=3469, bailed_cars=315, count_queue_per_hour_and_avg=[])
----------------------
hotspot_day_info(hour=24, name='Frogner', cars_in_queue=20, rejected_cars=5170, bailed_cars=622, count_queue_per_hour_and_avg=[])
Det jeg ønsker er å kunne bruke det siste feltet til å legge til alle "cars_in_queue" verdiene, slik at jeg har en totalsum, og kan dele på 24..
Så da er spørsmålet, hvordan kan jeg iterere inn i den lista og legge til en og en samtidig med simuleringen? Er dette mulig eller er det eneste valget å ha en ekstra liste eller dictionary hvor du legger til de verdiene?


PS: jeg har koden lastet opp på gitlab og ikke github, men jeg sliter med å finne settingen som gjør at jeg kan sette repoet til å være public, så hvis noen vet hvordan jeg kan gjøre dette, så si fra

PS: admin Vidarlo, I hope you are watching
Sist endret av random512377; 18. desember 2018 kl. 20:39.
Ser ut som hotspot_stats_per_hours er en liste, kunne du gjort noe ala det her? I en for loop selvfølgelig

Kode

>>> hotspot_stats_per_hours[11].cars_in_queue
20
>>> hotspot_stats_per_hours[11].count_queue_per_hour_and_avg.append(hotspot_stats_per_hours[11].cars_in_queue)
>>> hotspot_stats_per_hours[11].count_queue_per_hour_and_avg
[20]
>>> hotspot_stats_per_hours[11].count_queue_per_hour_and_avg.append(hotspot_stats_per_hours[11].cars_in_queue)
>>> hotspot_stats_per_hours[11].count_queue_per_hour_and_avg
[20, 20]
Eneste problemet er at, slik jeg forstår det hvertfall, så går det ikke an å endre på verdiene i en namedtuple etter at det er lagt til. Men det går an å legge til verdiene i count_queue_per_hour_and_avg så eventuelt gjøre noe som det her:

Kode

sum(hotspot_stats_per_hours[11].count_queue_per_hour_and_avg)
40
Med mindre jeg misforstår da. Er det noe sånt som det her du tenkte?

Edit

Du kan forresten endre repoet til public via den innstillingen her:

Sist endret av Raging Vlad; 19. desember 2018 kl. 13:55.
Gjest
Trådstarter
Jeg løste problemet til slutt! Ikke langt ifra forslaget ditt, men jeg gjorde dette:

hotspot_hour_info = namedtuple('hotspot_hour_info', ['hour', 'name', 'hotspot_number_of_cars_in_queue_per_hour'])
hotspot_day_info = namedtuple('hotspot_day_info', ['day', 'name', 'hotspot_avg_queue_length'])

hotspot_days_collection = {}

inne i hotspot loopen så har jeg dette:
hotspot_number_of_cars_in_queue_per_hour = len(hotspot.cars_waiting_in_queue)
hotspot_days_collection.setdefault(hotspot.station_name, []).append(hotspot_hour_info(hour, hotspot.station_name, hotspot_number_of_cars_in_queue_per_hour))


og på bunnen når loopen er ferdig så leser jeg rett fra "hotspot_days_collection" lista:

for print_end_of_the_day_info in hotspot_daily_infos:
print(colored(print_end_of_the_day_info, 'yellow'))

funker fint nå

PS: Når programmet er 100% ferdig, så tenker jeg å dele det public på gitlab
Sist endret av random512377; 20. desember 2018 kl. 14:56.