praegune kellaaeg 19.06.2025 13:31:24
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
AirichsB
HV vaatleja
liitunud: 25.02.2003
|
09.01.2011 20:51:23
lihtne pythoni probleem |
|
|
Üritan google python classi ülesandeid lahendada. Olen vaadanud ka milline on õige lahendus, aga ei saa aru, miks minu oma ei tööta.
Siin vast keegi oskab aidata:
Ülesanne on selline:
# A. match_ends
# Given a list of strings, return the count of the number of
# strings where the string length is 2 or more and the first
# and last chars of the string are the same.
# Note: python does not have a ++ operator, but += works.
def match_ends(words): |
words sisestatakse pärast programmi käigus kontrollimiseks ja need on järgmised:
test(match_ends(['aba', 'xyz', 'aa', 'x', 'bbb']), 3)
test(match_ends(['', 'x', 'xy', 'xyx', 'xx']), 2)
test(match_ends(['aaa', 'be', 'abc', 'hello']), 1) |
Minu lahendus on selline. Hetkel jätsin counti välja, et saada selgust, miks see üldse vale tuleb.
def match_ends(words):
for var in words:
if len(var) < 2 or var[0] != var[-1]:
words.remove(var)
return words |
Ja tulemuseks tuleb
X got: ['aba', 'aa', 'bbb'] expected: 3
X got: ['x', 'xyx', 'xx'] expected: 2
X got: ['aaa', 'abc'] expected: 1 |
Esimene rida töötab ilusti, aga ei saa aru, miks teistes osad asjad eemaldatakse ja osad mitte
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
Timukas0
HV kasutaja

liitunud: 20.03.2007
|
09.01.2011 21:26:05
|
|
|
Põhjus selles, et saad muudad vahepeal seda listi. Võtame näiteks ['', 'x', 'xy', 'xyx', 'xx'].
1. iteratsioon: võetakse 1. element '', mis eemaldatakse, alles jääb ['x', 'xy', 'xyx', 'xx']
2. iteratsioon: võetake 2. element 'xy', mis eemaldatakse, alles jääb ['x', 'xyx', 'xx']
3. iteratsioon: võetakse 3. element 'xx', sobib ja jääb alles
Sellega saab list otsa.
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
nemu
HV vaatleja

liitunud: 22.01.2002
|
09.01.2011 21:40:40
|
|
|
Väike print vahele visata on kindlasti kiirem kui foorumisse postitada
>>> def match_ends(words):
... for var in words:
... print var
... print words
... if len(var) < 2 or var[0] != var[-1]:
... words.remove(var)
... return words
...
>>>
>>> match_ends(['aaa', 'be', 'abc', 'hello'])
aaa
['aaa', 'be', 'abc', 'hello']
be
['aaa', 'be', 'abc', 'hello']
hello
['aaa', 'abc', 'hello']
['aaa', 'abc']
|
>>> words = ['', 'x', 'xy', 'xyx', 'xx']
>>> print filter(lambda x: len(x) > 1 and x[0] == x[-1], words)
['xyx', 'xx']
|
|
|
Kommentaarid: 12 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
11 |
|
tagasi üles |
|
 |
AirichsB
HV vaatleja
liitunud: 25.02.2003
|
09.01.2011 22:04:17
|
|
|
Ei tea, kas sellest prindistki kasu oleks olnud. Kui ikka mõistus ise aru ei saa, et list vahepeal muutub ja see probleeme põhjustab
Tänud abi eest, teinekord lahendan värskema peaga
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|