Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zadaci za wannabe pythoniste

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 17 18 19 20 21 22 23 24 25 26 ... Dalje > >>

[ Pregleda: 51905 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste28.03.2020. u 09:38 - pre 49 meseci
One-liner Linux shell

$ echo -e '\n\nBoys:\n' ; head -1 -q BabyNames/*Boys*.txt | awk '{print $1}' | sort -u ; echo -e "\n\nGirls:\n"; head -1 -q BabyNames/*Girls*.txt | awk '{print $1}' | sort -u


Boys:

David
Jacob
James
John
Michael
Robert


Girls:

Ashley
Emily
Emma
Isabella
Jennifer
Jessica
Linda
Lisa
Mary
Sophia


Mrzelo me da napravim for petlju, pa da linija bude malo kraća...
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste28.03.2020. u 09:50 - pre 49 meseci
Na mnogobrojne zahteve, evo kraće, sa for petljom

$ for g in 'Boys' 'Girls'; do echo -e "\n\n${g}:\n" ; head -1 -q BabyNames/*${g}*.txt | awk '{print $1}' | sort -u ; done


Boys:

David
Jacob
James
John
Michael
Robert


Girls:

Ashley
Emily
Emma
Isabella
Jennifer
Jessica
Linda
Lisa
Mary
Sophia
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
*.ip-149-56-46.net.



+3 Profil

icon Re: Zadaci za wannabe pythoniste28.03.2020. u 09:57 - pre 49 meseci
Hvala Panto i Berislave na korekcijama.
Komplikovani ovi nested rečnici :)

Berislave, nisam iz tvojih komentara još uvek uspeo da sklopim program.
Ono što sam dobio je ovo:

Code:
for filename in glob.glob('*txt'):
     lines = open(filename).readlines()
     if 'Boys' in filename:
         for line in lines:
             name = line.strip().split()[0]
             broj = line.strip().split()[1]
             godina = filename[0:4]

decaci = { 'Boys Names': {} }
for k1, v1 in decaci.items():
    for k2, v2 in v1.items():
        if name not in v2.keys():
            decaci['Boys Names'][name] = {}
        if godina not in decaci['Boys Names'][name]:
            decaci['Boys Names'][name][godina] = broj


Ali kad se kod izvrši, rečnik je još uvek prazan,
{'Boys Names': {}}

iako kad pozovem godina ispiše 2012, što znači da je prošao sve fajlove.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
*.ip-149-56-46.net.



+3 Profil

icon Re: Zadaci za wannabe pythoniste28.03.2020. u 10:00 - pre 49 meseci
Đoko, slabo je to.
Nemaš ni godine ni brojeve.
2+
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste28.03.2020. u 10:15 - pre 49 meseci
Citat:
Napisati program koji čita svaki fajl i identifikuje sva imena koja su bila najpopularnija najmanje u jednoj godini. Program ispisuje dve liste:
jedna sadrži najpopularnija imena za dečake, a druga za djevojčice. Nijedan spisak ne sadrži ponovljena imena.


1. Čita svaki fajl
2. Nalazi u svakom fajlu najčešće ime te godine
3. Ispisuje dve liste
4. Nijedno ime se ne ponavlja

Samo sam hteo da pokažem zašto ljudi, koji poznaju Linux/Unix, ne žele tako lako da pređu na drugi sistem.
Skoro za svaki posao, Linux ima gomilu programa koji mogu da urade ceo ili deo posla...
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
*.ip-149-56-46.net.



+3 Profil

icon Re: Zadaci za wannabe pythoniste28.03.2020. u 10:28 - pre 49 meseci
Ma šalim se malo, da razvedrim dan od ovih korona vesti.

Čim naučim Python, prelazim na učenje Linuxa :)
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste28.03.2020. u 11:01 - pre 49 meseci
Evo legende:

for VARIJABLA in LISTA ... do ... done : Bash for petlja
echo -e: ispisuje string na standardni izlaz i (-e) interpretira specijalne znake u stringu (\n novi red)
head -1 -q: ispisuje prvih nekoliko (-1 jednu) linija i ne ispisjue (-q) naziv fajla iz kojeg su te linije
awk '{print $1}': posebna priča koja treba da se nauči (a nauči se za 2-3 sata). Ovaj awk program za svaku liniju sa ulaza, ispisuje prvu reč na izlaz
sort -u: sortira ono što mu dođe na ulaz, a (-u) izbacuje duplikate (unique sort)
| : pipe - povezuje dve komande, tako što izlaz komande sa leve strane prosleđuje na ulaz komande sa desne strane
; : razdvaja dve komande u istoj linij.
IMEVARIJABLE, $IMEVARIJABLE : ime, odnosno vrednost varijable, u primeru g i $g. ${g} je isto što i $g ali se koristi u slučajevima kada postoje neki specijalni znaci u liniji, pa da se zna šta je varijabla. Recimo $g* nije baš jasno šta je, ali je ${g}* nedvosmisleno.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste28.03.2020. u 11:20 - pre 49 meseci
Citat:
djoka_l:
Na mnogobrojne zahteve, evo kraće, sa for petljom

$ for g in 'Boys' 'Girls'; do echo -e "\n\n${g}:\n" ; head -1 -q BabyNames/*${g}*.txt | awk '{print $1}' | sort -u ; done


Boys:

David
Jacob
James
John
Michael
Robert


Girls:

Ashley
Emily
Emma
Isabella
Jennifer
Jessica
Linda
Lisa
Mary
Sophia


Da al ispisujes samo imena, to i klasicni program moze kratko...
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste28.03.2020. u 11:30 - pre 49 meseci
Ma jeste, ali je poenta u 1-lineru
Svojevremeno, kada sam išao na intervencije kod korisnika, uvek se skupi po nekoliko ljudi iz IT-a da pohvataju sve šta kucam u terminalu, da bi kasnije mogli da analiziraju šta sam radio i iskoriste u svojim programima

Meni je bilo čudno što je uvek gužva oko mene, ali kad su mi rekli razlog, počeo sam sve da zapisujem u fajlove, da ljudi mogu da analiziraju na miru...
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 803



+634 Profil

icon Re: Zadaci za wannabe pythoniste28.03.2020. u 15:52 - pre 49 meseci
Citat:
a1234567:
Komplikovani ovi nested rečnici :)
Ali kad se kod izvrši, rečnik je još uvek prazan,
{'Boys Names': {}}


Logicno da je prazno, jer program ne radi nista:
Code:

decaci = { 'Boys Names': {} }
for k1, v1 in decaci.items():
    ...

Recnik je prazan, pa for-petlja analizira taj prazan recnik i odmah zavrsava. Recnik treba inicijalizovati na pocetku, a puniti ga tokom ucitavanja linija iz fajla:

Code:

decaci = { 'Boys Names': {} }
for filename in glob.glob('*txt'):
     lines = open(filename).readlines()
     if 'Boys' in filename:
         for line in lines:
             name, broj = line.strip().split()
             godina = filename[0:4]
            if name not in decaci['Boys Names']:
                decaci['Boys Names'][name] = {}
            if godina not in decaci['Boys Names'][name]:
                decaci['Boys Names'][name][godina] = broj
...


One promenljive k1, v1, k2, v2 itd. su ti nepotrebne, bas kao i funkcija keys(). Kada pretrazujes recnik 'dict' i kazes 'for element in dict:' podrazumeva se dict.keys(). Isto tako ako ispitujes da li je kljuc k u recniku dovoljno je da kazes 'if k in dict'.

Takodje, misli da ti je ovaj 'Boys Names' cist visak. Ako vec imas posebne recnike za decake i devojcice, nema svrhe da uvodis jos jedan nivo u strukturu recnika. Dovoljno je reci:

Code:

decaci = {}
for filename in glob.glob('*txt'):
     lines = open(filename).readlines()
     if 'Boys' in filename:
         for line in lines:
             name, broj = line.strip().split()
             godina = filename[0:4]
            if name not in decaci:
                decaci[name] = {}
            if godina not in decaci[name]:
                decaci[name][godina] = broj
...

 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste28.03.2020. u 17:53 - pre 49 meseci
A evo ga i Haskell (nije me mrzelo:)

Code:

import Data.List
import Data.List.Split
import System.Directory
import Data.Map.Strict
import Control.Monad
import Text.Printf
main = do
    files <- listDirectory "BabyNames"
    let maxs_girls = empty :: Map String [(Int,Int)]
        maxs_boys = empty :: Map String [(Int,Int)]  
    (maxs_girls',maxs_boys') <- foldM (\gb filename -> do
           cnt <- readFile $ "BabyNames/"++filename
           let [year,girlsboys] = splitOn "_" filename
               year' = read year
           let (name,number) = Data.List.foldl (\max ln -> let 
                                                     [name,number] = words ln
                                                     number' = read number
                                                 in if snd max < number' 
                                                    then (name,number')
                                                    else max ) ("",0) $ lines cnt
           return $ if girlsboys == "GirlsNames.txt" 
                        then (insertWith (++) name [(year',number)] (fst gb), snd gb)
                        else (fst gb,insertWith (++) name [(year',number)] (snd gb))
           ) (maxs_girls,maxs_boys) files :: IO (Map String [(Int,Int)], Map String [(Int,Int)])
    let a = foldlWithKey (\fv name list  -> fv ++ (printf "%s\n" $ name ++ ":" ++ show (sort list))) "" maxs_girls'
    let b = foldlWithKey (\fv name list -> fv ++ (printf "%s\n" $ name ++ ":" ++ show (sort list))) "" maxs_boys'
    putStrLn $ "Girls\n" ++ a ++ "Boys\n" ++ b


output:
Code:

~/.../examples/haskell >>> ./girlsboys                                                                                                                                                                                            
Girls
Ashley:[(1991,43489),(1992,38451)]
Emily:[(1996,25148),(1997,25729),(1998,26177),(1999,26535),(2000,25953),(2001,25050),(2002,24454),(2003,25682),(2004,25021),(2005,23921),(2006,21381),(2007,19331)]
Emma:[(2008,18787)]
Isabella:[(2009,22257),(2010,22856)]
Jennifer:[(1970,46159),(1971,56785),(1972,63605),(1973,62454),(1974,63106),(1975,58180),(1976,59476),(1977,58961),(1978,56310),(1979,56713),(1980,58383),(1981,57035),(1982,57102),(1983,54335),(1984,50551)]
Jessica:[(1985,48343),(1986,52657),(1987,55984),(1988,51523),(1989,47890),(1990,46461),(1993,34979),(1994,32113),(1995,27938)]
Linda:[(1947,99685),(1948,96178),(1949,90986),(1950,80437),(1951,73884),(1952,67076)]
Lisa:[(1962,46085),(1963,56036),(1964,54272),(1965,60262),(1966,56912),(1967,52429),(1968,49528),(1969,45034)]
Mary:[(1900,16708),(1901,13136),(1902,14486),(1903,14275),(1904,14962),(1905,16067),(1906,16370),(1907,17581),(1908,18666),(1909,19258),(1910,22847),(1911,24388),(1912,32298),(1913,36640),(1914,45345),(1915,58187),(1916,61433),(1917,64280),(1918,67372),(1919,65837),(1920,70978),(1921,73983),(1922,72167),(1923,71630),(1924,73513),(1925,70603),(1926,67830),(1927,70617),(1928,66861),(1929,63500),(1930,64129),(1931,60294),(1932,59865),(1933,55484),(1934,56906),(1935,55068),(1936,54361),(1937,55639),(1938,56202),(1939,54902),(1940,56201),(1941,58023),(1942,63242),(1943,66166),(1944,62468),(1945,59284),(1946,67459),(1953,64330),(1954,67994),(1955,63164),(1956,61750),(1957,61092),(1958,55840),(1959,54473),(1960,51474),(1961,47657)]
Sophia:[(2011,21780),(2012,22158)]
Boys
David:[(1960,85928)]
Jacob:[(1999,35342),(2000,34460),(2001,32520),(2002,30552),(2003,29605),(2004,27868),(2005,25809),(2006,24811),(2007,24238),(2008,22547),(2009,21113),(2010,22052),(2011,20269),(2012,18899)]
James:[(1940,62452),(1941,66714),(1942,77164),(1943,80236),(1944,76936),(1945,74439),(1946,87432),(1947,94743),(1948,88544),(1949,86776),(1950,86227),(1951,87099),(1952,87035)]
John:[(1900,9830),(1901,6899),(1902,7908),(1903,7609),(1904,8108),(1905,8059),(1906,8264),(1907,8983),(1908,9342),(1909,9591),(1910,11451),(1911,13446),(1912,24586),(1913,29324),(1914,37945),(1915,47579),(1916,50046),(1917,51854),(1918,56559),(1919,53530),(1920,56918),(1921,58230),(1922,57268),(1923,57469)]
Michael:[(1954,88481),(1955,88279),(1956,90611),(1957,92705),(1958,90494),(1959,85285),(1961,86908),(1962,85038),(1963,83794),(1964,82666),(1965,81058),(1966,80008),(1967,82455),(1968,82027),(1969,85226),(1970,85312),(1971,77601),(1972,71420),(1973,67851),(1974,67579),(1975,68453),(1976,66971),(1977,67608),(1978,67139),(1979,67717),(1980,68656),(1981,68733),(1982,68176),(1983,67976),(1984,67703),(1985,64876),(1986,64170),(1987,63625),(1988,64095),(1989,65386),(1990,65270),(1991,60782),(1992,54373),(1993,49552),(1994,44463),(1995,41403),(1996,38360),(1997,37543),(1998,36608)]
Robert:[(1924,60795),(1925,60903),(1926,61113),(1927,61657),(1928,60665),(1929,59799),(1930,62120),(1931,60495),(1932,59240),(1933,54188),(1934,55823),(1935,56509),(1936,58477),(1937,61807),(1938,62261),(1939,59631),(1953,86092)]


 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.175.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste29.03.2020. u 16:35 - pre 49 meseci
Branimire, svaka čast na trudu!

Evo novog izazova u narednoj poruci i za tebe i za mene :)
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.175.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste29.03.2020. u 17:06 - pre 49 meseci
Žurka za dečijim imenima se nastavlja.

Zadatak broj 32: Pronaći imena koja su rodno neutralna

Neka imena kao što su Ben, Jonathan i Andrew se obično koriste samo za dečake,
dok su Rebecca i Flora obično rezervisane za devojčice. No, ima imena
kao što su Chris i Alex, koja se mogu koristiti i kao muška i kao ženska.

Napiši program koji nalazi i prikazuje sva dečija imena koja su korišćena i za dečake
i za devojčice u godini koju unese korisnik. Program takođe treba da generiše
odgovarajuću poruku ukoliko u odabranoj godini nije bilo rodno neutralnih imena.
Takođe, prikaži odgovarajuću poruku ako nemaš podatke za unetu godinu.


Ja sam sklepao nešto ovako:

Code:
import glob
spisak = open('c:/FAJLOVI/Python_School/Stephenson_ThePythonWorkbook/unisex.txt', 'w')

lista_m = []
lista_z = []
lista_unikat = []
imena = {}

for filename in glob.glob('*txt'):
    if 'Boys' in filename:
        lines = open(filename).readlines()
        for line in lines:
            name = line.strip().split()[0]
            godina = int(filename[0:4])
            lista_m.append(name)
            
    elif 'Girls' in filename:
        lines = open(filename).readlines()
        for line in lines:
            name = line.strip().split()[0]
            godina = int(filename[0:4])
            lista_z.append(name)
            
    lista_unikat = set(lista_m).intersection(lista_z)
    imena[godina] = lista_unikat

spisak.write(str(imena) + '\n')
spisak.close()

a rečnik imena izgleda ovako, uz "mali" problem da se javljaju neka imena kojih nema u oba spiska za datu godinu (na primer Shannon), al nemam pojma zašto:

{1900: {'Jessie', 'Willie'}, 1901: {'Jessie', 'Willie'}, 1902: {'Jessie', 'Willie'}, 1903: {'Jessie', 'Willie'}, 1904: {'Jessie', 'Willie'}, 1905: {'Jessie', 'Willie'}, 1906: {'Jessie', 'Willie'}, 1907: {'Jessie', 'Willie'}, 1908: {'Jessie', 'Willie'}, 1909: {'Jessie', 'Willie'}, 1910: {'Jessie', 'Willie'}, 1911: {'Jessie', 'Willie'}, 1912: {'Jessie', 'Willie'}, 1913: {'Jessie', 'Willie'}, 1914: {'Jessie', 'Willie'}, 1915: {'Jessie', 'Willie'}, 1916: {'Jessie', 'Willie'}, 1917: {'Jessie', 'Willie'}, 1918: {'Jessie', 'Willie'}, 1919: {'Jessie', 'Willie'}, 1920: {'Jessie', 'Willie'}, 1921: {'Jessie', 'Willie'}, 1922: {'Jessie', 'Willie'}, 1923: {'Jessie', 'Willie'}, 1924: {'Jessie', 'Willie'}, 1925: {'Jessie', 'Willie'}, 1926: {'Jessie', 'Willie'}, 1927: {'Jessie', 'Willie'}, 1928: {'Jessie', 'Willie'}, 1929: {'Jessie', 'Willie'}, 1930: {'Jessie', 'Willie'}, 1931: {'Jessie', 'Willie'}, 1932: {'Jessie', 'Willie'}, 1933: {'Jessie', 'Willie'}, 1934: {'Jessie', 'Willie'}, 1935: {'Jessie', 'Willie'}, 1936: {'Jessie', 'Willie'}, 1937: {'Jessie', 'Willie'}, 1938: {'Jessie', 'Willie'}, 1939: {'Jessie', 'Willie'}, 1940: {'Jessie', 'Willie'}, 1941: {'Jessie', 'Willie'}, 1942: {'Jessie', 'Willie'}, 1943: {'Jessie', 'Willie'}, 1944: {'Jessie', 'Willie'}, 1945: {'Jessie', 'Willie'}, 1946: {'Jessie', 'Willie'}, 1947: {'Jessie', 'Willie'}, 1948: {'Jessie', 'Willie'}, 1949: {'Jessie', 'Willie'}, 1950: {'Jessie', 'Willie'}, 1951: {'Jessie', 'Willie'}, 1952: {'Jessie', 'Willie'}, 1953: {'Jessie', 'Willie', 'Leslie'}, 1954: {'Jessie', 'Willie', 'Terry', 'Leslie'}, 1955: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry'}, 1956: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry'}, 1957: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry'}, 1958: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry'}, 1959: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry'}, 1960: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry'}, 1961: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry'}, 1962: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry'}, 1963: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry'}, 1964: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry'}, 1965: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry'}, 1966: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry', 'Tracy'}, 1967: {'Leslie', 'Willie', 'Kim', 'Jessie', 'Terry', 'Tracy'}, 1968: {'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy'}, 1969: {'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy'}, 1970: {'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy'}, 1971: {'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy'}, 1972: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy'}, 1973: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy'}, 1974: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1975: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1976: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1977: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1978: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1979: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1980: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1981: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1982: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1983: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1984: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1985: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1986: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Casey', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1987: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Casey', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1988: {'Shannon', 'Leslie', 'Willie', 'Kelly', 'Kim', 'Casey', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1989: {'Jordan', 'Shannon', 'Leslie', 'Taylor', 'Willie', 'Kelly', 'Kim', 'Casey', 'Jessie', 'Terry', 'Tracy', 'Jamie'}, 1990: {'Jordan', 'Shannon', 'Leslie', 'Taylor', 'Willie', 'Kelly', 'Kim', 'Casey', 'Jessie', 'Terry', 'Tracy', 'Jamie'}...}


 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste29.03.2020. u 20:51 - pre 49 meseci
Moras da citas i Girls i Boys za datu godinu.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste29.03.2020. u 21:29 - pre 49 meseci
Evo ga Rust (malo modifikovani onaj prvi program)

Code:

use std::io;
use std::fs::File;
use std::fs::read_dir;
use std::io::prelude::*;
use std::collections::BTreeMap;
use std::collections::BTreeSet;

fn main()->io::Result<()>{
    let mut girls:BTreeMap<i32,BTreeSet<String> > = BTreeMap::new();
    let mut boys:BTreeMap<i32,BTreeSet<String> > = BTreeMap::new();
    let mut common:BTreeMap<i32,BTreeSet<String> > = BTreeMap::new();
    let mut buf = String::new();
    if let Ok(dir) = read_dir("BabyNames") {
        for file in dir {
            let file = file?;
            let mut f = File::open(file.path())?;
            buf.clear();
            let _ = f.read_to_string(&mut buf);
            let mut tmp_set = BTreeSet::new();
            for line in buf.lines() {
                let two:Vec<_> = line.split_whitespace().collect();
                tmp_set.insert(two[0].to_string());
            }
            let path = file.path();
            let fname = path.to_str().unwrap().to_string();
            let it = fname.split('_').collect::<Vec<_>>();
            let it1 = it[0].split('/').collect::<Vec<_>>();
            let year = it1[1].parse::<i32>().unwrap();
            let _ = if it[1] == "GirlsNames.txt" {
                girls.entry(year).or_insert(tmp_set)
            } else {
                boys.entry(year).or_insert(tmp_set)
            };
        }
    } else {
        println!("Not in directory above BabyNames...");
    }
    for ((y,g),(_,b)) in girls.iter().zip(boys) {
        for i in g.intersection(&b) {
            let r = common.entry(*y).or_insert(BTreeSet::new());
            (*r).insert(i.clone());
        }
    }
    for i in common {
        println!("{:?}",i);
    }
    Ok(())
}



Code:

~/.../examples/rust >>> ./commongb                                                                                                                                                                                   
(1900, {"Jessie", "Willie"})
(1901, {"Jessie", "Willie"})
(1902, {"Jessie", "Willie"})
(1903, {"Jessie", "Willie"})
(1904, {"Jessie", "Willie"})
(1905, {"Jessie", "Willie"})
(1906, {"Jessie", "Willie"})
(1907, {"Jessie", "Willie"})
(1908, {"Jessie", "Willie"})
(1909, {"Jessie", "Willie"})
(1910, {"Jessie", "Willie"})
(1911, {"Jessie", "Willie"})
(1912, {"Willie"})
(1913, {"Willie"})
(1914, {"Willie"})
(1915, {"Willie"})
(1916, {"Willie"})
(1917, {"Willie"})
(1918, {"Willie"})
(1919, {"Willie"})
(1920, {"Willie"})
(1921, {"Willie"})
(1922, {"Willie"})
(1923, {"Willie"})
(1924, {"Willie"})
(1925, {"Willie"})
(1926, {"Willie"})
(1927, {"Willie"})
(1928, {"Willie"})
(1929, {"Willie"})
(1930, {"Willie"})
(1931, {"Willie"})
(1932, {"Willie"})
(1933, {"Willie"})
(1935, {"Willie"})
(1954, {"Terry"})
(1955, {"Kim", "Terry"})
(1956, {"Terry"})
(1957, {"Terry"})
(1958, {"Terry"})
(1959, {"Terry"})
(1966, {"Tracy"})
(1967, {"Tracy"})
(1968, {"Kelly"})
(1972, {"Shannon"})
(1973, {"Shannon"})
(1974, {"Jamie"})
(1975, {"Jamie"})
(1976, {"Jamie", "Shannon"})
(1977, {"Jamie"})
(1978, {"Jamie"})
(1979, {"Jamie"})
(1986, {"Casey"})
(1987, {"Casey"})
(1988, {"Casey"})
(1989, {"Jordan", "Taylor"})
(1990, {"Jordan", "Taylor"})
(1991, {"Jordan", "Taylor"})
(1992, {"Jordan", "Taylor"})
(1993, {"Jordan", "Taylor"})
(1994, {"Jordan", "Taylor"})
(1995, {"Jordan", "Taylor"})
(1996, {"Jordan", "Taylor"})
(1997, {"Jordan", "Taylor"})
(1998, {"Jordan"})
(1999, {"Jordan"})
(2000, {"Jordan"})
(2001, {"Jordan"})
(2002, {"Jordan", "Riley"})
(2003, {"Jordan"})
(2004, {"Jordan"})
(2005, {"Jordan"})
(2006, {"Jordan"})
(2007, {"Jordan"})

 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste30.03.2020. u 12:00 - pre 49 meseci
Code (python):

import glob

files = sorted(glob.glob('*txt'))
names = {}
for file1, file2 in list(zip(files, files[1:]))[::2]:
    with open(file1) as boys_file, open(file2) as girls_file:
        boys_names = [name.split()[0] for name in boys_file]
        girls_names = [name.split()[0] for name in girls_file]
        name_exist_in_both_lists = [name for name in boys_names if name in girls_names]
        year = int(file1[:4])
        if name_exist_in_both_lists:
            names[year]=name_exist_in_both_lists

for year in names:
    print(year, ', '.join(name for name in names[year]))


Izlaz:

1900 Willie, Jessie
1901 Willie, Jessie
1902 Willie, Jessie
1903 Willie, Jessie
1904 Willie, Jessie
1905 Willie, Jessie
1906 Willie, Jessie
1907 Willie, Jessie
1908 Willie, Jessie
1909 Willie, Jessie
1910 Willie, Jessie
1911 Willie, Jessie
1912 Willie
1913 Willie
1914 Willie
1915 Willie
1916 Willie
1917 Willie
1918 Willie
1919 Willie
1920 Willie
1921 Willie
1922 Willie
1923 Willie
1924 Willie
1925 Willie
1926 Willie
1927 Willie
1928 Willie
1929 Willie
1930 Willie
1931 Willie
1932 Willie
1933 Willie
1935 Willie
1954 Terry
1955 Terry, Kim
1956 Terry
1957 Terry
1958 Terry
1959 Terry
1966 Tracy
1967 Tracy
1968 Kelly
1972 Shannon
1973 Shannon
1974 Jamie
1975 Jamie
1976 Jamie, Shannon
1977 Jamie
1978 Jamie
1979 Jamie
1986 Casey
1987 Casey
1988 Casey
1989 Jordan, Taylor
1990 Jordan, Taylor
1991 Jordan, Taylor
1992 Jordan, Taylor
1993 Jordan, Taylor
1994 Jordan, Taylor
1995 Jordan, Taylor
1996 Jordan, Taylor
1997 Jordan, Taylor
1998 Jordan
1999 Jordan
2000 Jordan
2001 Jordan
2002 Jordan, Riley
2003 Jordan
2004 Jordan
2005 Jordan
2006 Jordan
2007 Jordan
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 803



+634 Profil

icon Re: Zadaci za wannabe pythoniste30.03.2020. u 16:32 - pre 49 meseci
Citat:
a1234567:
"mali" problem da se javljaju neka imena kojih nema u oba spiska za datu godinu (na primer Shannon), al nemam pojma zašto:

Napravio si dve greske. Prva je klasican problem "kumulativnog trpanja" podataka u niz. Problem je sto promenljive lista_m, lista_z i lista_unikat praznis samo na pocetku. Svaki sledeci fajl koji otvoris ih "nasledjuje" u potpunosti i kumulativno dodaje imena u njih. Otuda ti se npr. Shannon, koji se javlja prvi put 1972. godine provlaci i dalje kroz sve naredne godine. Problem zapravo pocinje jos od 1954, gde je Leslie nasledjen(a) iz 1953. i nadalje se provlaci kroz naredne godine. Ok, ovo nije tesko resiti, inicijalizaciju treba ukloniti s vrha i staviti iza linije
lines = open(filename).readlines()
Medjutim, tu postoji jos jedan problem: glob.glob() i os.listdir() vracaju listu fajlova sortiranu po nekoj internoj logici operativnog sistema. Dok Windows sortira fajlove po imenima, Unix/Linux vraca totalno nesortirane fajlove. Znaci, trebalo bi dodati:
for filename in sorted(glob.glob('*txt')):
Na kraju, lepo je sto si iskoristio skup kao strukturu podataka, jer ti to efikasno resava 'uniq' funkciju. Ali sta ce ti onda liste koje pretvaras u skup? Zasto odmah ne koristis skup.add() za dodavanje elementa u skup? Inace, add() funkcija lepo ignorise elemente koji vec postoje u skupu, odnosno dodaje element samo ako vec nije u skupu. Takodje, s obzirom da svaka godina ima muska i zenska imena, nebitno je ispitivati da li je 'Boys' ili 'Girls' u imenu fajla i beleziti posebno muska i zenska imena.

Recimo nesto ovako (nisam testirao, moguce je da sam napravio neki bag, ali ideja je tu):

Code (python):

import glob
spisak = open('c:/FAJLOVI/Python_School/Stephenson_ThePythonWorkbook/unisex.txt', 'w')

imena = {}

for filename in sorted(glob.glob('*txt')):
    godina = int(filename[0:4])
    lines = open(filename).readlines()
    lista= set()                                         # Lista imena u fajlu, pol je nebitan
    for line in lines:
        name = line.strip().split()[0]
        lista.add(name)
    if (godina not in imena):                      # U prvom fajlu iz godine X hashtable imena je prazna
        imena[godina] = lista
    else:                                                  # U drugom fajlu iz godine X trazimo uniq(m,f)
        imena[godina] = imena[godina].intersection(lista)

spisak.write(str(imena) + '\n')
spisak.close()


 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 803



+634 Profil

icon Re: Zadaci za wannabe pythoniste30.03.2020. u 16:50 - pre 49 meseci
A za to vreme u Unix shellu, one-liner:
$ cd BabyNames; grep . * | sed -e 's/ .*$//g' -e 's/_.*:/:/g' | sort | uniq -d

Za one koji bi da imaju lep ispis:
$ cd BabyNames; grep . * | sed -e 's/ .*$//g' -e 's/_.*:/:/g' | sort | uniq -d | gawk -F: '{ if ($1!=prev) printf ("\n%s", $0); else printf (", %s",$2); prev=$1 }'

 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 803



+634 Profil

icon Re: Zadaci za wannabe pythoniste30.03.2020. u 17:17 - pre 49 meseci
Zadatak broj 33: Kreiranje registra imena u Excelu

Evo mog predloga za novi zadatak, prilicno lak. Oslanja se na iste podatke kao prethodna dva, a sluzi za snalazenje s raspolozivim Python modulima. Od fajlova sa imenima treba napraviti program koji generise tabelu u Excelu u sledecem formatu:

+========+========+======+======+======+
| Name | Gender | 2020 | 2019 | 2018 | ...
+========+========+======+======+======+
| Aice | F | 234 | 234 | 234 |
| Anna | F | 13 | 13 | 13 |
| Bob | M | 1234 | 1234 | 1234 |


Imena su u prvoj koloni (A) koja treba sortirati. Pol je u drugoj koloni (B) i moze da bude 'M' ili 'F'. U naredne kolone upisati frekvenciju pojavljivanja imena. Godine sortirati u opadajucem redosledu - kolona C je posldnja godina, kolona D pretposlednja itd. kao u gornjem primeru.
Vrstu koja predstavlja zaglavlje (Name / Gender / godine ...) obojiti u svetlo sivu boju.
Svaku sledecu vrstu obojiti u svetlo plavu ako su u pitanju decaci, a svetlo roze ako su u pitanju devojcice.

Program mora da generise Excel fajl koji se direktno ucitava takav kakav je, formatiran i obojen kao sto je zadato.

Kako poceti? Google => generate excel file from python ...
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste31.03.2020. u 03:34 - pre 49 meseci
Citat:
Panta_:
Code (python):

import glob

files = sorted(glob.glob('*txt'))
names = {}
for file1, file2 in list(zip(files, files[1:]))[::2]:
    with open(file1) as boys_file, open(file2) as girls_file:
        boys_names = [name.split()[0] for name in boys_file]
        girls_names = [name.split()[0] for name in girls_file]
        name_exist_in_both_lists = [name for name in boys_names if name in girls_names]
        year = int(file1[:4])
        if name_exist_in_both_lists:
            names[year]=name_exist_in_both_lists

for year in names:
    print(year, ', '.join(name for name in names[year]))


Izlaz:

1900 Willie, Jessie
1901 Willie, Jessie
1902 Willie, Jessie
1903 Willie, Jessie
 


Panto, šta ti je ovo?
for file1, file2 in list(zip(files, files[1:]))[::2]

Šta su ti ovi indeksi [1:] i [::2]?
 
Odgovor na temu

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 17 18 19 20 21 22 23 24 25 26 ... Dalje > >>

[ Pregleda: 51905 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.