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

Python - Zadanie domowe

Object Storage Arubacloud
0 głosów
1,480 wizyt
pytanie zadane 12 listopada 2016 w Python przez GUNJack Użytkownik (520 p.)
Witam!

Uczę się programować w języku Python 3.5 już jakiś czas, i ostatnio na studiach dostałem pracę domową z następującą treścią:

utworzyć dwa pliki formatu CSV
1. Imię / Wiek – wiek danej osoby
2. Imię / Data / Kwota (takie same daty, imiona, kwoty) – kto kiedy był u dentysty i ile zapłacił
3. Wczytać do pamięci i zrobić program który wytworzy dla każdej osoby : np. Ania była 3 razy u dentysty w sumie zapłaciła ileś tam i ile razy była odkąd skończyła 18 lat – nowy CSV dla każdej osoby.

Tutaj mój kod, czyli tyle ile udało mi się zrobić

https://paste2.org/cADGC7p6

Mianowicie jaki mam problem, wszystkie elementy listy to oczywiście Stringi i tutaj właśnie pojawia się niezrozumiały problem (przynajmniej przeze mnie) w linijce 12, chce zliczyć ile razy dana osoba była u dentysty (w tym momencie wypisuje mi te daty) chciałbym użyć polecenia "len" czyli "len(row[1])" ale pokazuje mi następujący błąd: TypeError: Can't convert 'int' object to str implicitly,a drugi problem to jak przekonwertować String z listy na int ???

Będę bardzo wdzięczny za udzieloną pomoc i rady :)

1 odpowiedź

+3 głosów
odpowiedź 12 listopada 2016 przez adrian17 Ekspert (344,860 p.)
wybrane 13 listopada 2016 przez GUNJack
 
Najlepsza

chce zliczyć ile razy dana osoba była u dentysty 

Czyli innymi słowy, ile jest wierszy z tym samym imieniem. Ale... skąd Python ma wiedzieć, że o to chodzi? len() sprawdza tylko długość rzeczy którą mu dasz, to nie ma żadnego związku z liczbą wystąpień - to musisz zrobić sam.

 jak przekonwertować String z listy na int 

liczba = int(tekst)

TypeError: Can't convert 'int' object to str implicitly

Nie możesz łączyć tak po prostu stringów z intami. Na stringi zamienia się przez str(). Ale jeszcze lepiej w ogóle nie łączyć stringów - bo to paskudne - i użyć .format(). Porównaj:

print("Pacjent " + row[0] + " " + "był u dentysty" + row[1] + "razy" + "," + "i wydał " + row[2] + " " + "złotych")
print("Pacjent {} był u dentysty {} razy i wydał {} złotych".format(row[0], row[1], row[2]))

 

komentarz 13 listopada 2016 przez GUNJack Użytkownik (520 p.)

Zamieszczę tutaj zdjęcia moich plików CSV dla jasności 

Polecenie format rzeczywiście coś dało ale teraz problem bo jak widać w pliku CSV Dentysta mam dla danej osoby jakieś daty i jakieś kwoty i jak zrobić żeby wyświetliło mi przykładowo dla pacjenta Jan: że był u dentysty 3 razy i zapłacił 300 złotych po jak chce przekonwertować na int kwote to wyskakuje taki błąd jak jest na screenie a jak jest jedna wartość przykładowo 100 zł to rzeczywiście działa ale to nie jest to czego chce bo chce te kwoty zsumować.

komentarz 13 listopada 2016 przez adrian17 Ekspert (344,860 p.)

jak zrobić żeby wyświetliło mi przykładowo dla pacjenta Jan: że był u dentysty 3 razy i zapłacił 300 złotych

Tak jak napisałem wyżej - musisz to samodzielnie zliczyć i zsumować.

Zamieszczę tutaj zdjęcia

Nie wiem jak wrzuciłeś, ale w takiej rozdzielczości że i tak nic nie widać.

komentarz 13 listopada 2016 przez GUNJack Użytkownik (520 p.)
komentarz 13 listopada 2016 przez adrian17 Ekspert (344,860 p.)
Jan,01.02.2000 10.05.2012,100 200

Um... na pewno tak ma wyglądać plik csv? To wygląda niezwykle dziwnie. Znacznie więcej sensu miałoby:

Jan,01.02.2000,100
Jan,10.05.2012,200

A wracając... zakładając że Twój format jest poprawny... "100 200" to oczywiście nie jest poprawna liczba, więc int() zgłasza błąd. Musisz rozdzielić ten string na dwie liczby, "100" i "200" i wtedy je zamienić na inty.

komentarz 13 listopada 2016 przez GUNJack Użytkownik (520 p.)
Ok działa dzięki wielkie, teraz zabiorę się za resztę zadania :)

Podobne pytania

–3 głosów
1 odpowiedź 268 wizyt
pytanie zadane 14 listopada 2016 w Python przez Jakub Śliż Użytkownik (940 p.)
0 głosów
3 odpowiedzi 1,807 wizyt
0 głosów
1 odpowiedź 186 wizyt
pytanie zadane 16 stycznia 2020 w Python przez tonn204 Mądrala (7,440 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...