Seite 1 von 1

Letzte Ziffer überprüfen

Verfasst: Dienstag 23. Juni 2009, 12:27
von gocki77
Moin,

ist mein erster Beitrag hier, also wenn ich Etwas falsch mache, bitte nicht meckern, sondern drauf aufmerksam machen :wink:

Mein Problem: ich möchte prüfen, ob die letzte Ziffer 0, 2, 4, 5, 6 oder 8 ist. Nur wenn dies nicht der Fall ist, soll das Programm weiter laufen. Ich habe zuerst folgenden Code verwendet:

Code: Alles auswählen

zahl = raw_input("Zahl:")
if not(zahl / 2 == zahl / 2.0 or zahl / 5 == zahl / 5.0):
  Weiterer Code
Ist die Zahl jedoch zu groß, führt dies zu einem OverflowError. Hat jemand einen besseren Code? Bin für jede Idee dankbar!

Verfasst: Dienstag 23. Juni 2009, 12:30
von ms4py

Code: Alles auswählen

if (zahl % 10) in [0, 2, ...]:
  #code

Verfasst: Dienstag 23. Juni 2009, 13:47
von Shaldy
Kannst theoretisch auch die selbstgeschriebene Liste [0, 2, 4, 6, 8] auch durch range(0, 9, 2) ersetzen. Ist hier zwar unnötig, dafür aber umso hilfreicher bei größeren Listen.

Verfasst: Dienstag 23. Juni 2009, 13:54
von cofi

Code: Alles auswählen

zahl = raw_input("Zahl: ")
if zahl[-1] not in ("0", "2", "4", "5", "6", "8"):
    ...
Der Code löst dein beschriebenes Problem (letzte Ziffer), aber dein Snippet widerspricht der Beschreibung ...

Verfasst: Dienstag 23. Juni 2009, 13:56
von EyDu

Code: Alles auswählen

zahl[-1] not in "024568"

Verfasst: Dienstag 23. Juni 2009, 13:56
von numerix
Shaldy hat geschrieben:Kannst theoretisch auch die selbstgeschriebene Liste [0, 2, 4, 6, 8] auch durch range(0, 9, 2) ersetzen. Ist hier zwar unnötig, dafür aber umso hilfreicher bei größeren Listen.
Im konkreten Fall hilft das aber nicht, weil die 5 auch gebraucht wird.
Obwohl ...

Code: Alles auswählen

range(0,5,2)+range(5,6)+range(6,9,2)

Verfasst: Dienstag 23. Juni 2009, 13:59
von EyDu
Wenn man die fünf nicht bräuchte, dann ist der Weg über eine Liste ganz schön unnütz. Dann hätte es auch ein %2 getan.

Verfasst: Dienstag 23. Juni 2009, 14:05
von numerix
EyDu hat geschrieben:Wenn man die fünf nicht bräuchte, dann ist der Weg über eine Liste ganz schön unnütz. Dann hätte es auch ein %2 getan.
Da anscheinend diese "Zahl" aber doch ohnehin über raw_input() eingelesen wird, gibt es doch nichts eleganteres als deinen Vorschlag

Code: Alles auswählen

zahl[-1] not in "024568"

Verfasst: Dienstag 23. Juni 2009, 14:18
von jerch
@gocki77:
Konvertierst Du zahl irgendwann zu integer?
Dann gine es so:

Code: Alles auswählen

...
if zahl%2 and zahl%5:
    ...
Bei

Code: Alles auswählen

zahl[-1] not in "024568"
könnte immernoch Gemüse mit einfliegen.

Verfasst: Dienstag 23. Juni 2009, 14:36
von EyDu
@jerch: and => or
jerch hat geschrieben:Bei

Code: Alles auswählen

zahl[-1] not in "024568"
könnte immernoch Gemüse mit einfliegen.
:?:

Verfasst: Dienstag 23. Juni 2009, 15:16
von jerch
EyDu hat geschrieben:and => or
Der OP möchte doch alle modulo2 und modulo5 behalten. :?:
(Da Modulo für alle außer Vielfache True liefert, wird ja auf Nichtteilbarkeit getestet.)

Gemüse meint:

Code: Alles auswählen

>>> '12345678;)'[-1] not in "024568"
True
Da der Bezeichner "zahl" heißt und gocki77 nach Wertebereichen selektiert, gehe ich davon aus, das er eigentlich an der Zahlentyprepräsentation interessiert ist. Deshalb würde ich erst die Eingabe prüfen (zu integer konvertieren) und dann den Bereich suchen.

Edit: Modulo-Quatsch korrigiert :oops: