Python P&O

poruka: 98
|
čitano: 39.725
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
neaktivan
offline
Python P&O

Malo sam ti pretumbal sad kod da bude razumljiviji i ispravio sam ti.

 

print "Odaberi koju funkciju zelis:"
print
print "1.Kalkulator."
print "2.Test"
odabir = input(">")
if odabir == 1:
    print
    print "Odaberi kakav kalkulator zelis:"
    print
    print "1. Kalkulator za racunanje jednostavnih racunskih operacija."
    print "2. Kalkulator za izracun povrsine kvadrata."
    print "3. Kalkulator za izracun povrsine kruga."
    kalk = input(">")
   
    if kalk == 1:
        op = raw_input ("Unesi operaciju (+, -, *, /, pot): ")
        a = input("Unesi prvi broj:")
        b = input ("Unesi drugi broj:")
        if (op == "+"):
            print "Rezultat je:",a + b
        elif(op == "-"):
            print "Rezultat je:",a - b
        elif(op == "*"):
            print "Rezultat je:",a * b
        elif (op == "/"):
            print "Rezultat je:",a / b
        elif (op == "pot"):
            print a ** b
        else:
            print "Unesi pravilnu operaciju!"
          
    elif kalk == 2:
        visina = input("Unesi visinu:")
        sirina = input("Unesi sirinu:")
        povrsina = visina*sirina
        print "Povrsina je", povrsina  
   
    elif kalk == 3:
        polumjer = input("Unesi polumjer:")
        povrsina = 3.14*(polumjer**2)
        print "Povrsina je", povrsina
    else:
        print "Unesi dobar kalkulator!"

if odabir == 2:
    print "Test"

 

Dakle, prvo, dobro nauci indentaciju (uvlacenje). Python blokove koda odvaja s indentacijom, a ne viticastim zagradama {} kao C, C++, Java itd.

 

Drugo, ako imas visestruki izbor, koristi se if-elif-else statement. Zasto? Pogledaj recimo kod svojeg izbora operacija. Kad korisnik izabere jednu operaciju vise nije potrebno provjeravati dalje. Znaci ako korisnik recimo izabere '-', svi dalje elif-i se vise nece provjeravati, jer je elif sa minusom istinit. Znaci ovaj if-elif-else je zapravo jedan blok if statementa. Ti si stavio if-if-if. To bi bila tri bloka. I sad, sto se kod tebe dogadalo? Znaci da je korisnik recimo unio '+', taj if bi bio istinit, ali bi se i svaki sljedeci if provjeravao, a ne bi ih se preskocilo kao u if-elif-else statementu. I onda bi dosao do zadnjeg if-a za potencije, a s njim je uparen else. Korisnik recimo uzme '+', ali se i ovaj za potencije provjerava, a posto je on false, a uparen je s else-om, onda ce se i else izvrsiti i ispisat ce se "Unesi pravilnu operaciju!".

 

E sad, drugo. Ako imas izbor 1 i 2, i kod izbora 1 podizbor, svi podizbori pisu se unutar tog prvog bloka, znaci sve mora biti indentirano pod tim "glavnim" if-om. Pogledaj moj kod kako sam ga uvukao i ispravio, nadam se da ti je jasnije.

If you ever write code that is so complex that needs a comment to explain *what* a statement is doing, you probably need to rewrite your code, not comment it.
Poruka je uređivana zadnji put uto 24.7.2012 20:53 (1domagoj1).
 
3 0 hvala 1
13 godina
offline
Python P&O
Hvala puno. Sad mi je jasnije.
I mislio sam da treba ubaciti elif i else no kad sam par put pokušao, stalno mi je izbacivao nekakav error (valjda nekakva greška u pisanju) i onda sam pokušao sve sa if.
http://www.youtube.com/watch?v=Jl_3Yq36fSg&feature=related
Moj PC  
0 0 hvala 0
13 godina
offline
Python P&O

Moze mi tko pomoc, treba mi kod za racunanje parkinga. Da u onom pozoru unesem vrijeme dolaska i vrijeme odlaska, pa da mi python izracuna automatski cijenu. Neam pojma kako da napisem za sate i minute, kako da definiram minute, s obzirom da idu samo do 59, a sati do 23

Its nice to be important, but its more important to be nice! LoL <3
Moj PC  
0 0 hvala 0
11 godina
neaktivan
offline
Re: Python P&O

Python modulu datetime definira klasu datetime koja može poslužiti kao rješenje:

 

import datetime

