Koristi sorted sa reverse=True:
a = int(input('Prvi broj:'))
b = int(input('Drugi broj:'))
c = int(input('Treći broj:'))
print(sorted([a, b, c], reverse=True))
Koristi sorted sa reverse=True:
a = int(input('Prvi broj:'))
b = int(input('Drugi broj:'))
c = int(input('Treći broj:'))
print(sorted([a, b, c], reverse=True))
Vjerojatno ništa, kao i svi koji se registriraju na forum očekujući da će drugi za njih sve riješiti bez imalo truda. Umjesto da bar nešto sami pokušaju, pa makar to i apsolutno krivo bilo.
Hvala Vam puno. nisam se uopce sjetio toga.
Pokreni svoj program i unesi godinu 2000. Tvoj program javi da nije prestupna, što nije točno.
Problem je što program prvo provjerava da li je godina djeljiva sa 100. Godina 2000 zadovoljava ovaj uvjet pa program ispisuje poruku i izlazi iz if naredbe - provjera da li je 2000 djeljivo s 400 se neće izvršiti.
Najjednostavnije je zamijeniti prvi i drugi uvjet.
pažljivo čitaj.. moraš smisliti odgovor, rečenicu koja će na kraju dati točan rezultat, neovisno koja je godina.. s izuzetcima.
da je samo svaka 4 tad bi bilo lako, if n 4=0.. zbog korekcije, svaka 100ta, mada je djeljiva, nije prijestupna, opet zbog korekcije svaka 400ta je.. to su izuzetci.
izuzetke testiraš samo kad su potrebni, ne za svaku drugu npr neparnu godinu koja nije izuzetak.. pa ne može biti ni izuzetak-izuzetka.
..tad bi zadatak bio precizno-struktutno-logički napravljen. Kao diagram toka, skup-podskup-rekurzija..
prvi if koji zaovolji uvjet, se uzme za true, else je kad ni jedan if nije zadovoljen (pravilo)
da je samo if djeljivo s 4..true (prijestupna) i else-false (nije prijestupna), tad bi dobio točno osim za 100tu.. false
kad dodaš za 100tu-izuzetak, moraš i 400tu kao izuzetak-izuzetka..true
to je zadatak, tako ga čitaš.
sve ostalo je else=false.
probaj, .. unutar if 4, unutar if 100 if 400.. i sve godine koje uneseš, moraju biti točne, 1234, 999, 1000, 2111, 2100, 2000.. 1999, 2001..
za test, uvijek koristi brojeve za koje znaš točan odgovor-rezultat.
-u tvom rješenju, godina npr 400, 1600, 2000.. bi dala netočan odgovor, jer bi dijeljenje sa 100 zadovoljilo uvjet, ne bi se uopće izvršilo djeljenje s 400..
ako zamjeniš ta dva redosljeda if 400 pa if 100, odgovor je točan. tj kad prvo djeliš sa 400 i to da true (točno) tad je djeljenje sa 100 nepotrebno, ako nije djeljivo s 400, prolazi do djeljenja sa 100 npr 200 i 300, 500, 600..
to su dva načina, pravi redosljed ili unutar ifa, dodatni test, uvod u rekurzije.. i logiku grananja uvijeta koji se (ne)izvršavaju.
zgodno je pratiti u debuggeru izvršavanje.. tad vidiš petlju i kako se izvršava, kad izlazi .. i tako otkriješ zašto je redosljed postavljanja testiranja važan, izuzetci.
Ahaa. Sad mi je jasno. Hvala Vam puno!!
pozdrav. hitno mi treba pomoc oko dva zadatka.
a) napisati program koji ispisuje da li je broj deljiv sa 9, ali bez upotrebe ˝else˝.(znam da treba to ici ovako : a=int(input('unesi broj'))
if a%9==0:
print('broj je deljiv')
else:
print('broj nije deljiv'); ali kako to bez grananja?)
b)napisati program koji ispisuje kojije broj veći ,a koji manji ali bez upotrebe min i max(znam da je sa upotrebom min i max ovako:Ž
a=int(input('unesi prvi broj'))
b=int(input('unesi drugi broj'))
print('najveći je',max(a,b))
print('najmanji je',min(a,b))
i da li po prioritetu operatora u python-u idu: aritmetički, logički,operatori poređenja
Zadatak a) se može riješiti pomoću dictionaryja:
DJELJIV = {True: 'broj je djeljiv', False: 'broj nije djeljiv'}
a = int(input('unesi broj'))
print(DJELJIV[a % 9 == 0])
Zadatak b) se može napraviti ovako:
a=int(input('unesi prvi broj'))
b=int(input('unesi drugi broj'))
if a > b:
print('najveći je', a, 'najmanji je', b)
elif b > a:
print('najveći je', b, 'najmanji je', a)
pitanje: kako riječima objasniti sta petlja radi. znam da prvo uzima broj od 1 do n+1 ali ne razumem zasto dalje pise z_djelitelja=0:
n=int(input('unesi broj'))
for i in range(1,n+1):
zbroj_djelitelja=0
for j in range(1,i):
if i%j==0:
zbroj_djelitelja+=j
if zbroj_djelitelja==i:
print(i,end=' ')
ako netko moze da mi napise kako procitati taj program u cijelosti?
Dakle, prvo treba opisati što algoritam uopće radi, a zatim tehniku na koji način to radi.
Algoritam za uneseni integer n traži savršene brojeve u intervalu [1, n]. Savršeni broj n je onaj prirodni broj čija suma djeljitelja koji su manji od n je jednaka n.
Vanjskom petljom prolazimo kroz zadani interval [1, n].
Varijabla z_djeljitelja nam služi da u nju zbrojimo sve djeljitelje svakog pojedinog broja i iz vanjske petlje. Zato varijablu resetiramo na 0 za svaki pojedini broj.
Unutarnjom petljom tražimo djeljitelje svakog broja i iz vanjske petlje u intervalu [1, i) i zbrajamo ih u varijablu z_djeljitelja.
Ako nam je zbroj djeljitelja broja i jednak broju i, ispišemo broj.
Pozz svima potrebna mi je pomoc oko iscitavanja ovog koda.
import math
parni=int(input('unesi paran broj'))
for nep in range(3,parni//2+1,2):
p=True
for nep2 in(nep,parni-nep):
if p:
for k in range(2,round(math.sqrt(nep2))+1):
if nep2%k==0:
p=False
if p:
print('{} +{}' .format(nep,parni-nep))
uglavnom znam da program ispsuje parni broj pomocu zbira prostih brojeva,Potrebno mi je da mi iscita netko svaki korak posebno.Hvala od srca svakom tko mi pomogne. ;)
Hvala puno. Samo mi jos nije jasno zasto moramo pisati prvu petlju ovu vanjsku. Da li bi program radio i bez nje.
Pozz svima potrebna mi je pomoc oko iscitavanja ovog koda.
import math
parni=int(input('unesi paran broj'))
for nep in range(3,parni//2+1,2):
p=True
for nep2 in(nep,parni-nep):
if p:
for k in range(2,round(math.sqrt(nep2))+1):
if nep2%k==0:
p=False
if p:
print('{} +{}' .format(nep,parni-nep))
uglavnom znam da program ispsuje parni broj pomocu zbira prostih brojeva,Potrebno mi je da mi iscita netko svaki korak posebno.Hvala od srca svakom tko mi pomogne. ;)
Navedeni program ne radi ništa jer ima gomilu grešaka - pogrešna, neuparena i nekonzistentna indentacija, zatvorena zagrada viška, korištenje varijable prije inicijalizacije i naopaki poziv funkcije sqrt.math (treba math.sqrt)
Ono što preostane nakon minimalnih ispravaka
import math
parni=int(input('Unesi paran broj'))
for nep in range(3, parni // 2 + 1, 2):
p=True
for nep2 in range(nep, parni-nep):
if p:
for k in range(2,round(math.sqrt(nep2)) + 1):
if nep%2==0:
p=False
if p:
print('{} + {}'.format(nep,parni-nep))
je program koji ispisuje sve kombinacije unesenog pozitivnog parnog broja kao zbroja dva pozitivna brojeva od kojih je prvi neparan broj veći ili jednak 3 i manji ili jednak od drugog broja.
6 -> 3 + 3
8 -> 3 + 5
10 -> 3 + 7, 5 + 5
12 -> 3 + 9, 5 + 7
14 -> 3 + 11, 5 + 9, 7 + 7
...
1. Glavna petlja kroz varijablu nep provlači sve neparne brojeve veće ili jednake od 3 i manje od polovice unesenog parnog broja.
2. Na početku petlje varijabla p se postavlja na True.
3. Slijede dvije ugniježđene petlje koje efektivno ne rade ništa. Uvjet nep % 2 == 0 nikad nije ispunjen (jer je varijabla nep uvijek neparna) pa vrijednost varijable p ostaje nepromijenjena.
4. Na dnu se ispisuje (jer je p uvijek True) trenutna vrijednost varijable nep i razlika između parni i nep.
Pozdrav, potrebna mi je pomoć oko iščitavanja svakog koraka zadatka:
n=int(input('unesi broj'))
ima=False
for i in range (1, n // 2, 2):
t=i
pom=n
while pom > 0:
pom-=t
t+=2
if pom ==0
ima =True
for j in range (i, t , 2):
print(j,end= ' ')
if not ima:
print('Nema')
Znam da program ispisuje sve konbinacije neparnih broje koje u zbiru daje uneseni broj n, ali ne znam kako iščitati zadatak. Unaprijed hvala. :D
pozdrav! Naisao sam na zadatak koji ne razumem u potpunosti.Ako bi netko bio ljubazan i objasnio ga bio bih jako zahvalan.
def upis(n):
x=[0]*n
for i in range (n):
x[i]=int(input())
return x
n=int(input('broj elenata:'))
print('prva lista')
a=upis(n)
print('druga lista:')
b=upis(n)
s=0
for i in range(n):
s+=a[i]*b[i]
print(s)
Priprema ispisa za fout može se premjestiti u funkciju (i malo pojednostaviti jer je '{0}.format(p) isto što i p)
def ispis(p, n):
if n > 1:
return '{0}{1}'.format(p, n)
else:
return p
fin = open('ulaz.txt', 'r')
fout = open('izlaz.txt', 'w')
retci = fin.readlines()
for r in retci:
p = ''
n = 0
for t in r.strip():
if t == p or p == '':
n += 1
else:
fout.write(ispis(p, n))
n = 1
p = t
fout.write(ispis(p, n) + '\n')
fout.close()
Tvoja petlja radi isto što i funkcija groupby iz modula itertools pa se može izbaciti ponovljeni kod za ispis nakon petlje:
from itertools import groupby
fin = open('ulaz.txt', 'r')
fout = open('izlaz.txt', 'w')
retci = fin.readlines()
for r in retci:
for p, grupa in groupby(r.strip()):
n = len(list(grupa))
if n > 1:
fout.write('{0}{1}'.format(p, n))
else:
fout.write(p)
fout.write('\n')
fout.close()
Može i ovako
Hvala Vam puno! Sad mi je jasnije. Hvala jos jednom.
Kad dođeš kod doktora prvo kažeš što te boli, pa bi bilo dobro da daš zadatak a ne samo da zaljepiš kod koji bi ja sad trebao čitat i pokušat razumjet što je pjesnik htio reći
Program ispisuje rezultate i brzinu izvršavanja dviju funkcija tako da im pošalje istu listu od 5.000 random cijelih brojeva iz intervala [1, 100.000].
Obje funkcije za zadanu listu vraćaju jedan par različitih elementa čija je razlika najmanja - npr. za listu [1, 3, 10, 3] rezultat je (1, 3). Funkcije ne koriste isti algoritam - prva uspoređuje elemente "svaki-sa-svakim", dok druga prvo sortira listu pa provjera samo sljedbenik svakog elementa.
Ovo je primjer rezultata:
(47755, 47754)
(154, 155)
funkcija 1:3.388098
funkcija 2:0.002507
hvala Vam puno. opet imam jos jedno pitanje.
kod ovog zadata razumijem sve osim razloga zasto je ispisano traženje srednje vrednosti toliko komplikovano.zar ne bi mogla jednostavno pocetak+kraj//2
from random import*
def binarno_traženje(e, a):
početak, kraj = 0, len(a) - 1
while početak <= kraj:
sredina = početak + (kraj - početak) // 2
print(sredina,a[sredina])
if a[sredina] == e:
return sredina
elif a[sredina] > e:
kraj = sredina - 1
else:
početak = sredina + 1
return -1
a=[]
n=int(input('Unesi broj elemnata liste'))
for i in range(n):
a.append(randint(1,9*n))
a.sort
print (a)
e=int(input('unesi traženi broj'))
index = binarno_traženje(e,a)
if index==-1:
print('nema trazenog broja',e,'u listi')
else:
print('index broja',e,'je',index')
Program ne traži srednju vrijednost, nego poziciju traženog broja e u listi od n random brojeva metodom binarnog pretraživanja.
Za početak program ima sintaktičku grešku - zadnji jednostruki navodnik u zadnjoj liniji je višak. Drugi problem je što linija a.sort ne radi ništa. Za binarno pretraživanje lista mora biti sortirana, a za izvršavanje metode/funkcije treba navesti zagrade a.sort().
Program ne traži srednju vrijednost, nego poziciju traženog broja e u listi od n random brojeva metodom binarnog pretraživanja.
Ja mislim da on pita zasto "sredina = početak + (kraj - početak) // 2"
umjesto "sredina = (početak + kraj) // 2"
Matematicki je isto i ja bi isto stavio ovo drugo, ali nije bas da je prevelika razlika.