Ich habe vor kurzem mit Python angefangen (komme von BASIC ).
Ich habe ein Programm zum errechnen von Primzahlen geschrieben.
Es errechnet mir Primzahlen unter 1.000.000 und schreibt mir dann alle Primzahlen in eine Datei (Primefile (prime.txt)). Soweit tut es das auch.
Jetzt will ich aber z.B. Primzahlen unter 2.000.000 ausrechnen und habe die unter 1 Million schon vorher berechnet und will sie nicht neu berechnen müssen.
Deswegen habe ich eine Datei (prim4File (prime4.txt)) in der die Primzahlen über 65535 in dieser Form: "prime4bytes = array('L', [...L,...L,...L])"
Diese Datei führe ich per exec aus und ich bekomme einen NameError zurück, schätzungsweise weil "prime4bytes" eine lokal im exec skript bleibt.
Und das geht auch nicht:
Code: Alles auswählen
prime4bytes = exec "array('L',[...L,...L,...L])"
Außerdem habe ich mir gedacht Rechenzeit zu sparen in dem ich sage wenn bei n/i i > n/2 n%i != 0 (Zeile 8, 29, 34) aber da bekomme ich falsche bzw. zu wenige Zahlen zurück. Warum?
hier mal der Code:
Code: Alles auswählen
from array import * #import array
prime2bytes = array('H',[3]) # 'H' is unsigned Integer; 2 not needed
append2 = prime2bytes.append
def prime2 (n):
for i in prime2bytes:
#if i > n/2:
#return False
if n % i == 0:
return False
append2(n)
map(prime2, xrange(5,65535,2)) # 256**2 == 65536; only uneven numbers needed
prime4File = open('prime4.txt','r')
if prime4File.read() != "":
exec prime4File.read()
highest = prime4bytes[-1] + 2
else:
prime4bytes = array('L')
highest = prime2bytes[-1] + 2
prime4File.close
append4 = prime4bytes.append
def prime4 (n):
for i in prime2bytes:
#if i > n/2:
#return False
if n % i == 0:
return False
for i in prime4bytes:
#if i > n/2:
#return False
if n % i == 0:
return False
append4(n)
print n
map(prime4, range(highest,1000000,2)) # 256**4 == 4294967296;
prime2bytes.insert(0,2) # insert 2
Primefile = open('prime.txt','w')
Primefile.write(str(prime2bytes).lstrip("array('H', [").rstrip("])"))
Primefile.write(", " + \
str(prime4bytes).lstrip("array('L', [").rstrip("])").translate(None,'L'))
prime4File = open('prime4.txt','w')
prime4File.write('prime4bytes = ' + str(prime4bytes))
PS: Ich habe noch ein paar algemeine Fragen;
kann ich Python Skripte zu ausführbaren Programmen kompilieren (sodass der Ausführende kein Python-Interpreter braucht)? Für Windows hab ich py2exe gefunden. Gibt es das auch für Linux; bzw. OS-X?
Wie handle ich Bilder? lib zum en/decoden von JPG; PNG; TGA etc.? und das so, dass ich die Bilder auf Canvas Objekte von TKinter Zeichnen kann?
MfG Tompazi
PPS: Sorry; ich hoffe, dass der Code jetzt leserlicher ist.