if n in range

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
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

Moin,

ich komm mir gerade ziemlich dumm vor...

Ich finde den Fehler einfach nicht, will sagen eigentlich sollte es nach meinem Verständnis gehen aber das tut es nicht.

Code: Alles auswählen

#!/usr/bin/python

var = raw_input("Enter number : ")

def range_validation( var ):
	if var in range(0,121):
		return 'Value is in Range'
	return 'Out of Range'

number = range_validation ( var )
print number
Eigentlich müsste doch jede Zahl zwischen 0-120 "Value is in Range" zurückgeben und alles andere "Out of Range".
Allerdings erhalte ich immer nur letzteres.
Was läuft hier falsch, bzw. wo ist mein Denkfehler?

Oder gibt es einen besseren Weg zu prüfen ob der Wert zwischen 0-120 liegt?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Schau dir doch mal den Typ von "var" an ;-)

Und für deinen Fall gibt es eine besseren Weg:

Code: Alles auswählen

if 0 <= var < 121: ...
Sebatian
Das Leben ist wie ein Tennisball.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Was falsch laeuft: `var` ist ein String und `range` gibt eine Liste von Zahlen zurueck, kann `var` also nie enthalten. Mindestens musst du also mal `var` in eine Zahl umwandeln.

Den besseren weg gibt es auch noch mit `0 <= var <= 120`. Wobei hier auch nicht-Ganzzahlen zulaessig sind.

Code: Alles auswählen

In [1]: def range_validation(n):
   ...:         return n.isdigit() and 0 <= int(n) <= 120
   ...: 

In [2]: range_validation("0")
Out[2]: True

In [3]: range_validation("0.5")
Out[3]: False

In [4]: range_validation("121")
Out[4]: False

In [5]: range_validation("42")
Out[5]: True
Waere mein aequivalenter (modulo deine Vermischung von Ausgabe und Funktionalitaet) Vorschlag.
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

Problem gelöst,

vielen Dank
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Was spricht bei ganzen Zahlen gegen ``x in xrange(1, 101)``?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
BlackJack

@jbs: Potentiell die Laufzeit.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

jbs hat geschrieben:Was spricht bei ganzen Zahlen gegen ``x in xrange(1, 101)``?
Probier mal folgendes:

Code: Alles auswählen

>>> n = -1
>>> n in xrange(100000000)
False
>>> 0 <= n < 100000000
False
Sowohl CPython als auch PyPy optimieren hier nicht und gehen stattdessen (zumindest ist stark davon auszugehen) tatsächlich den Vergleich von `n` mit allen im `xrange`-Objekt enthaltenen Zahlen durch, was zu entsprechend langer (und vor allem unnötiger) Wartezeit führt.
Antworten