funktion ob ergebnis ganzzahl ist
nein, aber du kannst das z.b. so überprüfen:Wobei Version zwei effizienter ist (zumindest ist es 4× so schnell …)
Code: Alles auswählen
int(a) == a
a % 1 == 0
Zuletzt geändert von nomnom am Sonntag 15. Januar 2012, 16:33, insgesamt 1-mal geändert.
Code: Alles auswählen
isinstance(ZAHL, int)
JustinJ hat geschrieben:Code: Alles auswählen
isinstance(ZAHL, int)
Code: Alles auswählen
>>> isinstance(1.0, int)
False
>>>
Zuletzt geändert von nomnom am Sonntag 15. Januar 2012, 16:34, insgesamt 2-mal geändert.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Fuer Floats gibt es noch die `is_integer` Methode
mit der die Absicht klarer wird.
Code: Alles auswählen
In [1]: f = 1.0
In [2]: f.is_integer()
Out[2]: True
In [3]: f = 2.3
In [4]: f.is_integer()
Out[4]: False
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
@nomnom: Deine Ansätze sollte man aber in eine Funktion "is_integer" verpacken, damit der Sinn dahiner erkennbar bleibt - wobei Python das schon eingebaut hat für floats:
Edit: Mist, cofi war schneller...
Code: Alles auswählen
In [7]: value = 1.234
In [8]: value.is_integer()
Out[8]: False
In [9]: value = 1.0
In [10]: value.is_integer()
Out[10]: True
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ich habe einfach mal in der Shell drauf los getippert - ipython sei dank, bekommt man das sofort angezeigtnomnom hat geschrieben:@Hyperion und cofi:
Die Methode kannte ich noch nicht. Google findet das auch nicht, wenn man nach python is integer sucht … Man findet die Seite, allerdings muss man die Seite dann auch noch absuchen …
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
ich hätte dazu schreiben sollen das ich das ganze in sage machen will. da funktioniert is_integer scheinbar nicht.
ich habs jetzt so gelöst:
ich habs jetzt so gelöst:
Code: Alles auswählen
def is_natural(x):
y = x
erg = int(x)
if(erg == x):
return true
else: return false
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
- Wieso bindest Du `x` an einen neuen Namen (`y`)?
- Wieso benutzt Du einmal eine neue Zeile für den if-Zweig und beim else-Zweig nicht?
- Wieso bindest Du `int(x)` an einen Namen, wenn Du diesen nur einmal nutzt?
- Wieso benutzt Du Klammern bei der if-Bedingung?
- Wieso benennst Du das ganze nicht in Anlehnung an die float-Methode?
- Wieso benutzt Du einmal eine neue Zeile für den if-Zweig und beim else-Zweig nicht?
- Wieso bindest Du `int(x)` an einen Namen, wenn Du diesen nur einmal nutzt?
- Wieso benutzt Du Klammern bei der if-Bedingung?
- Wieso benennst Du das ganze nicht in Anlehnung an die float-Methode?
Code: Alles auswählen
def is_integer(x):
if int(x) == x:
return true
else:
return false
# oder kompakter:
def is_integer(x):
return int(x) == x
# und vermutlich effizienter:
def is_integer(x):
return not x % 1
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Warum? Oh, warum nur?
Warum dann nicht gleich:
Oder warum nicht gleich:Zudem solltest du 4 Leerzeichen pro Einrückungsebene verwenden. Das würde es übersichtlicher machen.
Und Hyperion hat recht, seine Version ist vemutlich besser.
Außerdem wird erg == x zu True oder False ausgewertet, Du schreibst also letzlich sowas wie:dark123 hat geschrieben:Code: Alles auswählen
def is_natural(x): y = x # das führt zwar einen neuen Namen (y) ein, aber das referenzierte Objekt bleibt dasselbe. # Python kopiert Werte nicht bei einer Zuweisung. Außerdem wird y nirgends mehr verwendet. erg = int(x) # Das hättest du schon eine Zeile weiter oben machen können if(erg == x): # Lass die Klammern weg, die sind in Python nicht nötig. return true # Es muss True heißen, nicht true. else: return false # Es muss False heißen, nicht false.
Code: Alles auswählen
if True:
return True
else:
return False
Code: Alles auswählen
return erg == x
Code: Alles auswählen
def is_integer(x):
return x == int(x)
Und Hyperion hat recht, seine Version ist vemutlich besser.
In specifications, Murphy's Law supersedes Ohm's.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Damit ich mich nicht mit fremden Federn schmücke: nomnom hatte das vorgeschlagenpillmuncher hat geschrieben: Und Hyperion hat recht, seine Version ist vemutlich besser.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Weil heute Sonntag ist!pillmuncher hat geschrieben:Warum? Oh, warum nur?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
stimmt. das y brauch ich nicht.
und die return true bwz false kann ich mir auch sparen. hab das alles nur
schnell geschrieben ohne gross nachzudenken
nur:
def is_integer(x):
return not x % 1
funktioniert nicht. das liefert nämlich immer true.
und die return true bwz false kann ich mir auch sparen. hab das alles nur
schnell geschrieben ohne gross nachzudenken
nur:
def is_integer(x):
return not x % 1
funktioniert nicht. das liefert nämlich immer true.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Bitte verwende doch die Code-Tags, wenn Du Quellcode postest. Für Python-Code die speziellen Python-Code-Tags!
Bei mir klappt es. Wie hast Du das getestet? Die einzige Erklärung wäre die, dass `sage` anders castet, als ein normales Python das tun würde.dark123 hat geschrieben: funktioniert nicht. das liefert nämlich immer true.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
ja habs in sage getestet:
das war auch der grund, wieso ich nach einer funktion gesucht habe.
Code: Alles auswählen
definition:
def is_integer(x):
return not x % 1
aufruf:
test = 2/3
is_integer(test)
evaluate:
True
Weißt du, was Sage berechnet, wenn du 2/3 schreibst? Das ist eine Ganzzahl-Division, und weil die drei nicht in die zwei passt, kommt dabei null raus. Wenn du wirklich zwei drittel berechnen willst, musst du mindestens eine der Zahlen als float angeben:
Code: Alles auswählen
In [1]: 2/3
Out[1]: 0
In [2]: 2.0/3
Out[2]: 0.6666666666666666