Smii Ierakstīts Marts 19, 2015 Share Ierakstīts Marts 19, 2015 Pildu uzdevumus pitona apmācības kursā un vienā uzdevumā ir kreņķis: # programmai jaizvac patskani no stringa text = "Hey look Words!" # strings vovels = "aeuio" # patskani text = list(text) print text for a in text: for b in vovels: if a == b: del(text[text.index(b)]) # nodzes liste attiecigo patskani print "dzesam jo %s sakrit ar %s" % (a, b) # tas debugam else: print "nedzesam jo %s nesakrit ar %s" % (a, b) print "".join(text) # teksta pedejais o netiek nodzests. Kadel? Rezultāts dod Hy lk Words! lai gan vajadzētu būt aizvāktam arī burtam o no vārda Words bet jamais nedodās rokās un es nesaprotu, kādēļ... Tie visi daudzie print ir debugam un tajos parāda, ka nosacījumi izpildās. Problēma ir kaut kur iekš funkcijas del, lai gan visam jābūt smuki. Varbūt kaut kur nobrūk indekss? Bet tad viņš bļautu, ka out of range... Link to comment Share on other sites More sharing options...
wxy Marts 19, 2015 Share Marts 19, 2015 (labots) Nedzēs ārā no tā paša elementa, kuram tu ej cauri ciklā. Labots Marts 19, 2015 - wxy 1 Link to comment Share on other sites More sharing options...
androidss Marts 19, 2015 Share Marts 19, 2015 (labots) text = 'Hello look Words!' vovels = 'aeuio' text = [letter for letter in text if letter not in vovels] text = ''.join(text) Labots Marts 19, 2015 - androidss 1 Link to comment Share on other sites More sharing options...
MarisO Marts 19, 2015 Share Marts 19, 2015 text = 'Hello look Words!' vovels = 'aeuio' ''.join(filter(lambda x: x not in vovels,list(text))) Link to comment Share on other sites More sharing options...
marrtins Marts 19, 2015 Share Marts 19, 2015 Pitonu dzēšana šodien ir ļoti aktuāla 1 Link to comment Share on other sites More sharing options...
MarisO Marts 19, 2015 Share Marts 19, 2015 vai ta pitonā datu struktūra nav izmantojama kā f-ja ? kā iekš clojure ? (apply str (remove (set "aeuio") "Hello look Words!")) Link to comment Share on other sites More sharing options...
binary Marts 19, 2015 Share Marts 19, 2015 Izskatās, ka @@wxy *vienīgais* atbildēja uz autora jautājumu (jebšu deva korektu hintu). Autoram - pamēģini tos printus aizvākt un viņu vietā pielikt "print a" uzreiz zem pirmā "for" - redzēsi, ka "a" nav gluži tas, ko tu domā. Lai izlabotu konkrēto kodu, "for a in text:" būtu jānomaina uz "for a in text[:]:", citiem vārdiem - jāiterē cauri kopijai no "text". Tad kods strādās tā, kā vēlies. Viss pārējais jau ir optimizācijas un valodas iespēju apgūšana un izmantošana - sākot ar "if a in vovels", turpinot ar list comprehensioniem un beidzot ar filter() un lambdām. Link to comment Share on other sites More sharing options...
nevertell Marts 19, 2015 Share Marts 19, 2015 Filter jau nu ir rudimentāla funkcija, kuru aizvieto list comprehensions. Hardkōr pitonisti arī lambdas īsti negrib vairs atbalstīt, jo tās tāpat regulāri tika pielietotas priekš filter() un tāda tipa funkcijām. Link to comment Share on other sites More sharing options...
MarisO Marts 19, 2015 Share Marts 19, 2015 (labots) Filter jau nu ir rudimentāla funkcija, kuru aizvieto list comprehensions. Idiomatic clojure kods būtu ar filter/remove. Lasāmāks par list comprehension. Nezinu kā pareizāk pitonā, bet tas ir savādi, ja viņiem nepatīk lambdas un/vai map/filter/reduce f-jas. PS List comprehension ir syntactic sugar, kuru parasti aizstāj ar filter / map funkcijām. Scala kompilators tā dara. Labots Marts 20, 2015 - MarisO Link to comment Share on other sites More sharing options...
Smii Marts 22, 2015 Author Share Marts 22, 2015 Man jau šai brīdī būtiski ir atrisināt uzdevumu ar kursā apgūtajiem līdzekļiem Bet enīvei paldies par ieteikumiem, tie lieliski noderēs kā reference tālāk. Pats to uzrakstīju šādi # programmai jaizvac patskani no stringa text = "Hey look Words!" # strings vovels = "aeuio" # patskani text = list(text) dellist = [] s = 0 print text for a in text: for b in vovels: if a == b: dellist.append(s) s += 1 for s1 in dellist: text[s1] = "" print "".join(text) To print text var vākt ārā, piemirsās nodzēst. def anti_vowel(text): for char in text: if char in 'AEIOUaeiou': text = text.replace(char,'') return text Un te arī atradu īsāku variantu. Link to comment Share on other sites More sharing options...
binary Marts 22, 2015 Share Marts 22, 2015 Smii, vēl variants - iet cauri tam masīvam nevis ar "for a in text", bet "while i < len(text)". Ciklā ja i-tais elements ir dzēšams, tad dzēšam, ja ne, tad palielinam i. Tad nevajadzējs ne dellist, ne tukšus stringus. Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!