Seite 1 von 1

if n in range

Verfasst: Mittwoch 20. Juni 2012, 12:19
von taake
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?

Re: if n in range

Verfasst: Mittwoch 20. Juni 2012, 12:26
von EyDu
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

Re: if n in range

Verfasst: Mittwoch 20. Juni 2012, 12:30
von cofi
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.

Re: if n in range

Verfasst: Mittwoch 20. Juni 2012, 12:56
von taake
Problem gelöst,

vielen Dank

Re: if n in range

Verfasst: Mittwoch 20. Juni 2012, 14:20
von jbs
Was spricht bei ganzen Zahlen gegen ``x in xrange(1, 101)``?

Re: if n in range

Verfasst: Mittwoch 20. Juni 2012, 15:01
von BlackJack
@jbs: Potentiell die Laufzeit.

Re: if n in range

Verfasst: Mittwoch 20. Juni 2012, 15:33
von snafu
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.