Kaprekar-Zahlen in PythonPython

Python-Programme
Guest
 Kaprekar-Zahlen in Python

Post by Guest »

Ich löse ein Problem auf HackerRank und das Problem ist wie folgt:

Eine modifizierte Kaprekar-Zahl ist eine positive ganze Zahl n mit d Ziffern, so dass, wenn wir das Quadrat in zwei Teile aufteilen – ein rechtes Teil r mit d Ziffern und ein linkes Teil l, das die restlichen d oder d−1 Ziffern enthält, die Summe der Teile gleich der ursprünglichen Zahl ist (d. h. l + r = n).

Alternativ ist eine modifizierte Kaprekar-Zahl eine positive ganze Zahl n mit 2d Ziffern (wenn die Anzahl der Ziffern gerade ist) oder 2d + 1 Ziffern (wenn die Anzahl der Ziffern gerade ist). Die Anzahl der Ziffern ist ungerade), so dass, wenn wir das Quadrat in zwei Teile teilen, ein rechtes Teil r mit d oder d + 1 Ziffern und ein linkes Teil l mit den restlichen d Ziffern, die Summe der beiden Teile gleich ist zum Original Zahl.

Wir müssen Kaprekar-Zahlen innerhalb eines bestimmten Bereichs finden. Also habe ich den folgenden Code geschrieben:

Code: Select all

def checkIsKaprekar( num ):
string_num = str(num**2)
if num == int(string_num[:len(string_num)//2]) + int(string_num[len(string_num)//2:]):
return True

kaprekars = [ str(i) for i in range(int(input()),int(input())) if checkIsKaprekar(i) == True ]
print (' '.join(kaprekars))
Das Problem mit der obigen Lösung besteht darin, dass bei der Übergabe einstelliger Zahlen diese in eine Zeichenfolge umgewandelt werden, deren rechte Hälfte die Zahl selbst und die linke Hälfte „“ ist. '. Jetzt konvertiere ich diese Zeichenfolgen in int(), was eine Ausnahme auslöst.

Um diese Situation zu vermeiden, habe ich meinen Code wie folgt geändert:

Code: Select all

def checkIsKaprekar( num ):
string_num = str(num**2)
left_string = string_num[:len(string_num)//2]
right_string = string_num[len(string_num)//2:]
left_num = int(left_string) if left_string != '' else 0
right_num = int(right_string) if right_string != '' else 0
if num == left_num + right_num:
return True

kaprekars = [ str(i) for i in range(int(input()),int(input())) if checkIsKaprekar(i) == True ]
print (' '.join(kaprekars))
Aber mir gefällt dieser Code nicht, obwohl er den Zweck erfüllt. Wie kann ich meinen ursprünglichen Code optimieren, um die richtige Ausgabe zu erzeugen?

Link zur Frage: https://www.hackerrank.com/challenges/kaprekar-numbers

Gibt es eine Möglichkeit, den Standardwert 0 anzugeben, wenn die Zeichenfolge '' ist?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post