Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
Psych0
HV veteran

liitunud: 21.11.2004
|
07.12.2011 11:40:38
Pythoni ülesanne (lahendatud) |
|
|
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!
viimati muutis Psych0 07.12.2011 19:39:46, muudetud 1 kord |
|
Kommentaarid: 61 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
57 |
|
tagasi üles |
|
 |
infidel
HV kasutaja

liitunud: 31.01.2004
|
07.12.2011 13:07:50
|
|
|
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 |
|
 |
kuri orav
HV kasutaja

liitunud: 19.10.2010
|
07.12.2011 15:29:45
|
|
|
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 |
|
 |
Psych0
HV veteran

liitunud: 21.11.2004
|
07.12.2011 15:41:10
|
|
|
Selge, teen korda ja annan teada, kui valmis. Aitäh tagasiside eest.
|
|
Kommentaarid: 61 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
57 |
|
tagasi üles |
|
 |
nemu
HV vaatleja

liitunud: 22.01.2002
|
07.12.2011 16:18:44
|
|
|
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 |
|
 |
Psych0
HV veteran

liitunud: 21.11.2004
|
07.12.2011 18:01:11
|
|
|
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 |
|
 |
infidel
HV kasutaja

liitunud: 31.01.2004
|
|
Kommentaarid: 36 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
35 |
|
tagasi üles |
|
 |
Psych0
HV veteran

liitunud: 21.11.2004
|
|
Kommentaarid: 61 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
57 |
|
tagasi üles |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
07.12.2011 20:13:51
|
|
|
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:
|
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"}
|
|
|
Kommentaarid: 50 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
47 |
|
tagasi üles |
|
 |
nemu
HV vaatleja

liitunud: 22.01.2002
|
10.12.2011 00:34:47
|
|
|
python:
|
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:' '} def t(n): i = filter(lambda x : x <= n, sorted(nrs)).pop() 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()
|
Peaaegu töötab
|
|
Kommentaarid: 12 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
11 |
|
tagasi üles |
|
 |
Psych0
HV veteran

liitunud: 21.11.2004
|
10.12.2011 13:29:55
|
|
|
nemu kirjutas: |
python:
|
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:' '} def t(n): i = filter(lambda x : x <= n, sorted(nrs)).pop() 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()
|
Peaaegu töötab  |
Jah, ise ka avastasin, kuid vähemalt sain punktid kätte!
E: Misread, ma räägin enda programmist.
|
|
Kommentaarid: 61 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
57 |
|
tagasi üles |
|
 |
|