Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoć oko programa - Fibonacci sequence

[es] :: Python :: Pomoć oko programa - Fibonacci sequence

[ Pregleda: 8329 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

wraith46

Član broj: 336363
Poruke: 29



+1 Profil

icon Pomoć oko programa - Fibonacci sequence15.03.2017. u 16:04 - pre 53 meseci
Radim po knjizi Python Programming: An Introduction to Computer Science (2nd Edition) by John Zelle.

Imam velikih glavobolja sa 16. zadatkom na 64. strani:

Citat:
A Fibonacci sequence is a sequence of numbers where each successive number is the sum of the previous two. The classic Fibonacci sequence begins: 1, 1, 2, 3, 5, 8, 13, ... Write a program that computes the nth Fibonacci number where n is a value input bz the user. For example, if n = 6, then the result is 8


Zablokirao sam skroz, ne znam ni odakle da krenem...Uradio sam "sve ostalo", ali "glavno" mi fali.

Code:
# fibonacci.py
#   Program that computes the nth Fibonacci number 
#   where n is avalue input by the user

def main():
    
    print("Welcome to Fibonacci calculator!\n")
    
    n = int(input("Enter n: "))

    for i in range(1, n+1): 
                
        print(str(i) + "th Fibonacci number is: " + str(fibonacci))
        
    print(str(n) + "th Fibonacci number is: " + str(fibonacci))

main()


Molio bih za pomoć pa da raskrstim s ovim trećim poglavljem već jednom...
 
Odgovor na temu

del-boy
Bojan Delić
Beograd

Član broj: 9330
Poruke: 1089

Sajt: www.delic.in.rs


+21 Profil

icon Re: Pomoć oko programa - Fibonacci sequence15.03.2017. u 18:29 - pre 53 meseci
Evo jedan način kako možeš to da uradiš (ne znam knjigu, možda je ideja da koristiš rekurziju ili tako nešto, pošto to često jeste slučaj sa ovakvim zadacima, ali ja je namerno nisam koristio ovde). Pitaj ako neki deo koda nije jasan.

Code:

import sys

def fib(n):
    """
    Calculates n-th fibonacci number and returns it.
    :param n: Fibonacci number to return.
    :return: n-th fibonacci number.
    """
    if n <= 0:
        raise ValueError('Invalid request for fibonacci number: %d' % n)
    x, y = 1, 1
    for i in range(n-1):
        x, y = y, x + y
    return x


def main():
    print("Welcome to Fibonacci calculator!\n")
    while True:
        try:
            n = int(input("Enter n: "))
            break
        except ValueError:
            print('Invalid input. Integer expected.')

    try:
        print('Requested fibonacci number: %d' % fib(n))
    except ValueError as e:
        print('Error: ', str(e))


if __name__ == '__main__':
    sys.exit(main())
 
Odgovor na temu

wraith46

Član broj: 336363
Poruke: 29



+1 Profil

icon Re: Pomoć oko programa - Fibonacci sequence15.03.2017. u 19:11 - pre 53 meseci
Pre svega hvala mnogo, radi savršeno.

Iako mi je veći deo koda razumljiv zbog nešto malo prethodnog iskustva iz C#, imam nekoliko nedoumica budući da se mnoge stvari odavde dosad uopšte nisu spominjale u knjizi (do trećeg poglavlja - i dalje sâm početak knjige).

1) Šta znači %d i %n?

2) except je, pretpostavljam, umesto catch u try/catch kod C#?

3) Ovo mi je u potpunosti nejasno:

Code:
if __name__ == '__main__':
    sys.exit(main())
 
Odgovor na temu

del-boy
Bojan Delić
Beograd

Član broj: 9330
Poruke: 1089

Sajt: www.delic.in.rs


+21 Profil

icon Re: Pomoć oko programa - Fibonacci sequence15.03.2017. u 19:49 - pre 53 meseci
1. Ovo je jedan od načina formatiranja stringova u Python-u. Više detalja možeš pročitati ovde: https://pyformat.info/

Generalno, u stringu postoji placeholder (u ovom slučaju %d) koji označava gde će vrednost ići i kako će izgledatu ("d" znači da treba da se ispiše integer). Operator "%" između stringa i "n" samo primenjuje pravila formatiranja. Ovo je samo jedan način kako se formatiraju stringovi. Možda si naišao na string metodu "format", koja radi sličnu stvar. Na primer, sa format bi bacanje exception-a moglo da izgleda ovako:

Code:

raise ValueError('Invalid request for fibonacci number: {}'.format(n))


Od python-a 3.5 ili 3.6 (nisam siguran) postoje i f-stringovi, koji su treći način formatiranja.


2. Dobro pretpostavljaš :)

3. To je način na koji možeš da proveriš da li je fajl direktno izršen ili je importovan od strane nekog drugog modula. Svaki modul ima ime u varijabli "__name__". Ovo je obično isto kao i ime fajla, ali ako je fajl direktno pokrenut (python file.py), ova varijabla će sadržati "__main__". Ako je taj isti modul importovan od strane drugog modula, "__name__" će imati vrednost imena fajla.

Ovaj if je provera da li fajl treba da se izvrši ili ga drugi modul samo importuje da bi koristio njegove funkcije. Na ovaj način, ako pišeš neki drugi program koji može da iskoristi "fib" funkciju, možeš importovati modul i koristiti ga. Bez toga bi se uvek izvršio main i svaki put kad importuje ovaj modul bi imao prompt koji bi pitao korisnika pitanje i ispisao rezultat.

Verovatno ćeš doći do toga kasnije u knjizi.
 
Odgovor na temu

wraith46

Član broj: 336363
Poruke: 29



+1 Profil

icon Re: Pomoć oko programa - Fibonacci sequence15.03.2017. u 20:01 - pre 53 meseci
Jasno kao dan, hvala mnogo! :)
 
Odgovor na temu

[es] :: Python :: Pomoć oko programa - Fibonacci sequence

[ Pregleda: 8329 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.