Volt már olyan, hogy gondoltunk egy számra. Akkoriban azért, hogy megismerkedjünk az elágazással. A programunk “gondolt” egy számra – azaz megmondtuk, hogy mire gondoljon. Megkérdezte, hogy tudjuk-e, és ha eltaláltuk, megdicsért, ha nem, akkor kifejezte rosszallását.
Na eddig szép és jó, de kérdem én, hát fair az, hogy csak egy tippelési lehetőség van?? HÁT FAIR EZ ÍGY??? Hát persze, hogy nem!
Szerencsére, ahol nagy a szükség, ott közel a segítség ;). Először fölfogjuk, hogy mit akarunk csinálni, és azt meg azzal kezdjük, hogy tanulmányozzuk ezt a folyamatábrát:
Mondjuk el szépen, mit látunk:
- elindulunk
- egy V nevű változónak 1-et adunk értékül
- megnézzük, hogy a V-ben 100 van-e (ugyanmár, hogy lenne?)
- ha NEM, akkor V értékét eggyel növeljük, és VISSZAMEGYÜNK oda, hogy megnézzük, mennyi van V-ben.
- ha IGEN, akkor kiírjuk, hogy “Végre 100!”
Hányszor fogunk visszamenni? Nem, nem 100-szor. A 99 a helyes megoldás:)
Lássuk ezt kódban, “élő”-ben:
Ha fölfogtuk, próbáljuk ki a kódot, aztán térjünk vissza az eredeti problémára: hogyhogy csak egy lehetőségünk van kitalálni azt a nyomoronc számot?!
Szerencsére nem sokáig van ez már így, hanem itt a megoldás:
gondolt_szám = 4 kitalálta = False # True (igaz) vagy False (hamis) lehet az értéke while not kitalálta: tipp = input('Melyik számra gondoltam 1 és 5 között? ') tipp = int(tipp) if tipp == gondolt_szám: kitalálta = True print('Pápá!')
Mit tanultunk?
- A while szótól kezdve ciklust (angolul: loop) alakítunk ki. (Szoktuk úgy is mondani, hogy ciklust szervezünk.)
- A Python onnan tudja, hogy mi van a ciklus belsejében, és mi a ciklus után, hogy ami a ciklus belsejében van, azt beljebb kezdjük, ami meg a ciklus után van, azt nem kezdjük beljebb. Ugyanilyet láttunk az if esetében is.
- A ciklus belsejét ciklusmagnak nevezzük, azaz a ciklusmagot kezdjük beljebb.
- A ciklusba való belépésnek feltétele van – csak akkor lépünk be a ciklusba, ha ez a feltétel teljesül.
- A feltételt minden ismétlődéskor újra meg újra megvizsgálja a Python, és ha nem teljesül, akkor nem megy be a ciklusba, hanem utána folytatja a kód végrehajtását.
És mintegy mellékesen:
- A “nem egyenlő” művelet jele a felkiáltójel-egyenlőségjel. 2 != 3. Ez a helyzet.
- Megismerkedtünk a harmadik változótípusunkkal, a logikai típussal. (Eddig str és az int volt.)
- A logikai típus angolul boolean, a Python ennek örömére bool-nak hívja. Ne keressünk nyelvi kapcsolatot a logikai és a boolean szó között. A boolean annyit tesz: Boole-i, és Geroge Boole-ról van elnevezve.
- A bool típusú változó értéke True (igaz) vagy False (hamis) lehet
- A Pythonban nem szép, ha egy logikai típusú változó értékét egyenlőségvizsgálattal igykszünk kideríteni.. Ha piros = True, akkor
- nem szép a while piros == True:, helyette csak annyit írunk, hogy while piros:
- nem szép a while piros == False:, helyette csak annyit írunk, hogy while not piros:
- és ugyanez áll if-re is: if piros, if not piros. Majd még gyakoroljuk:)
Feladatok
F0007a: Írjd meg azt a programot, ami kiírja az első száz pozitív egész szám négyzetét (a hatványozás jele a két csillag, azaz kettő a köbön: 2**3) ! (Megoldás az expand source-ra kattintva.)
szám = 1 while szám <= 100: print(szám**2) szám += 1 # ez ugyanaz, mintha "szám = szám + 1"-et írunk volna
F0007b: Írjd meg azt a programot, ami kiírja a 100-nál kisebb páros természetes számokat! (Megoldás az expand source-ra kattintva.)
szám = 0 while szám < 100: print(szám) szám += 2
F0007c: Írd meg azt a programot, ami kiírja a háromjegyű páratlan számokat!
F0007d: Írd meg azt a programot, amelyik addig kérdezgeti, hogy “De ugye szeretsz?”, amíg azt nem válaszoljuk neki, hogy “Szeretlek”(vagy amíg félbe nem szakítjuk….)! (Megoldás itt.)
F0007e: Írj programot, ami megkérdi a felhasználótól, hogy hánytól hányig írja ki a számokat (és aztán írd is ki őket)!
F0007f: Az előző programot írd úgy át, hogy kérdezze meg azt is, hogy hányasával írja ki a számokat!
F0007g: Az előző programot írd úgy át, hogy kérdezze meg azt is, hogy hányadik hatványukat tüntesse fel a szám mellett! (Megoldás az expand source-ra kattintva.)
mettől = input('Honnan kezdve írjam ki a számokat? ') meddig = input('Meddig írjam ki a számokat? ') hányasával = input('Hányasával írjam ki a számokat? ') hatványkitevő = input('Hányadik hatványukat írjam a számok mellé? ') mettől = int(mettől) meddig = int(meddig) hányasával = int(hányasával) hatványkitevő = int(hatványkitevő) szám = mettől #dolgozhatnánk a mettől változóval is, csak így jobban követhető, hogy mi történik while szám <= meddig: print(szám, szám**hatványkitevő) szám = szám + hányasával
A múltkor összetett feltételeket fogalmaztunk meg. Legközelebb összetett feltételű ciklusokat írunk.
F0007c megoldása :
szam = 99
while szam <= 998:
print (szam+2)
szam += 2
KedvelésKedvelés
F0007e megoldása:
hanytol = int(input(‘Hánytól írjam ki a számokat? ‘))
hanyig = int(input(‘És meddig? ‘))
while (hanytol <= hanyig):
print(hanytol)
hanytol += 1
KedvelésKedvelés
F0007f megoldása:
hanytol = int(input(‘Hánytól írjam ki a számokat? ‘))
hanyig = int(input(‘És meddig? ‘))
hanyasaval = int(input(‘És milyen lépésenként írjam ki főnök? ‘))
while (hanytol <= hanyig):
print(hanytol)
hanytol += hanyasaval
KedvelésKedvelés
Köszönöm, még mindig értem:))
//Megjegyzés: Hivatkozott matematikus neve pontosan:George Boole, de elírás nem zavaró.//
Szorgalmasan tanulok tovább (50+ fan)
KedvelésKedvelik 2 ember
Javítottam, köszönöm:)
KedvelésKedvelés
😀 kicsit talan tulbonyolitottam…. 😀
#Írd meg azt a programot, ami kiírja a 100-nál kisebb páros természetes számokat!
v = 98
n = 1
while v >= 2:
print(n, ‘. szaznal kisebb paros termeszetes szam: ‘, v, sep=”)
n += 1
v -= 2
KedvelésKedvelés
DE KIIRTA…… 😀
KedvelésKedvelés
Egy kis segítséget szeretnék kérni. A lenti progit megcsinálja a gép, de nem helyesen. A 0.03 helyett a gépem 0.0291… fix értekkel szoroz. a 3. érték kiírásakor Miért?
Infláció 15 évre. Infláció mértéke 3.0%, tőke 1millió FT. Mennyi lesz 15 év múlva a nettó jelenérték?
>>>a,b,c=1,1000000.,0
>>>while a<16:
… b,c=b+c,b*0,03
… print b
… a=a+1
…
Válaszodat előre is köszönöm!
KedvelésKedvelik 1 személy
Hányas Pythonnal dolgozol? A kódrészlet alapján 2-essel, de máshol is van elnagyolás, úgyhogy bizonytalan vagyok. 3-asban ilyen:
#!/usr/bin/env python3
a,b,c=1,1000000.,0
print(a, b, c)
while a<16:
b,c=b+c,b*0.03
print(b)
a=a+1
kimenet:
1 1000000.0 0
1000000.0
1030000.0
1060000.0
1090900.0
1122700.0
1155427.0
1189108.0
1223770.81
1259444.05
1296157.1743
1333940.4958000001
1372825.211029
1412843.4259030002
1454028.1822338703
1496413.4850109604
KedvelésKedvelés
Szia. Valóban jó a sejtésed 2.7.15-ös a verzióm. Ettől függetlenül érdekes, hogy nálad is ugyanaz a végeredmény, mint nálam de hibásan. Az excelben számolt értéktől eltérő. Márpedig szerény véleményem szerint program és verziófüggetlenül a számításoknak pontos egyezőséget kellene mutatnia.
G*0,03 Ellenőrzés (H/G)
1000000 1030000 1,03
1030000 1060900 1,03
1060900 1092727 1,03
1092727 1125508,81 1,03
1125508,81 1159274,074 1,03
1159274,074 1194052,297 1,03
1194052,297 1229873,865 1,03
1229873,865 1266770,081 1,03
1266770,081 1304773,184 1,03
1304773,184 1343916,379 1,03
1343916,379 1384233,871 1,03
1384233,871 1425760,887 1,03
1425760,887 1468533,713 1,03
1468533,713 1512589,725 1,03
1512589,725 1557967,417 1,03
1557967,417 1604706,439 1,03
1604706,439 1652847,632 1,03
1652847,632 1702433,061 1,03
Sajnos a “float ” számtípus sem megoldás…Nálad is 0,0291-el számol a Python. Ez igazából a gubanc amit nem tudok hová tenni. Egyéb ötleted vagy megoldási javaslatod van?
KedvelésKedvelés
U.i: az excelben a G és H oszlopokat használtam:)
KedvelésKedvelés
Szóval megnéztem jól, de tényleg, és tudom, mi okozza a hibát:
Nevezetesen, ha a ciklusod belsejében lévő értékadást szétszeded két sorba:
b=b+c
c=b*0.03
akkor jó.
Azaz, amikor egy sorban vagy, akkor még a régi b-t helyettesíti be a c= értékadásba. Ami teljesen logikus, de én sosem használom ezt az egy-sorban-adok-sok-változónak-értéket módszert, és így sosem szembesültem ezzel a hibával.
Csekkold azért, hogy jót mondok-e, erre vágytál-e.
KedvelésKedvelés
Lecsekkoltam, igen így már fain. Köszi. Ez fontos információ volt amit a könyv amiből tanulok nem hangsúlyoz
KedvelésKedvelés
Szia!
Ismét van egy problémám:
A következő feladatot próbáltam megoldani, részsikerrel.
Vizsgálja meg egy számlista minden elemét azért, hogy két új listát hozzon létre. Az egyik csak az eredeti lista páros számait tartalmazza, a másik a páratlanokat.
>>>lista=[32,5, 12, 8, 3, 75, 2, 15]
>>>a,b,c=0,len(lista),-2
>>>t1=[“”]
>>>t2=[“”]
>>>t3=[“”]
>>>while a>>print t2,t3
Amiket nem értek:
– A program, ha c=-2 akkor lefut egyébként azt írja pl: c=0-nál hogy: IndexError list index out of range. Miért?
– ha az eredményt kiprintelem, akkor kezdésként két aposztróffal [ ‘ ‘…] jelenik meg. Miért?
Válaszodat előre is köszönöm!
KedvelésKedvelés
Ööö. Biztos idemásoltad a teljes programot? Tedd meg kérlek, hogy a pastebin.com-ra teszed és adsz linket.
KedvelésKedvelés
Szia!
Valóban lemaradt egy pár sor. elvileg ezen a linken van a teljes.
https://pastebin.com/GS9ZcJy4
KedvelésKedvelés
Ide válaszolok, mert a WordPress nem enged a tiedre válaszolni.
1) A két aposztróf azért van ott, mert úgy hozod létre a listáidat, hogy legyen bennük egy üres string. Üres lista létrehozására az a = [”] helyett elég az a=[]
2) Azért leszel index erroros, mert a len(lista) a lista hosszát adja meg, de a 8 elemű listád utolsó elemének az indexe 7 (az elsőé meg 0).
3) A fenti alapján elég volna c=-1 is, de azért kell nálad a c=-2, mert a lista első elemének kiolvasása _előtt_ növeled a c-t.
#megoldás a te gondolatmeneteddel
lista = [ 32, 5, 12, 8, 3, 75, 2, 15 ]
párosak = []
páratlanok = []
index = 0
while index<len(lista):
if lista[index] %2 == 0:
párosak.append(lista[index])
else:
páratlanok.append(lista[index])
index = index + 1
print(párosak, páratlanok)
#pythonosabb megoldás:
párosak = []
páratlanok = []
for elem in lista:
if elem %2 == 0:
párosak.append(elem)
else:
páratlanok.append(elem)
print(párosak, páratlanok)
KedvelésKedvelés
Köszönöm szépen, ismét sokat segítettél.
KedvelésKedvelés
nagyon jók a videók és hatalmas köszönet a feladatokért
KedvelésKedvelés
Kicsit tovább gondoltam az F0005b feladatot, íme:
jelszo = 402
helyes = False
lehetosegek = 0
while not helyes and lehetosegek < 3:
tipp = int(input('Írja be a PIN kódot a feloldáshoz. '))
lehetosegek = lehetosegek + 1
if tipp != jelszo:
print('Helytelen PIN. ')
elif tipp == jelszo:
helyes = True
if helyes:
print('Elfogadva. ')
if not helyes:
print('Hozzáférés megtagadva.')
KedvelésKedvelés