» »

Coursera naloga (python)

Coursera naloga (python)

levaky ::

Pozdravljeni!

Na Courseri delam tečaj Pythona in me ena naloga z zankami heca. Zdi se mi, da bi morala stvar normalno delovati, a se rezultati ne skladajo z pričakovanju:)

Koda:
largest = None
smallest = None
while True:
    num = raw_input("Enter a number: ")

    # if user enters done, exit loop
    if num == "done" : break

    # check if input is a number
    try:
        float(num)
    except:
        print "Invalid input"
        continue

    # set 1st entered value as largest and smallest
    if largest is None:
        largest=num
    if smallest is None:
        smallest=num
        
    # check if entered number is the smallest or largest
    if num > largest:
        largest = num
    elif num < smallest:
        smallest = num
    else:
        print "Ni ne eno, ne drugo"
    print "Largest: ", largest, "| Smallest: ", smallest, "| Num: ", num 

print "Maximum", largest
print "Minimum", smallest


Ko vpišem vrednosti 1,2,3,4,5,6,7 po vrsti, zadeva špila.
Če vpišem 1,50,500,55, mi do 500 lepo sledi, z vpisom 55 mi pa le-to določi kot largest.
Če vpišem 1,5,9,10,50, se mi largest ustavi pri 9. Za vrednosti 10 in 50 pa mi skoči v 'else' pogoj...

Česa ne vidim?
Mogoče samo usmeritev v pravo smer, da vem kje ga pečem:)

Matej

AndrejO ::

Dobrodošel v čudoviti svet jezikov, ki ne poznajo tipov.

V nogo si se ustrelil, ker si primerjal niz "55" z nizom "500" in ne številko 55 s številko 500.

levaky ::

Ok, rešil nalogo. Hvala za idejo. Nisem vedel, da avtomatsko zadevo vzame kot string.

    
# check if input is a number
    try:
        float(num)
    except:
        print "Invalid input"
        continue


popravil na
    # check if input is a number
    try:
        num=int(num)
    except:
        print "Invalid input"
        continue


Zaenkrat deluje:)

Matej

levaky ::

Še tole:

    if largest and smallest is None:
        largest = num
        smallest = num
    elif num > largest:
        largest = num
    elif num < smallest:
        smallest = num


Zakaj tukaj zadeva v prvem koraku noče skočiti v prvo zanko?
Glede na to, da na začetku programa definiram vrednosti za largest in smallest kot None, sta v prvem koraku brez vrednosti oz "None" in je pogoj izpolnjen...

Matej

Randomness ::

Pogoj imaš čudno napisan. Verjetno si mislil nekaj takega:
if largest is None and smallest is None

levaky ::

Randomness je izjavil:

Pogoj imaš čudno napisan. Verjetno si mislil nekaj takega:
if largest is None and smallest is None


To bo to:)
Vsak dan se kaj novega naučim:)

Prosim, ne se kregat:P

Matej

ragezor ::

rece se da je dinamicno tipiziran

Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> type(1)
<type 'int'>
>>> type("hello")
<type 'str'>
>>>


drugace ko mas ti input program ne ve ali ti namenis vnesti not stevilke ali besede ali karkoli pac in zato moras sam poskrbeti, da se ti stringi pretvorijo v integerje.

levaky ::

Še ena težavica.

matrix = [[1,2,3,4],
         [2,3,1,4],
         [4,1,2,3],
         [3,4,1,2]]

matrix_size = len(matrix)-1
test_array = ['']
for g in xrange(0, matrix_size):
    for h in xrange(0, matrix_size):
        test_array[h] = matrix[h][g]
    print test_array


Imam seznam v seznamu imenovan 'matrix'. V test_array bi rad spravil posamezne stolpce in jih potem posredoval naprej funkciji.

Zgornji primer ne deluje, saj mi napako:
IndexError: list assignment index out of range


Zakaj je index out of range? To javi v drugem koraku, ko bi index moral biti 1.
Ali definicija 'test_array = ['']' pomeni, da bo seznam držal samo eno vrednost?
Kako lahko definiram seznam, ampak ne določim velikosti?
Sem probal pognati tudi zadevo brez definicije test_array, ampak potem pa pravi:
NameError: name 'test_array' is not defined 


Matej

Gandalfar ::

Gandalfar je premaknil sporočila v Tipi v programskih jezikih.

levaky ::

Ali bi moral zadevo rešiti z .append()?

Isotropic ::

mislim, da bi moral dati test_array na iste dimenzije kot matrix.

Gandalfar ::

Ja, arrayu appendas, ker ti hoces v prazen array na n-ti element napisat nekaj kar pythonu ni najbolj vsec.

levaky ::

Gandalfar: ja, sem potem dojel... .append() ali .extend(), odvisno od tega, kaj hočem doseči.

Verjetno bi se pa dalo tudi definirati array kot test_array[4] = [] in potem vstavljati na željena mesta kot test_array[2] = '2'?

Matej

Isotropic ::

mislim, da se ga ne da definirati na tak nacin, bos moral narediti:
test_array = [i for i in xrange(4)]

AndrejO ::

Imaš tudi alternativen način:

4 * [None] ti da [None, None, None, None]

Isotropic ::

ja
sam tam bi pravzaprav rabil imeti 4x4 matrix, kako se pa to naredi v list comprehension, sem pa ze pozabil malo.
mogoce l = [4*[None] for i in xrange(4)]
nisem pa zih

jype ::

Isotropic> test_array = [i for i in xrange(4)]

Tole se veliko lepše zapiše kot

test_array = range(4)

Isotropic> sam tam bi pravzaprav rabil imeti 4x4 matrix, kako se pa to naredi v list comprehension, sem pa ze pozabil malo.

Če delaš z matrikami, še posebej če z velikimi, potem verjetno hočeš za tako delo uporabljati knjižnice:

http://docs.scipy.org/doc/numpy/referen...

Zgodovina sprememb…

  • spremenilo: jype ()


Vredno ogleda ...

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

[python] project euler problem

Oddelek: Programiranje
151283 (835) Spura
»

Python

Oddelek: Programiranje
203039 (1725) d_DJ
»

Naloga iz Putka - UPM

Oddelek: Programiranje
242217 (1553) NejcSSD
»

Python iskanje podvojenih vrednosti

Oddelek: Programiranje
181488 (1201) BlueRunner
»

python problem

Oddelek: Programiranje
131460 (1200) Isotropic

Več podobnih tem