Ako prehľiadať zoznam pomocou for alebo while – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ako prehľiadať zoznam pomocou for alebo while – Python – Fórum – Programujte.comAko prehľiadať zoznam pomocou for alebo while – Python – Fórum – Programujte.com

 

Patrik
~ Anonymní uživatel
133 příspěvků
26. 2. 2019   #1
-
0
-

   

subor = open('textfile.txt', 'r') #otvorenie suboru
retazec = subor.read() #nacitanie obsahu do retazca
subor.close()
retazec_char = list(retazec)
i=0
velkost = len(retazec_char)
while i < velkost:
print(retazec_char[i])
i += 1

Niečo zjavne robim zle ale prisahal by som že idem podla kodov, ktore som našiel na nete pomocou for tiež mi to nejde.

Cela pointa zadania čo si riešim je, že mam v subore textfile.txt obyčajny text kde su jednotlive vety otagovane. Napr. #1Prva veta. Dalšia pričom plati predošli tag. $2Tretia Veta . Štvrta znova plati predošli tag k 3 vete. #1Piata veta.

A teraz potrebujem vytvoriť dalšie 2 subory do prveho dam všetko za #1 a do druheho všetko za $2 priččom ako vidno v ukažke tagy #1 a $2 sa lubovolne vo vetach striedaju alebo plati jeden tag aj pre viac viet.

Ten kod je len pokusom ako na to isť ani neviem či dobre to robim, ale ako som povedal ani obyčajny cyklus mi tu nejde.

Nahlásit jako SPAM
IP: 213.81.199.–
gna
~ Anonymní uživatel
1884 příspěvků
26. 2. 2019   #2
-
0
-

Jestli to máš přesně takhle, tka je problém v odsazení.

retazec = 'abc'
retazec_char = list(retazec)
i=0
velkost = len(retazec_char)
while i < velkost:
    print(retazec_char[i])
    i += 1
a
b
c
Nahlásit jako SPAM
IP: 213.211.51.–
Patrik
~ Anonymní uživatel
133 příspěvků
26. 2. 2019   #3
-
0
-

Super už mi to ide nejako som to aj sám rozchodil. Aktuálny kód je 

subor = open('textfile.txt', 'r') #otvorenie suboru
retazec = subor.read() #nacitanie obsahu do retazca
length = len(retazec)
i = 0
while i < length:
    #if retazec[i] == "#1" 
    

    print(retazec[i])
    i += 1

Teda kod mam takto a vysledok je zatial vypis vratane medzier. Podmienka je zakomentovana lebo nefunguje.

Mam s tym problemi teoreticky viem čo chcem spraviť, ale nechapem ako mam tie kroky premenit na kod.

1. Potrebujem povedať že ak pri prehľadani retazec[i] bude prvy znak # a dalši v poradi 1 začni všetky ostatne znaky za tymto ukladat do suboru nazvime ho suborX. Ak naraziš na znak $ a daľší znak v poradi bude 2 skonči ukladanie znakov do suborx a znaky po tomto ukladaj do: suborY Tieto 2 pravidla uplatnj pri prechadzani načitaneho suboru resp. stringu. Vôbec nechapem ako to mam premenit na kod kedže nič take neexistuje. Ako mam vyjadriť v kode znak # a dalši za nim taky znak, že daľšie v poradi v programovani neexistuje.

Nahlásit jako SPAM
IP: 213.81.199.–
Patrik
~ Anonymní uživatel
133 příspěvků
26. 2. 2019   #4
-
0
-

#3 Patrik
Uprsnim to ako mam vyjadriť:

1. ak [retazec[i] == "#" a dalši  znak v  retazec[i] == "1"] potom ukladaj ostatne znaky do: suborX 

2. ak [retazec[i] == "$" a dalši  znak v  retazec[i] == "2"] potom skonči ukladať do suborX a ďaľšie znaky ukladaj do suborY

Vôbec nechapem ake prikazy mam použiť aby som toto naprogramoval a nič ma ani nenapada.

Nahlásit jako SPAM
IP: 213.81.199.–
Patrik
~ Anonymní uživatel
133 příspěvků
26. 2. 2019   #5
-
0
-

#4 Patrik
Prave som zistil, že v pythone zaleži na odsadeni textu omg preto mi nešli podmienky.

Nahlásit jako SPAM
IP: 213.81.199.–
gna
~ Anonymní uživatel
1884 příspěvků
26. 2. 2019   #6
-
0
-

Ako mam vyjadriť v kode znak # a dalši za nim taky znak, že daľšie v poradi v programovani neexistuje.

if x[i] == 'y' and x[i + 1] == 'z':
if x[i:i + 2] == 'yz':
Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1884 příspěvků
26. 2. 2019   #7
-
+1
-
Zajímavé
Kit +

   

with open('textfile.txt', 'r') as f:
    data = f.read()
data = re.findall(r'[#$][^#$]*', data)

select = [d[2:].strip() for d in data if d.startswith('#1')]
with open('aa.txt', 'w') as f:
    f.write('\n'.join(select))

select = [d[2:].strip() for d in data if d.startswith('$2')]
with open('bb.txt', 'w') as f:
    f.write('\n'.join(select))
Nahlásit jako SPAM
IP: 213.211.51.–
Patrik
~ Anonymní uživatel
133 příspěvků
26. 2. 2019   #8
-
0
-

#7 gna
wau ako si to vedel ja to robim nepretržite už asi 12 hodin včera 8h a dnes 4 a ty si len tak vypľľuješ kod omg :D Ja som to chcel robiť spôsobom prejdenia retazca po znakoch a podla nejakych if-ov triediť.

Tvoje riešenie mi funguje čo si to vlastne až kód použila ako si vedel, že práve o pôjde?. 

Ešte mi vyhodilo chybu ale to som si vygooglil sačilo dať: import re

Nahlásit jako SPAM
IP: 213.81.199.–
MilanL+1
Grafoman
27. 2. 2019   #9
-
0
-

#8 Patrik
Používá řetězcovou funkci findall a takzvanými regulárními výrazy.

Jinak téměř stejný dotaz tu byl řešen minulý týden.

Samozřejmě řešení pomocí cyklu a podmínek lze též použít.

Pokud je to úkol záleží co jste se již učili a co z daného jazyka můžete používat, pokud je tam i samostudium, můžeš říct že sis to našel na netu, ale pak tě učitel může vyzkoušet obměnou zadání, tak bys měl něco vědět o tom co použiješ, abys to mohl aplikovat na to nové zadání.

Nahlásit jako SPAM
IP: 91.139.9.–
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, 2 hosté

 

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