Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  lihtne pythoni probleem märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
AirichsB
HV vaatleja

liitunud: 25.02.2003




sõnum 09.01.2011 20:51:23 lihtne pythoni probleem vasta tsitaadiga

Ü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 icon_confused.gif
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
Timukas0
HV kasutaja
Timukas0

liitunud: 20.03.2007




sõnum 09.01.2011 21:26:05 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
nemu
HV vaatleja
nemu

liitunud: 22.01.2002



Autoriseeritud ID-kaardiga

sõnum 09.01.2011 21:40:40 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
AirichsB
HV vaatleja

liitunud: 25.02.2003




sõnum 09.01.2011 22:04:17 vasta tsitaadiga

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 icon_smile.gif
Tänud abi eest, teinekord lahendan värskema peaga icon_razz.gif
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  lihtne pythoni probleem
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
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.