Python - súbory – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Python - súbory – Python – Fórum – Programujte.comPython - súbory – Python – Fórum – Programujte.com

 

Pal_lac
~ Anonymní uživatel
5 příspěvků
17. 5. 2019   #1
-
0
-


Ahojte, mohli byste mi někdo poradit s tímto programem? Už se s ním lámu nějakou dobu. V textovém souboru jsou uloženy jména a číslo. Asi takto:

Jozef
4
Peter
2

program by měl zrealizovat lineární vyhledávání a po zadání jména uživatelem, program vypíše do shellu dané jméno a to číslo. Děkuji za radu.
 

Nahlásit jako SPAM
IP: 87.244.228.–
gna
~ Anonymní uživatel
1891 příspěvků
17. 5. 2019   #2
-
0
-

Já bych řekl, že ses s tím nelámal ani trošku. S čím přesně si nevíš rady?

Nahlásit jako SPAM
IP: 213.211.51.–
Pal_lac
~ Anonymní uživatel
5 příspěvků
18. 5. 2019   #3
-
0
-

Áno to určite, pozerám do toho už týždeň, skúšam to naprogramovať milión päťsto spôsobmi, pozeral som si aj anglické stránky s touto témou a ty mi tu povieš, že som si s tým vôbec nelámal hlavu?
Najskôr by si si mal o ľuďoch niečo zistiť a až potom ich súdiť.

Ale mohol som aspoň napísať, kde je problém:
Ten program som napísal asi takto:

f = open('soubor.txt', 'r')
hledane = input('Zadej hledane jméno:')

def hledej():
    for radek in f:
        for slovo in radek:
            if slovo == hledane:
                return True
            else:
                return False

if hledej():
    print('Našel sem.')
    print('Jméno:', hledane)
else:
    print('Nenašel sem.')


Tenhle program mi zajistí, že do Shellu mi vypíše jen to dáno jméno ale nevím jak k tomu mám přiřadit to konkrétní číslo. Děkuji za radu.
 

Nahlásit jako SPAM
IP: 87.244.228.–
gna
~ Anonymní uživatel
1891 příspěvků
18. 5. 2019   #4
-
0
-

Nerozčiluj se, když někdo napíše jen zadání be zkonkrétního problému, tak to vypadá, že se k problému ani nedostal.

Mohl bys použít nějaké počitadlo pro indikaci, kterou hodnotu čteš, nebo se podívat po jiných způsobech čtení (třeba readline).

Při takové iteraci můžeš použít funkci next pro načtení dalšího řádku. 

with open('soubor.txt', 'r') as f:
    for jmeno in f:
        cislo = next(f)  # muze hodit chybu

        jmeno = jmeno.strip()  # odstranit ukoncovac radku
        cislo = cislo.strip()

        if jmeno == hledane_jmeno:
            print(jmeno)
            print(cislo)
Nahlásit jako SPAM
IP: 213.211.51.–
Pal_lac
~ Anonymní uživatel
5 příspěvků
18. 5. 2019   #5
-
0
-

Ano, děkuji už mi to jde. :) Ještě by mě zajímalo jak si to myslel s tím readline?
A kdybys mi mohl ještě poradit v jedné věci:
pokud by v souboru byly uloženy čísla takto: (mezi nimi je mezera)
Jozef
4 2 1
Peter
1 2 3
a já chci aby mi program vyhledal 4, pokud zadám Josefovo jméno, vypíše mi dané cifry a aby prošel tím číslem a napsal: Nachází se číslo 4.

Nahlásit jako SPAM
IP: 87.244.228.–
gna
~ Anonymní uživatel
1891 příspěvků
18. 5. 2019   #6
-
0
-

S readline jsem to myslel tak, že na načítání řádků můžeš použít metodu readline.

while True:
    jmeno = f.readline()
    cislo = f.readline()
    if not jmeno or not cislo:
        break  # konec souboru
    ...

Operátorem in můžeš testovat přítomnost prvku v kolekci. Pokud jsou to třeba školní známky a víš, že budou jednociferné, tak přímo jako vyhledání znaku v řetězci (což je prakticky kolekce znaků).

if '2' in '1 2 3':
    print('je tam')

Jinak ten řetězec můžeš rozdělit metodou split na list a v něm zase hledat.

if '1' in '1 10 11'.split():  # in ['1', '10', '11']
    print('je tam')
Nahlásit jako SPAM
IP: 213.211.51.–
Pal_lac
~ Anonymní uživatel
5 příspěvků
18. 5. 2019   #7
-
0
-

Ano, děkuji. A ještě jednu drobnost pokud tě už neotravuju. : D Když zadám aby mi program vyhledal jméno, které se v souboru nenachází, tak chci aby mi program vypsal do shellu, že se tam zadané jméno nenachází, jenže když to udělám vypíše mi to 6- krát. Nevíš jak by mi to mohl vypsat jen jednou?

Nahlásit jako SPAM
IP: 87.244.228.–
gna
~ Anonymní uživatel
1891 příspěvků
18. 5. 2019   #8
-
0
-

Můžeš si nastavit nějakou proměnnou, kterou nakonec otestuješ.

nasel = False
for ...:
    if OK:
        nasel = True
if not nasel:
   print('nenasel')

Konkrétně v tomhle případě asi můžeš při nalezení jména ten cyklus přerušit, takže můžeš použít konstrukci for-else. Blok else se provede pokud for nebyl přerušen breakem.

for jmeno in f:
    cislo = next(f)
    ...
    if jmeno == hledane_jmeno:
        ...
        break
else:
    print('nenasel')
Nahlásit jako SPAM
IP: 213.211.51.–
Pal_lac
~ Anonymní uživatel
5 příspěvků
18. 5. 2019   #9
-
0
-

Děkuji, ti opravdu ani si neumíš představit jak jsi mi pomohl. A promiň, že jsem byl na tebe nepříjemný.

Nahlásit jako SPAM
IP: 87.244.228.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 22 hostů

Podobná vlákna

Súbory — založil Samuel Lehotský

Hlavickove subory — založil Tom@sQo

Typove subory — založil lukas

*.dat subory — založil delphak

Subory (vymazanie, edit) — založil jozo0025

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý