Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 629 odgovora
  • 108.086 pregleda

Najnovija ↓

Zadaci za wannabe pythoniste 09.12.2019. u 03:58 · pre 83 meseca #1
Za ambiciozne pyhtoniste početnike materijala na engleskom koliko hoćeš, ali na srpskom slabo. Pa evo da ja kao isti takav početnik nešto doprinesem po tom pitanju, dok se ovi iskusniji ne reše da stvar preuzmu u svoje ruke.

U tu svrhu sam rešio da postavljam ovde zadatke iz knjige po kojoj radim, pa možda još nekom bude od koristi. Dakle, to je knjiga Al Sweigart: Automate The Boring Stuff With Python - Practical Programming For Total Beginners (No Starch Press, 2019). Da bi bilo zanimljivije, zamislio sam da postavim prvo output na ekranu koji treba da proizvede program. Na osnovu njega bi trebalo napisati kod. Naravno, u početku su to (za mnoge ovde) jednostavne stvari, ali kasnije će siguran sam naići i prave poslastice, da ne kažem korisne komplikacije :)

Koga bude zanimalo, nek postavi ovde svoje rešenje. A ja ću posle nekoliko dana postaviti i rešenje iz knjige, pa da uporedimo. Vidim da često pominju kako je isti zadatak moguće u pythonu rešiti na više načina, pa da vidimo koliko takvih rešenja ima. To je verujem odlična lekcija za proširivanje programerskih vidika :)

Eto zabave za sve prave i wannabe pythoniste. Uživajte!
Sviđa mi se1
Re: Zadaci za wannabe pythoniste 09.12.2019. u 04:04 · pre 83 meseca #2
Dobro, posle akademskog uvoda, evo i konkretnog zadatka za danas.

Zadatak broj 1: Pogađanje zamišljenog broja

Ispis ekrana je sledeći. Koji je kod?

Zamislio sam jedan broj između 1 i 20.
Šta misliš koji je?

Unesi neki broj: 4
Tvoj broj je suviše mali.

Unesi neki broj: 17
Tvoj broj je suviše mali.

Unesi neki broj: 20
Tvoj broj je suviše velik.

Unesi neki broj: 18
Tvoj broj je suviše mali.

Unesi neki broj: 19
Bravo majstore! Pogodio si moj broj u 5 pokušaja!
Re: Zadaci za wannabe pythoniste 09.12.2019. u 04:13 · pre 83 meseca #3
Da bi posao bio lakši, evo početnih redova koda:

# Ovo je igra pogađanja brojeva.
import random
tajniBroj = random.randint(1, 20)
print('Zamislio sam jedan broj između 1 i 20.')

E sad je pesma :)
Re: Zadaci za wannabe pythoniste 10.12.2019. u 00:46 · pre 83 meseca #4
To možeš i u JS u nekoliko linija koda, Python je interesantan za nešto ozbiljnije, tipa programčić koji će da predvidi koji ćeš broj uneti ako te pita da uneseš broj između 1 i 20 :)
Potpis
Blessed are those who can laugh at themselves, for they shall never cease to be amused.
Re: Zadaci za wannabe pythoniste 10.12.2019. u 02:44 · pre 83 meseca #6
I da ne dangubimo, evo odmah i zadatka broj 2, koji se tiče korišćenja funkcija.

Reč je o nizu brojeva nazvanom "3x+1 problem" ili "Collatzov niz" (nazvan po nemačkom matematičaru Lotharu Collatzu, 1910-1990). Ja kad sam prvi put pročitao zadatak, nije mi baš bilo jasno, jer sam još od osnovne škole alergičan na matematiku :))), ali na drugo čitanje se malo razbistrilo. A zadatak je sledeći:

Napiši funkciju u nazovi je collatz(). Ona ima jedan parametar nazvan broj. Funkcija radi tako što za neki zadati broj, ako je paran, računa broj // 2 vrednost. Ako je uneti broj neparan, tada collatz() izračunava 3 * broj + 1 vrednost.

Kad si napravio tu funkciju, napiši program koji ti omogućuje da uneseš bilo koji pozitivan integer i potom stalno poziva funkciju collatz() na taj broj, sve dok funkcija ne dobije na kraju vrednost 1.

Neverovatno ili ne, ovo radi za svaki integer, jer pre ili kasnije, koristeći ovaj metod stižemo do 1! Čak ni matematičari nemaju pojma zašto je to tako. Zato se Collatzov niz naziva i "najjednostavniji nerešivi matematički problem".

Ne zaboravi da vrednost unetu na input() kovertuješ u integer pomoću int() funkcije. Inače će ostati string vrednost.

Hint: Integer broj je paran ako broj % 2 == 0, a neparan je ako broj % 2 == 1.

I na kraju, ispis programa na ekranu je nešto ovako:

Unesi broj:
3
10
5
16
8
4
2
1


Ajd sad, srećna radnja pythonisti.

PS. Janjić može ovo da rešava i u JS (al na drugom topiku), pa da uporedimo.

Re: Zadaci za wannabe pythoniste 10.12.2019. u 15:42 · pre 83 meseca #7
U matematici se konvergiranje ka nekom broju stalno koristi. Recimo najpoznatija je newton rafson metoda konvergencije tangente ka 0 zato
sto se koristi za izracunavanje deljenja preko mnozenja i sabiranja u svrhu optimizacije na Intel procesorima. Imas neki moj uradak na podforumu
programiranje u asembleru.
Re: Zadaci za wannabe pythoniste 11.12.2019. u 07:51 · pre 83 meseca #9
Ja rezignirano odbijam da pisem python, eto ti Rust:

Code:

fn main()->Result<(),String> {
    let args:Vec<_> = std::env::args().collect();
    let collatz = |n:i64|->i64 {
        if n & 1 == 1 {
            3*n+1
        } else {
            n/2
        }
    };
    let mut n = args[1].parse::<i64>().unwrap();
    while n != 1 { 
        println!("{}",n);
        n = collatz(n); 
    }
    Ok(())
}


Code:

~/examples >>> ./collatz 3                                                                                                                                                                                      
3
10
5
16
8
4
2

Re: Zadaci za wannabe pythoniste 11.12.2019. u 08:21 · pre 83 meseca
izmenjeno 1 put, poslednji put bojan_bozovic 11.12.2019. u 09:14
  1. bojan_bozovic11.12.2019. u 09:14zapis iz teksta poruke
#10
Evo, u Adi.

Code:

with Ada.Text_IO;
with Ada.Integer_Text_IO;

use Ada.Text_IO;
use Ada.Integer_Text_IO;

procedure Collatztest is
   procedure Collatz (Arg : in out Integer) is
   begin
      if (Arg mod 2) = 0 then
         Arg := Arg / 2;
      else
         Arg := 3 * Arg + 1;
      end if;
      Ada.Integer_Text_IO.Put (Arg);
   end Collatz;
   Argument : Integer;
begin
   Ada.Text_IO.Put_Line ("Unesi celobrojnu vrednost:");
   Ada.Integer_Text_IO.Get (Argument);
   while Argument /= 1 loop
      Collatz (Argument);
   end loop;
   Ada.Text_IO.New_Line;
end Collatztest;



Moze i kao taj Rust kod da radi, malo drugaciji bi kod bio, uz Ada.Command_Line
Re: Zadaci za wannabe pythoniste 11.12.2019. u 09:22 · pre 83 meseca #11
Citat:
Ja rezignirano odbijam da pisem python, eto ti Rust:

Branimire, ko/šta te tako rezigniralo!?
Python je baš lep jezik :)


Citat:
Evo, u Adi.

Hvala, Bojane na trudu. Nisam probao, ali verujem da radi.

Jedino se pythonisti ne oglašavaju :)
Ali dobro, dok pripale mašinu, pa dok krenu... mi već na zadatku broj 5! :))
Re: Zadaci za wannabe pythoniste 11.12.2019. u 11:50 · pre 83 meseca #12
"Branimire, ko/šta te tako rezigniralo!?"

Brzina Pythona. Ako hoces nesto ozbiljno da uradis
sve moras da radis preko nekog drugog jezika.
Python koristis samo kao lepak poziva f-ja drugog jezika.
Re: Zadaci za wannabe pythoniste 11.12.2019. u 15:21 · pre 83 meseca #13
Dobro je, ja sam onda bezbedan. Dok ne stignem dotle, (ako ikada?) ima još dosta vode mutnim Dunavom da proteče. :)
Re: Zadaci za wannabe pythoniste 11.12.2019. u 21:01 · pre 83 meseca #14
a vidi haskell tek sto je lep ;)

Code:

import System.Environment

main = do
    (n:[]) <- getArgs
    let callatz n = if n `mod` 2 == 0 then n `div` 2 else n * 3 + 1
        go n | n /= 1 = do
                   print n
                   go $ callatz n
             | otherwise = return n
    go $ read n


E sad napisi ti u pitonu...
Re: Zadaci za wannabe pythoniste 12.12.2019. u 04:13 · pre 83 meseca #15
Pre svega je kratko, a ja volim minimalizam :)

Mada nisam siguran da je baš po standardu pisanje te petlje if - then u jednom redu. Zbog čitljivosti koda. Barem koliko sam shvatio to ne preporučuje python "pravopis".

Moje rešenje za zadatak br. 2 dajem u posebnom postu...
Re: Zadaci za wannabe pythoniste 12.12.2019. u 06:17 · pre 83 meseca #17
Kad vec nitpikujes za if, ne ide ti print u collatz, to treba da bude f-ja koja obracunava vrednosti i ne radi nista vise
osim toga to radis redundantno.

Re: Zadaci za wannabe pythoniste 12.12.2019. u 07:19 · pre 83 meseca #18
Hvala na komentaru. Početničke greške. Kao što i dolikuje jednom pravom početniku :)

Bože, kako je lepo biti početnik! Rasterećen si opsesije da moraš biti savršen.
To valjda dođe kasnije :)
Re: Zadaci za wannabe pythoniste 12.12.2019. u 07:44 · pre 83 meseca #19
Evo probao da izvadim print funkciju izvan if...else statement, ali ne radi, jer naravno više ne prepoznaje promenljivu "rezultat"
Daj primer na šta konkretno misliš. Da nešto naučimo.
Re: Zadaci za wannabe pythoniste 12.12.2019. u 08:44 · pre 83 meseca #20
Evo stiže i zadatak broj 3: Nabrajanje!
Sasvim je jednostavan.
Unesemo četiri artikla i program ih na kraju izlista. S tim što iza svakog ubaci zarez, a pre poslednjeg artikla stavi veznik "i", kao što je i red.

Evo ispis ekrana. Boldom je označen unos, a plavim konačni ispis.

Unesi četiri artikla
prvi: so
drugi: biber
treći: hleb
cetvrti: voda
so, biber, hleb i voda


Naravno, ovo u Rustu ne mož da uradiš ni u ludilu, a o Adi i Haskellu ne vredi ni govoriti :D


Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme