Script nepřičítá k proměnné – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Script nepřičítá k proměnné – Python – Fórum – Programujte.comScript nepřičítá k proměnné – Python – Fórum – Programujte.com

 

P3p111n0
~ Anonymní uživatel
4 příspěvky
26. 12. 2016   #1
-
0
-

Dobrý den , mám problém se scriptem na hledání prvočísel.  Script funguje tak jak má , dokud nepřijde na přičítání a následnému  opakování cyklu. 

cis = int(input("xd: "))
list1 = []
list2 = []
num = 2
while (num in range(0,cis)):
    list1.append(num)
    num += 1
    continue

num2 = 2

for i in list1:
    if list1[0] in list2:
        None
    else:
        list2.append(list1[0])
    if i % num2 == 0:
        list1.remove(i)
        continue
    if all(i % num2 in list1):
        num2 += 1
        continue

print (list1)
print (list2)

Děkuji za pomoc. 

Nahlásit jako SPAM
IP: 78.156.32.–
gna
~ Anonymní uživatel
1849 příspěvků
26. 12. 2016   #2
-
0
-

Máš tam dvoje přičítání. Obojí podmíněné. Asi není ta podmínka splněna. U prvního není, co řešit (kromě toho, že ten cyklus vůbec nepotřebuješ :-)). Tak koukneme na ten for...

První if(+else) -- nevím, k čemu to má být dobré, ale budiž.

Druhý if -- to je optimalizace pro sudá čísla? Fajn, ale měníš ten list, který právě procházíš. Ve výsledku ti to bude jedno číslo přeskakovat, takže půjdeš pořád jen po sudých.

Třetí if -- k tomu ti to teda zatím ani nedojde a netuším, co od toho čekáš, ale all nejspíš nedělá to, co si myslíš :-)

Nahlásit jako SPAM
IP: 213.211.51.–
P3p111n0
~ Anonymní uživatel
4 příspěvky
26. 12. 2016   #3
-
0
-

#2 gna
Jsem začátečník , tak se omlouvám , někde jsem četl , že all znamená jako pro všechny prvky v tom listu. Ten druhý if odebírá čísla dělitelná tou proměnnou , takže by to ideálně mělo odebrat postupně všechny čísla , co nejsou prvočísla. Ten třetí if by měl ověřit , že už v listu nejsou žádná v tomhle případě sudá čísla a postoupit na čísla co jsou dělitelná třemi. 

Nahlásit jako SPAM
IP: 78.156.32.–
gna
~ Anonymní uživatel
1849 příspěvků
26. 12. 2016   #4
-
0
-

#3 P3p111n0

Neomlouvej se, na zetptání není nic špatného.

Jo, neuvědomil jsem si, že se num2 má měnit a nebude pořád 2. To je celkem jedno, šlo o to, že ten list měníš zatímco ho procházíš.

Tomu all nedáváš list, ale True nebo False (výsledek toho in).

Nahlásit jako SPAM
IP: 213.211.51.–
P3p111n0
~ Anonymní uživatel
4 příspěvky
26. 12. 2016   #5
-
0
-

#4 gna
Úplně se nechytám , jak by to tedy mělo být ? Jak tedy ukončit měnění toho listu než ho začnu procházet a jak na to all ? 

Nahlásit jako SPAM
IP: 78.156.32.–
gna
~ Anonymní uživatel
1849 příspěvků
27. 12. 2016   #6
-
0
-

No, ideálně ten list uvnitř toho cyklu vůbec neměň. Nevím, jak to chceš řešit, ale nějak k tomu ani nevidím důvod.

Úplně primitivně by to bylo třeba takhle:

cis = int(input("xd: "))

prvocisla = []
for i in range(2, cis):
	madelitele = False
	for j in range(2, i):
		if i % j == 0:
			madelitele = True
			break
	if not madelitele:
		prvocisla.append(i)

print(prvocisla)

To k čemu možná směřuješ by bylo třeba takhle:

prvocisla = []
for i in range(2, cis):
    if all(i % j != 0 for j in range(2, i)):
        prvocisla.append(i)

A nebo ještě zhuštěněji takhle:

prvocisla = [i for i in range(2, cis) if all(i % j != 0 for j in range(2, i))]

Pokud to máš do školy a netušíš, co děláš, tak bych asi čekal první možnost.

Nahlásit jako SPAM
IP: 213.211.51.–
P3p111n0
~ Anonymní uživatel
4 příspěvky
27. 12. 2016   #7
-
0
-

#6 gna
Kdepak do školy , znuděnej samouk :D Ale koukám na tu tvoji verzi a ty jsi asi génius. Základní myšlenka byla , že naplním jeden list číslama a postupně z něj odebírat čísla , než mi zbyde jen list s prvočísly. Děkuji moc za pomoc ! 

Nahlásit jako SPAM
IP: 78.156.32.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý