» »

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:
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

 Slika iz učbenika

Slika iz učbenika

  • 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...

brodul ::

Redorange je izjavil:

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

 Slika iz učbenika

Slika iz učbenika




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.

Redorange ::

Hvala obema za pomoč.

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*

Zgodovina sprememb…

  • spremenil: oemdzi ()

lebdim ::

Napiši navodila naloge ...

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*

oemdzi ::

Še en primer:

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*

Smurf ::

xrange nisi povecal?

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.

>>> 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.

KraitPay ::

sedem deljeno z tri je dve in ostanek ena?

Zgodovina sprememb…

  • spremenil: KraitPay ()

Redorange ::

Ajaaa ostanek;((.
Sem računal na kalkulatorju, pride 2.3333 zato mi ni šlo dol.
Hvala.:)

Yacked2 ::

A ne bi bilo bolj učinkovito če bi iskal LCM vseh teh števil ?
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)]

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.

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 :)

amacar ::

Pa da se znebiš presledkov spredaj/zadaj uporabiš še
.strip


za tem ko si uporabil
.split

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

d_DJ ::

najprej na vrstici uporabi strip(), ki ti bo tudi pobrisal presledke in znake za novo vrstico (\n);

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

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

python-rabim pomoč

Oddelek: Programiranje
162653 (883) rnla1973
»

Python - pomoč (strani: 1 2 3 )

Oddelek: Programiranje
10317140 (7888) black ice
»

Coursera naloga (python)

Oddelek: Programiranje
161791 (1419) jype
»

[Python] Tutoriali za začetnika v Notepad++ (strani: 1 2 )

Oddelek: Programiranje
7915232 (12326) black ice
»

Število decimalk???

Oddelek: Programiranje
71495 (999) donkihod

Več podobnih tem