Forum » Programiranje » Python
Python
Redorange ::
Pyton 3 za začetnike, Peter Krebelj; je učbenik iz katerega se učim.
Sem prav na začetku.
Spisal sem to:
in mi v konzoli deluje do konca. Izpiše mi povrečno porabo.
V učbeniku mi pa piše da se mi bo javila napaka:
TypeError: unsupported operand type(s) for /: "str" and "str"
Zanima me zakaj se mi napaka ne javi?
Pa še kaj pomeni tisti 2 v 6.vrstici, zakaj je tam čemu služi
Sem prav na začetku.
Spisal sem to:
rezervoar = float(input("Vnesi količino porabljenega goriva: ")) prevozenihKM = float(input("Vnesi prevožene kilometre: ")) povPoraba = (rezervoar / prevozenihKM) * 100 print ("Povprečna poraba našega vozila znaša:", round(povPoraba,2), "litra.")
in mi v konzoli deluje do konca. Izpiše mi povrečno porabo.
V učbeniku mi pa piše da se mi bo javila napaka:
TypeError: unsupported operand type(s) for /: "str" and "str"
Zanima me zakaj se mi napaka ne javi?
Pa še kaj pomeni tisti 2 v 6.vrstici, zakaj je tam čemu služi
- spremenil: bluefish ()
Dzhimen ::
Razen če sem kaj spregledal, mislim da je v učbeniku napaka.
TypeError: unsupported operand type(s) for /: "str" and "str"
To pomeni da sta za operacijo deljenja (/) podana operanda nepodprtega tipa (string).
Ta TypeError napaka naj bi se zgodila v 4. vrstici, ko deliš rezervoar z prevozeniKM in sicer v primeru, če bi bili obe omenjeni spremenljivki tipa string.
Metoda input("Vnesi količino porabljenega goriva: ") sicer vrne string (npr: "42"), a ta string "42" potem metoda float() v isti vrstici pretvori v decimalno število (42.0), ki ga lahko normalno deliš, zato do napake ne pride (ker deliš eno decimalno stevilo (float) z drugim decimalnim številom (float)). Do omenjene napake bi prišlo če bi hotel spremenljivko tipa string deliti z spremenljivko tipa string. Torej če v prvih dveh vrsticah izpustiš metodo float, bi do napake prišlo in to učbenik tudi skuša demonstrirati, a mislim da so pomotoma v kodo dodali funkcijo float(), zaradi katere do napake ne pride.
Naj me kdo popravi če sem kaj spregledal. :)
round(povPoraba,2)
Ta funkcija zaokroži spremenljivko povPoraba na 2 decimalni mesti (npr. 4,345462 --> 4,35). Če bi bila tam 3 namesto 2, bi se spremenljivka povPoraba zaokrožila na 3 decimalna mesta (4,345).
https://docs.python.org/3/library/funct...
TypeError: unsupported operand type(s) for /: "str" and "str"
To pomeni da sta za operacijo deljenja (/) podana operanda nepodprtega tipa (string).
Ta TypeError napaka naj bi se zgodila v 4. vrstici, ko deliš rezervoar z prevozeniKM in sicer v primeru, če bi bili obe omenjeni spremenljivki tipa string.
Metoda input("Vnesi količino porabljenega goriva: ") sicer vrne string (npr: "42"), a ta string "42" potem metoda float() v isti vrstici pretvori v decimalno število (42.0), ki ga lahko normalno deliš, zato do napake ne pride (ker deliš eno decimalno stevilo (float) z drugim decimalnim številom (float)). Do omenjene napake bi prišlo če bi hotel spremenljivko tipa string deliti z spremenljivko tipa string. Torej če v prvih dveh vrsticah izpustiš metodo float, bi do napake prišlo in to učbenik tudi skuša demonstrirati, a mislim da so pomotoma v kodo dodali funkcijo float(), zaradi katere do napake ne pride.
Naj me kdo popravi če sem kaj spregledal. :)
round(povPoraba,2)
Ta funkcija zaokroži spremenljivko povPoraba na 2 decimalni mesti (npr. 4,345462 --> 4,35). Če bi bila tam 3 namesto 2, bi se spremenljivka povPoraba zaokrožila na 3 decimalna mesta (4,345).
https://docs.python.org/3/library/funct...
brodul ::
Pyton 3 za začetnike, Peter Krebelj; je učbenik iz katerega se učim.
Sem prav na začetku.
Spisal sem to:
rezervoar = float(input("Vnesi količino porabljenega goriva: "))
prevozenihKM = float(input("Vnesi prevožene kilometre: "))
povPoraba = (rezervoar / prevozenihKM) * 100
print ("Povprečna poraba našega vozila znaša:", round(povPoraba,2), "litra.")
in mi v konzoli deluje do konca. Izpiše mi povrečno porabo.
V učbeniku mi pa piše da se mi bo javila napaka:
TypeError: unsupported operand type(s) for /: "str" and "str"
Zanima me zakaj se mi napaka ne javi?
Pa še kaj pomeni tisti 2 v 6.vrstici, zakaj je tam čemu služi
Napaka je v knjigi. V prvi in drugi vrstici spremenis tip iz string v float.
Deljenje je podprto za objekte tipa string. Zato vse dela.
Avtor je v knjigi najprej mislil napisati tole:
rezervoar = input("Vnesi količino porabljenega goriva: ") prevozenihKM = input("Vnesi prevožene kilometre: ") povPoraba = (rezervoar / prevozenihKM) * 100 print ("Povprečna poraba našega vozila znaša:", round(povPoraba,2), "litra.")
Kar bi vrnilo zeljeno izjemo/exception.
P.S.
Jezik je python
Pretending to be a mature adult is so exhausting.
oemdzi ::
number = 13195 for x in range (2,9999999): c2 = x%2 c3 = x%3 c5 = x%5 c7 = x%7 if x in (2,3,5,7): if number %x == 0: print (x) elif all((c2,c3,c5,c7)) != 0: if number %x == 0: print (x)
Rezultat = 5, 7, 13, 29, 377
Zakaj je v rezultatu tudi 377(ki niti ni praštevilo), če je namen programa, da najde določenemu številu (number) vsa možna praštevila s katerimi je deljivo?
Ne uspem najti napake, mi ni jasno kako ga sploh spusti skozi, ko ga z ostankom od deljenja preverja ali je praštevilo ali ne.
edit: nvm, nisem najbolje dolocil pogoje za preverjanje prastevila (deljivo z 13):)
*Črna grafična kartica z rumeno lučko in varčnim hladilnikom*
Neslišen intel procesor iz lepe modre škatle* 2 enakomerno ploščata rama*
*overclockan napajalnik in varno ohišje z modro lučko* Hofer gamer copate*
Neslišen intel procesor iz lepe modre škatle* 2 enakomerno ploščata rama*
*overclockan napajalnik in varno ohišje z modro lučko* Hofer gamer copate*
Zgodovina sprememb…
- spremenil: oemdzi ()
oemdzi ::
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
Sem jo sicer že rešil, samo praštevil sem se na začetku lotil narobe.
*Črna grafična kartica z rumeno lučko in varčnim hladilnikom*
Neslišen intel procesor iz lepe modre škatle* 2 enakomerno ploščata rama*
*overclockan napajalnik in varno ohišje z modro lučko* Hofer gamer copate*
Neslišen intel procesor iz lepe modre škatle* 2 enakomerno ploščata rama*
*overclockan napajalnik in varno ohišje z modro lučko* Hofer gamer copate*
oemdzi ::
Še en primer:
Moja koda uspešno najde 2520, ki je najmanjše število, ki je deljivo z vsemi števili od 1 do 10:
Če pa želim to narediti za število, ki je deljivo s števili od 1 do 20, pa ne najde ničesar, oz. sumim, da je težava v range razponu, ki ga ne znam povečati.
Še nedelujoča različica kode, da bo bolj jasno:
2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
Moja koda uspešno najde 2520, ki je najmanjše število, ki je deljivo z vsemi števili od 1 do 10:
seznam = [] for i in xrange(1,99999,1): count = 0 for s in range(1,11,1): if i%s == 0: count += 1 else: pass if count == 10: seznam.append(i) print min(seznam)
Če pa želim to narediti za število, ki je deljivo s števili od 1 do 20, pa ne najde ničesar, oz. sumim, da je težava v range razponu, ki ga ne znam povečati.
Še nedelujoča različica kode, da bo bolj jasno:
seznam = [] for i in xrange(1,99999,1): count = 0 for s in range(1,21,1): if i%s == 0: count += 1 else: pass if count == 20: seznam.append(i) print min(seznam)
*Črna grafična kartica z rumeno lučko in varčnim hladilnikom*
Neslišen intel procesor iz lepe modre škatle* 2 enakomerno ploščata rama*
*overclockan napajalnik in varno ohišje z modro lučko* Hofer gamer copate*
Neslišen intel procesor iz lepe modre škatle* 2 enakomerno ploščata rama*
*overclockan napajalnik in varno ohišje z modro lučko* Hofer gamer copate*
mgermo ::
Število, ki ga iščeš je 232792560. Povečaj x range pa break, ko zadane prvo ustrezno število - naloga ne zahteva seznama.
Redorange ::
Se učim z ene angleške knjige, ki je bila objavljena nekje na tem forumu,
angleščina ni ravno moj prvi ali drugi jezik in tukaj ne razumem kaj hoče povedat.
Zakaj 1, kaj je tisti ena na koncu? Kaj je "remainder" tukaj?
The modulus operator works on integers (and integer expressions) and gives the remainder
when the first number is divided by the second. In Python, the modulus operator is a percent
sign (%). The syntax is the same as for other operators. It has the same precedence as the
multiplication operator.
So 7 divided by 3 is 2 with a remainder of 1.
angleščina ni ravno moj prvi ali drugi jezik in tukaj ne razumem kaj hoče povedat.
Zakaj 1, kaj je tisti ena na koncu? Kaj je "remainder" tukaj?
The modulus operator works on integers (and integer expressions) and gives the remainder
when the first number is divided by the second. In Python, the modulus operator is a percent
sign (%). The syntax is the same as for other operators. It has the same precedence as the
multiplication operator.
>>> q = 7 // 3 # This is integer division operator >>>print(q) 2 >>>r = 7 % 3 >>>print(r) 1
So 7 divided by 3 is 2 with a remainder of 1.
Yacked2 ::
A ne bi bilo bolj učinkovito če bi iskal LCM vseh teh števil ?
lcm(a,b,c) = lcm(lcm(a,b),c)
lcm(a,b,c) = lcm(lcm(a,b),c)
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!
nujno123 ::
Živjo, bi mi lahko kdo pomagal rešiti tole nalogo s pythonu. Prosim :)
# 1. podnaloga
# Rezultate nogometnih tekem, ki jih ekipe igrajo v svoji ligi, beležimo
# na datoteki. Po vsaki odigrani tekmi dodamo datoteki eno vrstico, v katero
# zapišemo imeni obeh ekip in rezultat tekme. Podatke ločimo z dvopičji,
# zaradi preglednosti pa lahko vmes vrinemo še poljubno število presledkov.
# Primer datoteke `nogomet.txt`:
#
# Cicibani : Rdeči vragi : 2 : 2
# Vijolice : Cicibani : 0 : 2
# Rdeči vragi : Pitoni : 0 : 0
# Pitoni : Rdeči vragi : 1 : 1
# Vijolice : FF 2015 : 3 : 1
# Pitoni : Cicibani : 1 : 1
# FF 2015 : Vijolice : 2 : 1
#
# Sestavite funkcijo `seznam_izidov(ime_datoteke)`, ki bo prebrala podatke
# o tekmah iz datoteke z danim imenom in jih vrnila kot seznam štiric.
#
# >>> seznam_izidov('nogomet.txt')
# [('Cicibani', 'Rdeči vragi', 2, 2), ('Vijolice', 'Cicibani', 0, 2),
# ('Rdeči vragi', 'Pitoni', 0, 0), ('Pitoni', 'Rdeči vragi', 1, 1),
# ('Vijolice', 'FF 2015', 3, 1), ('Pitoni', 'Cicibani', 1, 1),
# ('FF 2015', 'Vijolice', 2, 1)]
# 1. podnaloga
# Rezultate nogometnih tekem, ki jih ekipe igrajo v svoji ligi, beležimo
# na datoteki. Po vsaki odigrani tekmi dodamo datoteki eno vrstico, v katero
# zapišemo imeni obeh ekip in rezultat tekme. Podatke ločimo z dvopičji,
# zaradi preglednosti pa lahko vmes vrinemo še poljubno število presledkov.
# Primer datoteke `nogomet.txt`:
#
# Cicibani : Rdeči vragi : 2 : 2
# Vijolice : Cicibani : 0 : 2
# Rdeči vragi : Pitoni : 0 : 0
# Pitoni : Rdeči vragi : 1 : 1
# Vijolice : FF 2015 : 3 : 1
# Pitoni : Cicibani : 1 : 1
# FF 2015 : Vijolice : 2 : 1
#
# Sestavite funkcijo `seznam_izidov(ime_datoteke)`, ki bo prebrala podatke
# o tekmah iz datoteke z danim imenom in jih vrnila kot seznam štiric.
#
# >>> seznam_izidov('nogomet.txt')
# [('Cicibani', 'Rdeči vragi', 2, 2), ('Vijolice', 'Cicibani', 0, 2),
# ('Rdeči vragi', 'Pitoni', 0, 0), ('Pitoni', 'Rdeči vragi', 1, 1),
# ('Vijolice', 'FF 2015', 3, 1), ('Pitoni', 'Cicibani', 1, 1),
# ('FF 2015', 'Vijolice', 2, 1)]
Zgodovina sprememb…
- spremenilo: nujno123 ()
d_DJ ::
Ideja: prebereš vrstico v datoteki, in jo razcepiš glede na " : "
vrstica.split(" : ") : Cicibani : Rdeči vragi : 2 : 2 --> ['Cicibani', 'Rdeči vragi', '2', '2']
Zadnje dva elementa v dobljenem seznamu prevedeš v int (s[2] = int(s[2]))
nato cel seznam prevedeš v nabor tuple (s) in ga vstaviš v končni seznam.
vrstica.split(" : ") : Cicibani : Rdeči vragi : 2 : 2 --> ['Cicibani', 'Rdeči vragi', '2', '2']
Zadnje dva elementa v dobljenem seznamu prevedeš v int (s[2] = int(s[2]))
nato cel seznam prevedeš v nabor tuple (s) in ga vstaviš v končni seznam.
frudi ::
V navodilih eksplicitno piše, da je število presledkov okrog ':' lahko poljubno, zato pazi, po čem cepiš vrstico in kaj nato narediš s temi presledki...
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)
nujno123 ::
Hvala za hitre odgovore.
python mi vrne
['Cicibani Rdeči vragi 2 2\n', 'Vijolice Cicibani 0 2\n', 'Rdeči vragi Pitoni 0 0\n', 'Pitoni Rdeči vragi 1 1\n', 'Vijolice FMF 2015 3 1\n', 'Pitoni Cicibani 1 1\n', 'FMF 2015 Vijolice 2 1\n']
moral pa bi mi :
[('Cicibani', 'Rdeči vragi', 2, 2), ('Vijolice', 'Cicibani', 0, 2), ('Rdeči vragi', 'Pitoni', 0, 0), ('Pitoni', 'Rdeči vragi', 1, 1), ('Vijolice', 'FMF 2015', 3, 1), ('Pitoni', 'Cicibani', 1, 1), ('FMF 2015', 'Vijolice', 2, 1)]
in zdaj nevem kako naj iz tega seznama nizov naredim seznam seznamov, oz. kaj moram zdaj narediti
def seznam_izidov(ime_datoteke):
izidi = []
for vrstica in open(ime_datoteke):
rezultati = vrstica.split(':')
rezultati=''.join(rezultati)
izidi.append(rezultati)
return izidi
python mi vrne
['Cicibani Rdeči vragi 2 2\n', 'Vijolice Cicibani 0 2\n', 'Rdeči vragi Pitoni 0 0\n', 'Pitoni Rdeči vragi 1 1\n', 'Vijolice FMF 2015 3 1\n', 'Pitoni Cicibani 1 1\n', 'FMF 2015 Vijolice 2 1\n']
moral pa bi mi :
[('Cicibani', 'Rdeči vragi', 2, 2), ('Vijolice', 'Cicibani', 0, 2), ('Rdeči vragi', 'Pitoni', 0, 0), ('Pitoni', 'Rdeči vragi', 1, 1), ('Vijolice', 'FMF 2015', 3, 1), ('Pitoni', 'Cicibani', 1, 1), ('FMF 2015', 'Vijolice', 2, 1)]
in zdaj nevem kako naj iz tega seznama nizov naredim seznam seznamov, oz. kaj moram zdaj narediti
def seznam_izidov(ime_datoteke):
izidi = []
for vrstica in open(ime_datoteke):
rezultati = vrstica.split(':')
rezultati=''.join(rezultati)
izidi.append(rezultati)
return izidi
d_DJ ::
najprej na vrstici uporabi strip(), ki ti bo tudi pobrisal presledke in znake za novo vrstico (\n);
pišem iz glave mogče ni vse sintaktično pravilno
rezultat = vrstica.strip().split(':') # dobiš seznam # # koda, ki spremeni zadnje dva elementa v int še sam dopiši # temp = tuple(rezultat) izidi.append(temp)
pišem iz glave mogče ni vse sintaktično pravilno
d_DJ ::
pa verjetno boš moral uporabiti strip() še na vsakem elementu posebaj, da ti bo pobrisal res vse odvečne presledke
Zdaj imaš pa že res skoraj vso kodo napisano.
for i in range(len(rezultat)): rezultat[i] = rezultat[i].strip()
Zdaj imaš pa že res skoraj vso kodo napisano.
Zgodovina sprememb…
- spremenilo: d_DJ ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | python-rabim pomočOddelek: Programiranje | 2763 (993) | rnla1973 |
» | Python - pomoč (strani: 1 2 3 )Oddelek: Programiranje | 17962 (8710) | black ice |
» | Coursera naloga (python)Oddelek: Programiranje | 1942 (1570) | jype |
» | [Python] Tutoriali za začetnika v Notepad++ (strani: 1 2 )Oddelek: Programiranje | 16240 (13334) | black ice |
» | Število decimalk???Oddelek: Programiranje | 1569 (1073) | donkihod |