Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Python Code » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Zum Ende der Seite springen Python Code
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Kleiber
unregistriert
Python Code Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Abend Leute,

ich habe hier eine Aufgabe, an der ich jetzt seit 3h scheitere unglücklich Dabei ist es so einfach...
Ich soll einen Code bauen, in den man einen bestimmten Bereich eingibt, z.B. 1-100, und dann werden dort alle Primzahlen gesucht. Er beginnt also mit 1 und schreibt dann True für Primzahl bzw. False für keine Primzahl. Ist keine tolle Aufgabe, aber eben die Aufgabe...

Leider scheitert mein Code. Hier mein Code:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
isPrime=[]
for x in range(1,100):
	if x==0 or x==1:
		isPrime.append(x+100)
		continue
	if x==2 or x==3 or x==5:
		isPrime.append(x+200)
		continue
	if x%2==0 or x%3==0 or x%5==0:
		isPrime.append(x+300)
		continue
	for d in range(5,(x//2)+1,1):
		if x%d==0:			
			isPrime.append(x+900)
			break
	
	isPrime.append(x+500)
	
print(isPrime)
print(len(isPrime))		


Die Trues und Falses fehlen, ich habe zum Debuggen die Zahlen in Klammern. Ihr seht, dass der Code knapp scheitert, wenn ihr euch 49 anschaut. Diese Zahl taucht 2x mal auf, obwohl der Code zuerst eigentlich korrekt erkennt, dass es KEINE Prim ist unglücklich Kann jemand den Bug finden? Python3...
25.12.2015 23:00
Kleiber
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

So, habe EINE Lösung, aber keine elegante unglücklich Geht das auch anders?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
isPrime=[]
for x in range(1,101):
	if x==0 or x==1:
		isPrime.append(False)
		continue
	if x==2 or x==3 or x==5:
		isPrime.append(True)
		continue
	if x%2==0 or x%3==0 or x%5==0:
		isPrime.append(False)
		continue
	l=0	
	for d in range(5,int(x**0.5)+1,2):
		if x%d==0:
			
			isPrime.append(False)
			l=1
			break
		continue	
	
	if l==0:	
		isPrime.append(True)
	
print(isPrime)
print(len(isPrime))		
25.12.2015 23:12
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

So würde ich es machen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
def isPrime(n):
	if (n < 2): return False
	i = 2
	while (i*i <= n):
		if n%i == 0: return False
		i += 1
	return True

start = int(raw_input("Startwert: "))
end = int(raw_input("Endwert: "))
for i in range(start, end+1):
	print isPrime(i)

Beachte, dass du mit den Teilern nur bis sqrt(n) gehen musst, nicht bis n/2

__________________
Syntax Highlighting fürs Board (Link)
26.12.2015 06:36 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
ed209
Routinier


Dabei seit: 07.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hi Kleiber,

Ich verstehe Deine Loesung ueberhaupt nicht. Kannst Du uns vielleicht erklaeren wie sie funktionieren soll und wir koennen dann schauen ob Du eventuell irgendwo einen Denkfehler oder einen Programmierfehler hast.

Gruss,
ED
26.12.2015 09:25 ed209 ist offline E-Mail an ed209 senden Beiträge von ed209 suchen Nehmen Sie ed209 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Kleiber schreibst zunächst für jede Zahl im Bereich 1-100 entweder True oder False in die Liste, je nachdem ob sie prim ist oder nicht.
Wenn die Zahl 0 oder 1 ist, ist sie offensichtlich nicht Prim, also schreibe False in die Liste
Die Zahlen 2, 3 und 5 sind Primzahlen, in dem Fall schreibe True
Trifft das nicht zu, ist die Zahl aber Vielfaches von 2, 3 oder 5, ist sie nicht prim, also schreibe False in die Liste
Hat nicht von alledem zugetroffen: gehe von 5 aus in 2er Schritten bis bis n/2 (aufgerundet) und führe eine Probedivision durch

Hier der Code von Kleiber nochmal leicht modifiziert:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
isPrime=[]
for x in range(1,101):
	if x==0 or x==1:
		isPrime.append(False)
	elif x==2 or x==3 or x==5:
		isPrime.append(True)
	elif x%2==0 or x%3==0 or x%5==0:
		isPrime.append(False)
	else:
		noDivisors = True
		for d in range(5,x//2+1,2):
			if x%d==0:
				noDivisors = False
				break
		isPrime.append(noDivisors)
	
print(isPrime)
print(len(isPrime))


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 26.12.2015 10:28.

26.12.2015 10:28 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Kleiber
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Danke an alle für die Hinweise. Euler hat meine Lösungsidee dann nochmal verbessert, sieht so besser aus Augenzwinkern
26.12.2015 11:31
Baumstruktur | Brettstruktur
Gehe zu:
Informatiker Board » Themengebiete » Praktische Informatik » Python Code