Seite 1 von 1
Palindrom von Zahlen | Code funktioniert nicht
Verfasst: Donnerstag 21. November 2019, 19:10
von zynai
Hallo,
ich wollte fragen wieso der Code nicht funktioniert.
Ich programmier eigentlich Java und muss für ein Modul Übungsaufgaben erstellen in Python.
Ich will wissen, ob eine Zahl(Ganzzahl, also kein String) ein Palindrom ist.
Ich krieg ganze Zeit nur den else-Zweig ausgegeben.
Wo liegt das Problem?
Der Code:
-----------------------------------------------------------------------------
def checkPalindrom(number):
reverse = 0
numberCopy = number
while numberCopy!=0:
reverse = reverse *10 + numberCopy % 10
numberCopy = numberCopy / 10
return (number == reverse)
zahl = 2332
bool = checkPalindrom(zahl)
if bool:
print("Die Zahl ist ein Palindrom")
else:
print("Die Zahl ist kein Palindrom")
-----------------------------------------------------------------------------
Danke im Voraus.
Re: Palindrom von Zahlen | Code funktioniert nicht
Verfasst: Donnerstag 21. November 2019, 19:42
von __blackjack__
@zynai: Du möchtest Dir vielleicht mal das Ergebnis der Division anschauen. Das funktioniert in Python anders als in Java. Vielleicht möchtest Du auch gar keine Division als einzelne Operation sondern mal einen Blick auf die `divmod()`-Funktion werfen.
Namen schreibt man in Python klein_mit_unterstrichen. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Also die letzten beiden wie in Java.
`bool` ist der Name des eingebauten Typs für Wahrheitswerte, den sollte man nicht an etwas anderes binden. Ich sehe auch nicht ganz warum das Zwischenergebnis überhaupt an einen Namen binden sollte.
Re: Palindrom von Zahlen | Code funktioniert nicht
Verfasst: Donnerstag 21. November 2019, 19:55
von zynai
Hi, hab's jetzt so gemacht.
Hab mir in der while-Schleife die derzeitige Reverse-Zahl ausgeben lassen und da kamen Fließkommazahlen.
Bin also auf die Idee gekommen um zu Casten. Gibt es auch eine andere Möglichkeit (ohne Casting)?
Ohne Datentypen anzugeben in Python ist ja Fluch und Segen...
Danke im voraus.
Code: Alles auswählen
def check_palindrom(number):
reverse = 0
number_copy = number
while number_copy != 0:
reverse = int(reverse * 10) + int(number_copy % 10)
number_copy = int(number_copy / 10)
return (number == reverse)
zahl = 23732
if check_palindrom(zahl):
print("Die Zahl ist ein Palindrom")
else:
print("Die Zahl ist kein Palindrom")
]
Re: Palindrom von Zahlen | Code funktioniert nicht
Verfasst: Donnerstag 21. November 2019, 20:07
von Sirius3
In Python unterscheidet man Fließkommadivision / und Ganzzahldivision //.
Und wie __blackjack__ schon geschrieben hat, schau Dir mal divmod an.
Re: Palindrom von Zahlen | Code funktioniert nicht
Verfasst: Donnerstag 21. November 2019, 21:21
von ThomasL
Warum schwer wenn es auch einfach geht?
Code: Alles auswählen
def check_palindrom(number):
nstr = str(number)
return nstr == nstr[::-1]
print(check_palindrom(12321)) # True
print(check_palindrom(1)) # True
print(check_palindrom(555)) # True
print(check_palindrom(12)) # False
Re: Palindrom von Zahlen | Code funktioniert nicht
Verfasst: Donnerstag 21. November 2019, 21:31
von __deets__
@ThomasL: kommt halt drauf an, was man lernen soll. Deine Loesung ist in Python richtig und gut, und uebt dort mit slicing insbesondere umzugehen. Andere betonen lieber den Umgang mit Zahlen. Du waerst erstaunt, wieviele Leute es gibt, die mit so simplen arithmetischen Uebungen Schwierigkeiten haben.
Re: Palindrom von Zahlen | Code funktioniert nicht
Verfasst: Donnerstag 21. November 2019, 22:01
von zynai
@ThomasL: ich bin mir bewusst das es einfacher geht. Wollte aber das die Studenten ohne Strings arbeiten (wie oben beschrieben) und nur mit Zahlen. Bisschen zum aufwärmen um rein zukommen in die Programmiersprache. Hab noch vier andere Aufgaben die ich Ihnen stellen werde

Re: Palindrom von Zahlen | Code funktioniert nicht
Verfasst: Donnerstag 21. November 2019, 22:32
von Sirius3
`number_copy` ist in irreführender Name, denn da werden ja gar keine Kopien gemacht.
Code: Alles auswählen
def check_palindrom(number):
reverse = 0
original = number
while number != 0:
number, rest = divmod(number, 10)
reverse = 10 * reverse + rest
return original == reverse
Re: Palindrom von Zahlen | Code funktioniert nicht
Verfasst: Donnerstag 21. November 2019, 23:44
von pillmuncher
Code: Alles auswählen
#!/bin/env python3
#coding: utf-8
def is_palindrome(seq):
return seq == seq[::-1]
def is_palindromic_number(num, base):
digits = []
while num:
num, digit = divmod(num, base)
digits.append(digit)
return is_palindrome(digits)
def main(num):
if is_palindromic_number(num, 10):
print(f"{num} is a palindromic number!")
return 0
else:
print(f"{num} is a not palindromic number!")
return 1
if __name__ == '__main__':
import argparse, sys
parser = argparse.ArgumentParser(
description='Test if a given integer is palindromic.')
parser.add_argument('number', metavar='N', type=int, help='An integer.')
sys.exit(main(parser.parse_args().number))
Ergebnis:
Code: Alles auswählen
$ python3 palindrome.py 56765
56765 is a palindromic number!
$ python3 palindrome.py 56767
56767 is a not palindromic number!