poc = '06:55'
zav = '23:30'

poc_time = datetime.datetime.strptime(poc, '%H:%M')
zav_time = datetime.datetime.strptime(zav, '%H:%M')

sati, minute = divmod((zav_time - poc_time).seconds // 60, 60)

print(sati, minute)

13 godina
offline
Python P&O

Moze tko ovo pogledat, ja sam napravio kolko tolko da mi racuna parking, ali mi fali da mi i za zapocetu minutu racuna vec kao puni sat. Za puna 3 sata 45kn, a za 3 sata i 1 minutu da bude kao da su 4 sata, pa tako do daljnjeg...
print "\nUnesite sat dolaska "
s1 = input("Sat dolaska: ")
print "\nUnesite minute dolaska "
m1 = input("Minute dolaska: ")
print "\nUnesite sat odlaska "
s2 = input("Sat odlaska: ")
print "\nUnesite minute odlaska "
m2 = input("Minute odlaska: ")
t1 = s1*3600 + m1*60
t2 = s2*3600 + m2*60
t3 = t2 - t1
t4 = t3/3600
if t4 <= 1.0:
    cijena = (int(t4))*15
elif t4 <= 2.0:
    cijena = (int(t4))*15
elif t4 < 3.0:
    cijena = (int(t4)+1)*15
elif t4 == 3:
    cijena = (int(t4))*15
elif t4 > 3:
    cijena = (int(t4)-3)*3+45

print "Cijena parkinga je: "
print cijena

Its nice to be important, but its more important to be nice! LoL &amp;amp;amp;amp;lt;3
Moj PC  
0 0 hvala 0
11 godina
neaktivan
offline
Re: Python P&O

Ovaj tvoj domaći rad naplaćuje nula kuna ako je trajanje parkinga 59 minuta - je li to namjerno ili si pogriješio?

13 godina
offline
Python P&O

Pogreska je bila naravno... Ali uspio sam skuzit bolji nacin, uz pomoc profesora. Al opet hvala ak je tko pokusao pomoc!

 

Its nice to be important, but its more important to be nice! LoL &amp;amp;amp;amp;lt;3
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
Python P&O

Broj sati koje naplaćuješ možeš dobiti ovako:

sati = minute/60 + (59+minute%60)/60

 

Pethodno oba vremenska odsječka pretvoriš u minute i oduzmeš manji od većeg.

Poruka je uređivana zadnji put uto 20.11.2012 13:11 (Floki).
 
0 0 hvala 0
16 godina
neaktivan
offline
Python P&O

Vidim da ne razumiješ neke stvari. Python računa dijeljenje integera kao cijelobrojno dijeljenje. 1/2 u pythonu nije 0.5 nego 0. Dakle rezultat onog dijeljenja nije float nego integer, a ti ga uspoređuješ s floatom i pretvaraš u integer. Ako imaš broj sekundi, što računaš dobro, broj sati koje treba naplatiti možeš izračunati ovako:

 

brh=brsec/3600+(brsec%3600>0)

 

Tako ako postoji ostatak pri dijeljenju dodat će se kao jedan sat. Drugi problem s kodom gore je prelazak u slijedeći dan. Ako je sat dolaska 23 a odlaska 1, prošla su dva sata, a program će računati -22 i izbaciti negativnu cijenu. To možeš riješiti dodavanjem broja 24 na sat odlaska ako je manji od sata dolaska. To se može napisati pomoću if bloka, ali je jednostavnije kao ono gore.

 

sat_o_za_racunanje=uneseni_sat_odlaska+((uneseni_sat_odlaska < uneseni_sat_dolaska)*24)

 

 

 
0 0 hvala 0
14 godina
online
Re: Python P&O
FranFran kaže...

Python računa dijeljenje integera kao cijelobrojno dijeljenje. 1/2 u pythonu nije 0.5 nego 0. Dakle rezultat onog dijeljenja nije float nego integer, a ti ga uspoređuješ s floatom i pretvaraš u integer.

  To vrijedi samo za python 2 i moze izbjeci castanjem jednog od operanda u float. U pythonu 3, operator / uvijek daje rezultat u floatu. Pa ce 1/2 u pythonu 3 davati 0.5. Za cjelobrojno dijeljenje koristi operator //. Npr. 5//2 = 2, 1//2 = 0 itd.

I would love to change the world, but they won't give me the source code
Poruka je uređivana zadnji put ned 2.12.2012 14:50 (captain_soap_McTawish).
12 godina
neaktivan
offline
Re: Python P&O

Bolje bi bilo da su // stavili za rezultat u realnim brojevima, a / ostavili za cjelobrojno.

Lijepa familija C-like jezika. :D

11 godina
neaktivan
offline
Re: Python P&O

Krivo, logika iz Pythona 3 konzistentna: "/" je uvijek dijeljenje, "//" je uvijek cjelobrojno dijeljenje.

 

Baš to očijukanje s C-ovskim (lošim) standardom je stvaralo probleme koji su riješeni u novoj verziji.

16 godina
neaktivan
offline
Re: Python P&O
Bobobo-bo Bo-bobo kaže...

Krivo, logika iz Pythona 3 konzistentna: "/" je uvijek dijeljenje, "//" je uvijek cjelobrojno dijeljenje.

 

Baš to očijukanje s C-ovskim (lošim) standardom je stvaralo probleme koji su riješeni u novoj verziji.

Ne kužim u čemu je to C-ovska logika koja se bazira na pretvorbi tipova loša. Ako dijeliš decimalni sa cijelim dobiš decimalni - tako kaže matematika, a C-eovska logika se bazira na matematičkoj logici - isti operator, različito djeljenje ako su vrijednosti različitog tipa.

Po meni je konzistentnije slijediti matematičku logiku, nego uvoditi više operatora.

Kojeg matematičkog smisla ima ovo 3,2 // 2,1, po meni nema, dok cjelobrojno dijeljenje cijelih ima matematičke logike.

Poruka je uređivana zadnji put ned 2.12.2012 20:19 (Floki).
13 godina
neaktivan
offline
Python P&O

Jedno pitanje ljudi;

 

3 godine učim programiranje u školi. Do sada smo radili u C++ i sada radimo na C# (windows aplikacije)

 

Mene sada zanima da li vrijedi počet učiti Python ili jednostavno nastaviti raditi dalje u C#?

I'm changing and changing and with more time passing I'll be changing more. I'm not dissapointed anymore, just silent. Not unthinking, but reckless. Not unemotional, but emotional.'
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
Re: Python P&O
Floki kaže...

Ne kužim u čemu je to C-ovska logika koja se bazira na pretvorbi tipova loša. Ako dijeliš decimalni sa cijelim dobiš decimalni - tako kaže matematika, a C-eovska logika se bazira na matematičkoj logici - isti operator, različito djeljenje ako su vrijednosti različitog tipa.

Po meni je konzistentnije slijediti matematičku logiku, nego uvoditi više operatora.

Kojeg matematičkog smisla ima ovo 3,2 // 2,1, po meni nema, dok cjelobrojno dijeljenje cijelih ima matematičke logike.

Hm, ne kuzim sto zelis reci s ovim? Pa 3.2 / 2.1 daje 1.5238095238095237 tj. float, bas kao sto bi dalo i u C/C++-u. Ovo sto si ti napisao bi bilo cjelobrojno dijeljenje dva floata. Istu stvar da napravis u C/C++-u trebas castati te floatove u integere, ovdje samo stavis // bez potrebe za (eksplicitnim) castom.

Aliser kaže...

Jedno pitanje ljudi;

 

3 godine učim programiranje u školi. Do sada smo radili u C++ i sada radimo na C# (windows aplikacije)

 

Mene sada zanima da li vrijedi počet učiti Python ili jednostavno nastaviti raditi dalje u C#?

Ako si dobro savladao logiku, apsolutno ti je svejedno koji jezik ucis, jer ces jednom savladanu logiku moci upotrijebiti u svakom jeziku. Uci ih sto vise, ako se mene pita. Bar one najpopularnije: C/C++, Java, C#, od skriptnih eto, mozes Python, bash...

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
Poruka je uređivana zadnji put pon 3.12.2012 17:18 (1domagoj1).
14 godina
neaktivan
offline
Re: Python P&O
Aliser kaže...
Mene sada zanima da li vrijedi počet učiti Python ili jednostavno nastaviti raditi dalje u C#?

Zapitaj se što očekuješ od Pythona, tj. što misliš dobiti prelaskom na Python?

0xBADC0DE
16 godina
neaktivan
offline
Re: Python P&O
1domagoj1 kaže...
Floki kaže...

Ne kužim u čemu je to C-ovska logika koja se bazira na pretvorbi tipova loša. Ako dijeliš decimalni sa cijelim dobiš decimalni - tako kaže matematika, a C-eovska logika se bazira na matematičkoj logici - isti operator, različito djeljenje ako su vrijednosti različitog tipa.

Po meni je konzistentnije slijediti matematičku logiku, nego uvoditi više operatora.

Kojeg matematičkog smisla ima ovo 3,2 // 2,1, po meni nema, dok cjelobrojno dijeljenje cijelih ima matematičke logike.

Hm, ne kuzim sto zelis reci s ovim? Pa 3.2 / 2.1 daje 1.5238095238095237 tj. float, bas kao sto bi dalo i u C/C++-u. Ovo sto si ti napisao bi bilo cjelobrojno dijeljenje dva floata. Istu stvar da napravis u C/C++-u trebas castati te floatove u integere, ovdje samo stavis // bez potrebe za (eksplicitnim) castom.

Pitanje, da li ovo dijeljenje 3.2 // 2.1 upotrebom tog operatora za cjelobrojno dijeljenje daje 1, ako daje, taj operator je u sukobu sa matematičkom logikom, po meni nepotreban, nikad to ni neću castati u int, cjelobrojno dijeljenje ima smisla jedino kod cijelih brojeva.

Poruka je uređivana zadnji put pon 3.12.2012 17:42 (Floki).
14 godina
online
Re: Python P&O
Floki kaže...
1domagoj1 kaže...

Hm, ne kuzim sto zelis reci s ovim? Pa 3.2 / 2.1 daje 1.5238095238095237 tj. float, bas kao sto bi dalo i u C/C++-u. Ovo sto si ti napisao bi bilo cjelobrojno dijeljenje dva floata. Istu stvar da napravis u C/C++-u trebas castati te floatove u integere, ovdje samo stavis // bez potrebe za (eksplicitnim) castom.

Pitanje, da li ovo dijeljenje 3.2 // 2.1 upotrebom tog operatora za cjelobrojno dijeljenje daje 1, ako daje, taj operator je u sukobu sa matematičkom logikom, po meni nepotreban.

  Zapravo daje 1.0. Meni je osobno ovo sa ovakvim operatorima dosljednije.

I would love to change the world, but they won't give me the source code
16 godina
neaktivan
offline
Re: Python P&O
captain_soap_McTawish kaže...
Floki kaže...
1domagoj1 kaže...

Hm, ne kuzim sto zelis reci s ovim? Pa 3.2 / 2.1 daje 1.5238095238095237 tj. float, bas kao sto bi dalo i u C/C++-u. Ovo sto si ti napisao bi bilo cjelobrojno dijeljenje dva floata. Istu stvar da napravis u C/C++-u trebas castati te floatove u integere, ovdje samo stavis // bez potrebe za (eksplicitnim) castom.

Pitanje, da li ovo dijeljenje 3.2 // 2.1 upotrebom tog operatora za cjelobrojno dijeljenje daje 1, ako daje, taj operator je u sukobu sa matematičkom logikom, po meni nepotreban.

  Zapravo daje 1.0. Meni je osobno ovo sa ovakvim operatorima dosljednije.

Meni nije, cjelobrojno dijeljenje ima smisla samo za cijele, logika pretvorbe tipova mi je prihvatljivija, bliža matematici. Pogotovo ovo što daje 1.0, kao da je dao decimalni broj, a nije. Ali neću pokretati "vjerski rat", tko voli, na volju mu.

Poruka je uređivana zadnji put pon 3.12.2012 17:57 (Floki).
16 godina
neaktivan
offline
Re: Python P&O
Floki kaže...

Pitanje, da li ovo dijeljenje 3.2 // 2.1 upotrebom tog operatora za cjelobrojno dijeljenje daje 1, ako daje, taj operator je u sukobu sa matematičkom logikom, po meni nepotreban, nikad to ni neću castati u int, cjelobrojno dijeljenje ima smisla jedino kod cijelih brojeva.

Pa upravo to, ima smisla jedino kod cijelih brojeva, 3 // 2 ce dati 1. Isto kao i kod C/C++-a 3 / 2. Isto kao sto kod C/C++-a 3.2 / 2.1 mozes castati u int, ali neces naravno jer nema previse smisla, tako i ovdje ta dva broja mozes dijeliti operatorom //, ali neces jer nema smisla. U principu operator / samo mice potrebu za eksplicitnim castom.

 

Primjer, kao rezultat zelimo dobiti float.

 

C++

int a = 3;
int b = 2;

cout << (float)a / b << '\n';

// ispis: 1.5


Python 3

a = 3
b = 2

print (a / b)

# ispis: 1.5

 

Mozda postoje i neki by design mehanizmi koji mi trenutno nisu ociti, ali kako mi se cini jedino se mice potreba za eksplicitnim castanjem.

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
Poruka je uređivana zadnji put pon 3.12.2012 18:18 (1domagoj1).
14 godina
online
Re: Python P&O
1domagoj1 kaže...

        Python 3

a = 3
b = 2

print (a // b)
# ispis: 1.5

  Ispis nije 1.5 vec 1. Pomijesao si / i //. / mice potrebu za eksplicitnim castanjem, pa 3/2=1.5, a // je cjelobrojno dijeljenje 3//2=1.

I would love to change the world, but they won't give me the source code
16 godina
neaktivan
offline
Python P&O

Meni je bliža logika castanja od dva operatora, samo to želim reći, matematički je dijeljenje uvijek dijeljenje, samo je pitanje koji tip dijelimo sa kojim.

Poruka je uređivana zadnji put pon 3.12.2012 18:18 (Floki).
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Python P&O
captain_soap_McTawish kaže...

Ispis nije 1.5 vec 1. Pomijesao si / i //. / mice potrebu za eksplicitnim castanjem, pa 3/2=1.5, a // je cjelobrojno dijeljenje 3//2=1.

Joj sry, kad radim dvije stvari odjednom, evo ispravio sam.

Floki kaže...

Meni je bliža logika castanja od dva operatora, samo to želim reći.

Naravno, sve redu. :D

Meni je osobno svejedno, navikao sam i na Python i njegove musice, kao i na C/C++ i njegove musice.

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
16 godina
neaktivan
offline
Re: Python P&O
1domagoj1 kaže...
captain_soap_McTawish kaže...

Ispis nije 1.5 vec 1. Pomijesao si / i //. / mice potrebu za eksplicitnim castanjem, pa 3/2=1.5, a // je cjelobrojno dijeljenje 3//2=1.

Joj sry, kad radim dvije stvari odjednom, evo ispravio sam.

Floki kaže...

Meni je bliža logika castanja od dva operatora, samo to želim reći.

Naravno, sve redu. :D

Meni je osobno svejedno, navikao sam i na Python i njegove musice, kao i na C/C++ i njegove musice.

Da, više mu liči na "vjerski rat", ja prvi put čuo za ovo, iskreno.

11 godina
neaktivan
offline
Re: Python P&O
Floki kaže...
Bobobo-bo Bo-bobo kaže...

Krivo, logika iz Pythona 3 konzistentna: "/" je uvijek dijeljenje, "//" je uvijek cjelobrojno dijeljenje.

 

Baš to očijukanje s C-ovskim (lošim) standardom je stvaralo probleme koji su riješeni u novoj verziji.

Ne kužim u čemu je to C-ovska logika koja se bazira na pretvorbi tipova loša. Ako dijeliš decimalni sa cijelim dobiš decimalni - tako kaže matematika, a C-eovska logika se bazira na matematičkoj logici - isti operator, različito djeljenje ako su vrijednosti različitog tipa.

Po meni je konzistentnije slijediti matematičku logiku, nego uvoditi više operatora.

 

Kojeg matematičkog smisla ima ovo 3,2 // 2,1, po meni nema, dok cjelobrojno dijeljenje cijelih ima matematičke logike.

Ukratko: C-ovska logika je loša jer je izvor bugova.

Dijeljenje je inverzna operacija množenju: ako je a = b x c tada je c = a / b. Na primjer: 15 / 2 = 7,5 jer je 15 = 2 x 7,5

Matematička operacija "dijeljenje" nije zatvorena nad cijelim brojevima (kao npr. zbrajanje i množenje) - nekad rezultat dijeljenja cijelih brojeva nije cijeli broj. To znači da je na skupu cijelih brojeva "15 dijeljeno 2" ili 7,5 (ako rezultat ne mora biti cijeli broj) ili greška (ako rezultat mora biti cijeli broj). Rezultat sigurno nije 7 kao što nije 8 niti 9 niti -15.

Python 3 doslovno slijedi matematičku definiciju ("true division"): 15 / 2 je uvijek 7,5. Operator "/" nije izvor bugova jer ako netko umjesto dijeljenja želi nešto drugo koristi drugi operator. C je ovom problemu prišao s druge (loše) strane: tipovi operanada su unaprijed poznati pa ćemo nekad raditi pravo dijeljenje a nekad ćemo raditi nešto drugo. Ovo rješenje "štedi operatore", ali generira bugove jer nije očito što se želi postići:


int x, y;
double d, f;
...
d = x / y   // da li je ovo bug, ili ne?
f = x / 2   // isto pitanje

Kojeg matematičkog smisla ima ovo 3,2 // 2,1, po meni nema, dok cjelobrojno dijeljenje cijelih ima matematičke logike.

 

Hehe, pazi ovo:

3.2 // 2.1 = 1.0
33.2 // 2.1 = 15.0

Operator "// u Pythonu 3 je tzv. "floor division", uvijek daje broj bez decimala i ide u paru s "%" (modulo) operacijom, koja isto nije ograničena na cjelobrojne operande.

3.2 // 2.1 = 1.0
3.2  % 2.1 = 1.1
----------------
2.1 * 1.0 + 1.1 = 3.1

33.2 // 2.1 = 15.0
33.2  % 2.1 =  1.7
------------------
2.1 * 15.0 + 1.7 = 33.2

14 godina
neaktivan
offline
Re: Python P&O
Bobobo-bo Bo-bobo kaže...
C je ovom problemu prišao s druge (loše) strane: tipovi operanada su unaprijed poznati pa ćemo nekad raditi pravo dijeljenje a nekad ćemo raditi nešto drugo. Ovo rješenje "štedi operatore", ali generira bugove jer nije očito što se želi postići:


int x, y;
double d, f;
...
d = x / y   // da li je ovo bug, ili ne?
f = x / 2   // isto pitanje

Niti jedno od to dvoje nije bug.

 

U oba slučaja prvo se vrši cjelobrojno dijeljenje (dijeljenje je ovdje operacija višeg prioriteta) jer su oba operanda cijeli brojevi, i kao rezultat tog dijeljenja nastaje cijeli broj.

Nakon toga dolazi operacija pridruživanja vrijednosti i budući da je lijevi operand te operacije double tipa, vrši se konverzija već izračunatog rezultata s desne strane u double.

 

http://msdn.microsoft.com/en-us/library/3t4w2bkb%28v=vs.80%29.aspx

http://msdn.microsoft.com/en-US/library/474dd6e2%28v=vs.80%29.aspx

 

Možeš pronaći i u Standardu: §6.3.1.8

 

C možda djeluje nelogično, ali prati ponašanje procesora pri računanju. Naime, procesori koriste zasebne opcodove i registre za floating point i integer operacije. Ne bi trebalo predstavljati nikakav problem nekome tko je upućen u problematiku.

0xBADC0DE
14 godina
offline
Python P&O

korisnik unosi prirodan broj n nakon cega unosi niz od 10 razlicitih prirodnih brojeva (provjera unosa). ispisati broj koji nastaje spajanjem znamenke koja se pojavljuje najvise puta i znamenke koja se pojavljuje najmanje puta.

 

Ovako glasi zadatak, rjesio sam provjeru, a brojanje ovih ponavljaca izgubim se i nemam neku ideju koja funkcionira. help?

 

n=0
while n<=0:
    n=int(input("Unesite prirodan broj n:"))
a=[0]*n


for i in range (n):
    b=0
    while b<10:
        print(i,"član")
        a[i]=int(input("Unesite 10 prirodnih brojeva za:"))
        b=len(str(a[i]))

“The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge.” – Stephen Hawking
 
0 0 hvala 0
11 godina
neaktivan
offline
Re: Python P&O

Za brojanje možeš koristiti Counter klasu iz modula collections:

 

import collections

... # napuni listu a s 10 različitih prirodnih brojeva

distribucija = collections.Counter(''.join(str(broj) for broj in a))
poredak = distribucija.most_common()
print(poredak[0][0] + poredak[-1][0])

14 godina
offline
Re: Python P&O

Naučio sam još jednu klasu i modul, ali iz moje sintakse gore vidljivo je da se ovo mora obavit na mukotrpniji i bolniji način. {#} Tu klasu i modul ni ne smijem upotrijebiti.

“The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge.” – Stephen Hawking
11 godina
neaktivan
offline
Re: Python P&O

Evo rješenja bez korištenja import naredbe:

 

# ... napuni listu a s 10 različitih prirodnih brojeva

distribucija = {z: 0 for z in '0123456789'}
for znamenka in (''.join(str(broj) for broj in a)):
    distribucija[znamenka] += 1
       
poredak = [key for key in sorted(distribucija, key=lambda k: distribucija[k]) if distribucija[key] > 0]
print(poredak[-1] + poredak[0])

Nova poruka
E-mail:
Lozinka:
 
vrh stranice