• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python - dni pracy

Object Storage Arubacloud
+2 głosów
381 wizyt
pytanie zadane 19 kwietnia 2022 w Python przez mewtwo Użytkownik (830 p.)

Język PYTHON, 

mam problem ze zliczaniem, liczbę dni od rozpoczęcia pracy.

do funkcji englishBreakfast() przez parametr przekazano listę zawierającą dane tajnych agentów Jej Królewskiej Mości. Dane zorganizowane są w dwuelementowe listy, zawierające następujące informacje: kod agenta, data zatrudnienia jako łańcuch znaków w formacie: "RRRRMMDD". 

Funkcja powinna zwrócić listę, która zamiast dat zatrudnienia będzie zawierała liczbę dni (jako wartość typu int), które upłynęły od daty zatrudnienia do aktualnej daty w momencie uruchomienia funkcji. 

Przykład dla funkcji uruchomionej 10 stycznia 2020 r:

Wejście: 
[ [ '001', '20200109' ], [ '003', '20200101' ], [ 007', '20060712' ] ]

Wyjście: 
[ [ '001', 1 ], [ '003', 9 ], [ 007', 4930 ] ]

 

Kod:

def englishBreakfast(x):
    
    result = []
    
    for i in range(len(x)):
        for j in range(len(x[i])):
           result.append(x[i][0] + (2022 - int(x[i][j][: 4]))) 
            
    return result

 

2 odpowiedzi

+1 głos
odpowiedź 20 kwietnia 2022 przez edutomek Dyskutant (8,380 p.)
wybrane 20 kwietnia 2022 przez mewtwo
 
Najlepsza

1) Niepotrzebnie iterujesz po indeksach, można to robić wprost po elementach tablicy:

for agent_code, start_date in x:

2) Lista wynikowa powinna być listą list, a nie listą napisów, czy jeszcze czegoś innego. W append powinna być lista agent_code oraz liczby dni, a nie suma (+) dwóch wartości.

Swoją drogą w Pythonie dodawanie napisu (kodu agenta) do liczby spowoduje błąd.

3) Skoro mowa o liczbie dni, jakie upłynęły, to nie wystarczy od 2022 odjąć części napisu daty skonwertowanego do int-a.

W ogóle: dlaczego to 2022? A jak ktoś uruchomi kod za 5 lat?

Wpisujemy "python date diff" i znajdujemy np. to.
Odnośnie dzisiejszej date, po wpisaniu "python current date" znajdujemy np. to

Podsumowując:

for agent_code, start_date in x:
  # obliczenie różnicy w dniach
  result.append([agent_code, days_diff])

Jedna, prostsza pętla zamiast dwóch. Kodu nie testowałem, chodzi mi raczej o ideę.
 

+1 głos
odpowiedź 20 kwietnia 2022 przez VBService Ekspert (253,340 p.)
edycja 21 kwietnia 2022 przez VBService

zawierała liczbę dni (jako wartość typu int), które upłynęły od daty zatrudnienia do aktualnej daty w momencie uruchomienia funkcji

tak jak już napisał tobie @edutomek, nie możesz wstawić liczby 2022 reprezentującej rok (jak się domyślam) ta "liczba" musi odpowiadać dacie

 w momencie uruchomienia funkcji

więc musisz wykonać działanie obliczenia dni na dwóch datach np.

d1 = date.today() # w momencie uruchomienia funkcji
d2 = datetime.strptime('20200109', '%Y%m%d') # data pobrana z listy

 

przykład  [ on-line ]

from datetime import datetime as dt, date

def englishBreakfast(x):
    datediff = lambda d: abs(dt.strptime(date.today().strftime('%Y%m%d'), '%Y%m%d') - dt.strptime(d, '%Y%m%d')).days
    result = []
    
    for agent_code, start_date in x:
        result += [[agent_code, datediff(start_date)]]
        
    return result

x = [ [ '001', '20200109' ], [ '003', '20200101' ], [ '007', '20060712' ] ]
print(englishBreakfast(x))

 

Podobne pytania

+1 głos
2 odpowiedzi 776 wizyt
0 głosów
0 odpowiedzi 138 wizyt
pytanie zadane 4 stycznia 2019 w Ogłoszenia, zlecenia przez 360digitalnatives Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 4,445 wizyt
pytanie zadane 25 czerwca 2018 w Java przez Que Początkujący (260 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...