Letzte Ziffer überprüfen

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
gocki77
User
Beiträge: 1
Registriert: Dienstag 23. Juni 2009, 11:49

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!
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Code: Alles auswählen

if (zahl % 10) in [0, 2, ...]:
  #code
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

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.
Dies ist keine Signatur!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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 ...
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Code: Alles auswählen

zahl[-1] not in "024568"
Das Leben ist wie ein Tennisball.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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"
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@jerch: and => or
jerch hat geschrieben:Bei

Code: Alles auswählen

zahl[-1] not in "024568"
könnte immernoch Gemüse mit einfliegen.
:?:
Das Leben ist wie ein Tennisball.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

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:
Antworten