Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Pythoni ülesanne (lahendatud) 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:  
Psych0
HV veteran
Psych0

liitunud: 21.11.2004



Autoriseeritud ID-kaardiga

sõnum 07.12.2011 11:40:38 Pythoni ülesanne (lahendatud) vasta tsitaadiga

Tere!

Olen veidike hädas järgneva ülesandega:

Defineerige funktsioon sone(a), mis etteantud naturaalarvu a<1000 jaoks tagastab selle sõnalisel kujul esituse sõnena.
Teiste parameetri a väärtuste korral tagastada tühisõne. Näiteks sone(555) väärtus on 'viissada viiskümmend viis'.
Seda funktsiooni kasutades koostage programm, mis kasutaja poolt etteantud naturaalarvu n<1000000 korral väljastab selle sõnalisel kujul eesti keeles.

Valmis olen kirjutanud sellise asja http://pastebin.com/MATk2iLM , kuid see ei väljasta arve sellisel kujul, nagu vaja oleks.
Näide 1 - sõne(999) väljastab:
('üheksasada', 'üheksakümmend', 'üheksa')
Näide 2 - sõne(999999) väljastab:
('üheksasada', 'üheksakümmend', 'üheksa') tuhat ('üheksasada', 'üheksakümmend', 'üheksa')
None

On kellelgi ideid/soovitusi, kuidas mu probleemi lahendada või koodi kergemaks muuta?
Aitäh! icon_smile.gif


viimati muutis Psych0 07.12.2011 19:39:46, muudetud 1 kord
Kommentaarid: 61 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 57
tagasi üles
vaata kasutaja infot saada privaatsõnum
infidel
HV kasutaja
infidel

liitunud: 31.01.2004




sõnum 07.12.2011 13:07:50 vasta tsitaadiga

Vastuse esitamise probleem on selles, et funktsioon tagastab sulle massiivi, mida siis Python kuvab enda parima äranägemise järgi.
Kui ülesandes on ette antud, et tagastada tuleb sõne (maakeeli string), siis tuleb vastav teisendus koodile lisada.

Muide, mina ei kasutaks koodis täpitähti (sõne vs sone). Loetavus küll kannatab, kuid muud probleemid jäävad olemata.

EDIT: Vaatasin nüüd koodi ka. Kui ülesandeks on midagi tagastada, siis tuleb seda ka teha, mitte ekraanile kuvada. Seega asenda "print" kõigil juhul "return"-iga ja lisa vajalikku kohta teisendus stringiks.
Kommentaarid: 36 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 35
tagasi üles
vaata kasutaja infot saada privaatsõnum
kuri orav
HV kasutaja
kuri orav

liitunud: 19.10.2010




sõnum 07.12.2011 15:29:45 vasta tsitaadiga

Funktsioonide nimed võiksid olla eesti või inlgise keeles, mitte keelte ristsugutis. Samuti oleks hea, kui funktsiooni nimi oleks informatiivne, mitte "asjade_check". Sellist koodi on tülikas lugeda.
_________________
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.” -- Terry Pratchett
Kommentaarid: 5 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 5
tagasi üles
vaata kasutaja infot saada privaatsõnum
Psych0
HV veteran
Psych0

liitunud: 21.11.2004



Autoriseeritud ID-kaardiga

sõnum 07.12.2011 15:41:10 vasta tsitaadiga

Selge, teen korda ja annan teada, kui valmis. Aitäh tagasiside eest.
Kommentaarid: 61 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 57
tagasi üles
vaata kasutaja infot saada privaatsõnum
nemu
HV vaatleja
nemu

liitunud: 22.01.2002



Autoriseeritud ID-kaardiga

sõnum 07.12.2011 16:18:44 vasta tsitaadiga

Kahte funktsiooni on ainult vaja:
1: NumberToString(nr)
2: surramurra(nr) - mis teeb (0 < nr <1000) stringiks


def NumberToString(a) :
  if a == 1000000 :
    print("miljon")
  else :
    if a >= 1000 :
      print(surramurra(a/1000)),"tuhat",   
    print(surramurra(a%1000))

Kommentaarid: 12 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 11
tagasi üles
vaata kasutaja infot saada privaatsõnum
Psych0
HV veteran
Psych0

liitunud: 21.11.2004



Autoriseeritud ID-kaardiga

sõnum 07.12.2011 18:01:11 vasta tsitaadiga

