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.
Palindrom von Zahlen | Code funktioniert nicht
- __blackjack__
- User
- Beiträge: 14051
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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.
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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
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.
]
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")
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
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
@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.
@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 

`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
- pillmuncher
- User
- Beiträge: 1530
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
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))
Code: Alles auswählen
$ python3 palindrome.py 56765
56765 is a palindromic number!
$ python3 palindrome.py 56767
56767 is a not palindromic number!
In specifications, Murphy's Law supersedes Ohm's.