Anfängerskript macht nichts

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kornyclown

Ich will nich um den heißen Brei reden, hier is mein Skript:

Code: Alles auswählen

# Das Skript soll alle durch 2 teilbaren Zahlen ermitteln, im Rahmen des vom Nutzers angegebenen Zahlenspektrums.

print "Es sollen alle durch 2 teilbaren Zahlen ermittelt werden"
startzahl = raw_input("zwischen: ")
endzahl = raw_input("und: ")
while startzahl < (int(endzahl)+1):
	#der type int wird in die variable typ übergeben
	typ = type(1)
	#die startzahl wird durch 2 geteilt und der variablen ergebnis zugewiesen
	ergebnis = startzahl / 2.0
	#der datentyp von ergebnis wird ermittelt und der variblen typ_ergebnis übergeben
	typ_ergebnis = type(ergebnis)
	#es wird geprüft ob die datentypen von typ und typ_ergebnis gleich sind
	if typ==typ_ergebnis:
		#ist ergebnis vom datentyp int wird es ausgegeben und startzahl um 1 erhöht
		print ergebnis 
		startzahl += 1
	else:
		#ist ergebnis nicht vom datentyp int wird startzahl erhöht
		startzahl += 1 
Die Eingabe der Zahlen oben funktioniert super nur dann passiert garnichts mehr.
Warum?
Zuletzt geändert von kornyclown am Mittwoch 21. März 2012, 15:30, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Wenn du durch „2.0“ dividierst, kommt ja auch immer ein „float“ raus, und nie ein „int“. Typen vergleicht man außerdem mit der Funktion „isinstance“:

Code: Alles auswählen

>>> isinstance(1.0, int)
False
>>> isinstance(1.0, float)
True
>>> isinstance(2147483648, int)
False
>>> isinstance(2147483648, long)
True
>>> isinstance(2147483648, (int, long))
True
>>> (42/2.0).is_integer()
True
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

kornyclown hat geschrieben:

Code: Alles auswählen

[...]
startzahl = raw_input("zwischen: ")
endzahl = raw_input("und: ")
while startzahl < (int(endzahl)+1):
    [...]
Du vergleichst Äpfel mit Birnen.

Code: Alles auswählen

>>> "1" < 99
False
Der mit Kommentaren überfrachtete Code erschwert das Lesen ungemein. Kommentare richten sich an den fachlich gebildeten Leser und sind nicht dafür da, den Code prosaisch zu wiederholen.

Hier ist eine Variante für deine Aufgabe die vielleicht einen Kommentar vertragen könnte. Dieser Kommentar sollte aber die Idee des Algorithmus beschreiben und nicht wie "Es wird eine Schleife mit i als Zähler durchlaufen ..." aussehen.

Code: Alles auswählen

start = 3
end = 8

for i in xrange(start + (start % 2), end + 1, 2):
    print(i)
kornyclown

Cool, danke für die Antworten.

Stimmt jetzt wo du es sagst fällt mir auch auf dass da immer ein float bei rauskommen muss aber andersrum, wenn ich es durch "2" teilen würde, würde ja auch immer ein "int" bei rauskommen.
Die "isinstance" Funktion klingt in der Tat sehr interessant. Bei meiner Suche in der Python Doc hab ich sowas nich gefunden, muss als Anfänger aber auch gestehen das ich nich wirklich sicher bin wonach ich hätte suchen sollen.

Das mit den Äpfeln und Birnen meint wohl, dass ich startzahl auch noch auch in einen "int()" wrappen müsste, oder?
Die Kommentare sind auch eigentlich nur dafür da gewesen, sollte mein Anfängercode völlig falsch gewesen sein, dass man wenigstens hätte erlesen können was es denn hätte werden sollen. Aber ich bin dankbar für jeden Hinweis, der meinen Code professioneller macht. Ich werde drauf achten.
Antworten