nemu kirjutas:
Kahte funktsiooni on ainult vaja:
1: NumberToString(nr)
2: surramurra(nr) - mis teeb (0 < nr <1000) stringiks


def NumberToString(a) :
  if a == 1000000 :
    print("miljon")
  else :
    if a >= 1000 :
      print(surramurra(a/1000)),"tuhat",   
    print(surramurra(a%1000))



Tõesti, see on palju lihtsam ja loogilisem. Ei ole päris programmeerija mõtlemist veel saavutanud. Samuti tegin koodi põhilise osa inglisekeelseks.

E: Kas 'teisendus' peaks siis olema list.append()'ga?
Kommentaarid: 61 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 57
tagasi üles
vaata kasutaja infot saada privaatsõnum
infidel
HV kasutaja
infidel

liitunud: 31.01.2004




sõnum 07.12.2011 19:06:33 vasta tsitaadiga

Funktsioon list.append lisab ju nimekirjale väärtuse otsa. Antud juhul oleks kasutatav näiteks join.
http://docs.python.org/library/stdtypes.html#str.join
Kommentaarid: 36 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 35
tagasi üles
vaata kasutaja infot saada privaatsõnum
Psych0
HV veteran
Psych0

liitunud: 21.11.2004



Autoriseeritud ID-kaardiga

sõnum 07.12.2011 19:33:08 vasta tsitaadiga

infidel kirjutas:
Funktsioon list.append lisab ju nimekirjale väärtuse otsa. Antud juhul oleks kasutatav näiteks join.
http://docs.python.org/library/stdtypes.html#str.join


Aitäh, täpselt seda vaja oligi! icon_smile.gif
E: töötav versioon siis http://pastebin.com/MATk2iLM
Kommentaarid: 61 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 57
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 07.12.2011 20:13:51 vasta tsitaadiga

palju lihtsam ja parem oleks võtta aluseks järgmine dict ja teha üks funktsioon, mis otsib esialgu dictist ja vaste puudumisel
vastavalt arvu vahemikule liidab väljundstringile midagi otsa ja lahutab olemasolevast arvust mingi osa maha

python:
  1.  
  2. numbers = {1:"üks", 2:"kaks", 3:"kolm", 4:"neli", 5:"viis", 6:"kuus", 7:"seitse", 8:"kaheksa", 9:"üheksa", 10:"kümme", 100:"sada", 1000:"tuhat"}
  3.  
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
nemu
HV vaatleja
nemu

liitunud: 22.01.2002



Autoriseeritud ID-kaardiga

sõnum 10.12.2011 00:34:47 vasta tsitaadiga

python:
  1.  
  2. nrs = {1000:' tuhat ',100:'sada ',10:'kümme',9:'üheksa',8:'kaheksa',7:'seitse',6:'kuus',5:'viis',4:'neli',3:'kolm',2:'kaks',1:'üks',0:' '}
  3. def t(n):
  4.   i = filter(lambda x : x <= n, sorted(nrs)).pop()
  5.   return (nrs.get(n) or ((t(n%i)+'teist') if 10<n<20 else (t(n/i)+nrs.get(i)+('nd ' if i == 10 else '')+t(n%i)))).strip()
  6.  


Peaaegu töötab icon_wink.gif
Kommentaarid: 12 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 11
tagasi üles
vaata kasutaja infot saada privaatsõnum
Psych0
HV veteran
Psych0

liitunud: 21.11.2004



Autoriseeritud ID-kaardiga

sõnum 10.12.2011 13:29:55 vasta tsitaadiga

nemu kirjutas:
python:
  1.  
  2. nrs = {1000:' tuhat ',100:'sada ',10:'kümme',9:'üheksa',8:'kaheksa',7:'seitse',6:'kuus',5:'viis',4:'neli',3:'kolm',2:'kaks',1:'üks',0:' '}
  3. def t(n):
  4.   i = filter(lambda x : x <= n, sorted(nrs)).pop()
  5.   return (nrs.get(n) or ((t(n%i)+'teist') if 10<n<20 else (t(n/i)+nrs.get(i)+('nd ' if i == 10 else '')+t(n%i)))).strip()
  6.  


Peaaegu töötab icon_wink.gif

Jah, ise ka avastasin, kuid vähemalt sain punktid kätte! icon_wink.gif
E: Misread, ma räägin enda programmist. icon_biggrin.gif
Kommentaarid: 61 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 57
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Pythoni ülesanne (lahendatud)
[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.