Egyszerű Python-program?
Ki szeretném íratni a háromjegyű, páratlan négyzetszámokat.
szamok=[]
while i^2 < 1000 and i^2 > 99 and i^2 % 2 ==1:
szamok.append(i^2)
print(szamok)
Ezt a kódot írtam, viszont a kimenet az csak ennyi:
[]
Tudja valaki, hogy mi lehet a hiba?
Íme az újabb javított kód, remélem hogy most már az utolsó.
--------------------------------------------
import math
szamok=[]
limit = 1000
for i in range(1,int(math.sqrt(limit)),2):
num = i*i
if (num < 1000 and num > 99):
szamok.append(num)
print(szamok)
--------------------------------------------
Ezért kell tanulni kicsit a matematikát is....
Vegyük észre, hogy az egymást követö négyzetszámok különbségének sorozata a páratlan számok sorozata:
négyzetszámok: 0, 1, 4, 9, 16, 25
négyzetszámok különbségei: 1(1-0), 3(4-1), 5(9-4), 7(16-9), 9(25-16)...
Kell néhány segédfüggvény:
paratlan(x) = 2*x + 1
negyzet(x) = x**2
a páratlan négyzetszámok sorozatát úgy állítod elö, hogy a páratlan számok négyzetét veszed:
páratlan_négyzet(x) = negyzet(paratlan(x))
behelyettesítve a paratlan(x) és a negyzet(x)-t a paratlan_negyzet(x)-be:
paratlan_negyzet(x) = negyzet(2*x + 1) = (2*x + 1)**2
ebböl már csak a limitek hiányoznak: 99 < paratlan_negyzet(x) < 1000
Az alsó limit:
99 < paratlan_negyzet(x)
99 < (2*x + 1)*(2*x + 1)
99 < 4*x^2 + 4*x + 2
4 * x^2 + 4 * x - 97 = 0
x ~= 4.45
Mivel egész számokról beszélünk és alsó limitröl van szó, ezért nekünk a legkisebb x, amire értelmezni kell a sorozatunkat, az x=5
a felsö limit: paratlan_negyzet(x) < 1000
4*x^2 + 4*x + 2 - 1000 = 0
ezt megoldva x ~= 15.3
Tehát az utolsó x, ami még belefér a limitbe, az a 15.
mindezt pythonosítva:
>>> szamok = [(2*x + 1)**2 for x in range(5,16)]
>>> szamok
[121, 169, 225, 289, 361, 441, 529, 625, 729, 841, 961]
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!