Heim >Backend-Entwicklung >Python-Tutorial >Logik- und Programmierübungen (Lösungen): Ansätze und Optimierung

Logik- und Programmierübungen (Lösungen): Ansätze und Optimierung

王林
王林Original
2024-08-21 06:09:10476Durchsuche

Ejercicios de logica y programacion (oluciones): Enfoques y Optimización

Angesichts dieser Übung: (von codewars.com)

Erstellen Sie eine Funktion, die das Quadrat jeder Ziffer einer Zahl zurückgibt.

Beim Eingeben der Funktion sollte beispielsweise die Zahl 702 4904 zurückgeben, da das Quadrat von 7 49 ist, das Quadrat von 0 ist 0 und das Quadrat von 2 ist 4. Wenn die Funktion eine Null empfängt, muss sie 0 zurückgeben.

Die grundlegende Herausforderung dieser Übung besteht darin, eine Ganzzahl Ziffer für Ziffer durchzugehen und ein Ergebnis als eine weitere Ganzzahl zurückzugeben.

Wie alles in der Programmierung ist es möglich, diese Übung auf viele Arten zu lösen. Lassen Sie uns das Problem zunächst mithilfe der Zahlenmanipulationseigenschaften in Python lösen. Anschließend erläutere ich eine andere, fortgeschrittenere Methode.

def square_digits(num):
    if num == 0:
        return 0
    result = ""
    while num > 0:
        num_sqr = (num % 10) ** 2 
        num = num // 10
        result = str(num_sqr) + result 
    return int(result)

In diesem Code bewerten wir zunächst, ob eine 0 empfangen wird, um eine 0 zurückzugeben, wie in der Anweisung angegeben. Dann initialisieren wir die Ergebnisvariable als leere Zeichenfolge, erstellen eine While-Schleife mit der Bedingung num > 0. Wir definieren die Variable num_sqr, die das Quadrat jeder empfangenen Ziffer ist. Mit num % 10 erhalten wir die letzte Ziffer der empfangenen Zahl und quadrieren diese dann mit **2.

  • Die Verwendung von num % 10 ist eine gängige Methode zum Extrahieren der letzten Ziffer einer Zahl.

  • Der Ausdruck num = num // 10 eliminiert die letzte Ziffer der Zahl und erhöht jede Ziffer.

Eine andere Möglichkeit, das Problem zu lösen, besteht darin, die Zahl in eine Zeichenfolge umzuwandeln und diese Zeichenfolge mit einer for-Schleife zu durchlaufen:

def square_digits(num):
    result = ""
    for digit in str(num):
        result += str(int(digit)**2)
    return int(result)

Dieser Code ist optimaler, er hat weniger Zeilen und die Durchquerung ist sehr gut verstanden, zusätzlich zu der Tatsache, dass es nicht notwendig ist, auszuwerten, ob er eine 0 erhält. In Python ist es möglich, ein Zeichenfolgenzeichen zu durchlaufen Zeichen mit einer for-Schleife. Wir verwenden diese Funktionalität, um die empfangene Zahl zu durchlaufen und sie mit str(num) in einen String umzuwandeln. Wir erstellen die Variable result als leere Zeichenfolge, mit der ein Zeichen verkettet wird, das das Ergebnis einer in eine Ganzzahl umgewandelten Ziffer ist und auf 2 erhöht wird, alles in eine Zeichenfolge umgewandelt. Dann geben wir das in eine Ganzzahl umgewandelte Ergebnis zurück.

  • Das Verketten von Zeichenfolgen innerhalb einer Schleife ist bei sehr großen Zahlen möglicherweise weniger leistungseffizient, ist aber für die meisten Anwendungsfälle vollkommen akzeptabel.

*Eine fortgeschrittenere und „elegantere“ Möglichkeit * ist die Verwendung von Understanding Generators und dem .join motodo. Ich stelle Ihnen zuerst den Code vor und wir werden ihn aufschlüsseln und diese Begriffe erklären.

def square_digits(num):
    return int(''.join(str(int(digit)**2) for digit in str(num)))

Dieser erste Code ist nicht sehr lesbar, wenn Sie die Konzepte nicht kennen
das macht es aus.

Der Ausdruck str(int(digit)**2) für die Ziffer in str(num) ist ein _generator _(Generator-Ausdruck), der jede Ziffer in der Zeichenfolgendarstellung der Zahl num durchläuft.
Jede Ziffer wird in eine Ganzzahl umgewandelt (int(digit)), quadriert (**2) und dann wieder in eine Zeichenfolge umgewandelt (str(...)). Dann nehmen Sie mit ''.join(...) eine Sequenz (in diesem Fall den Generator) und verketten alle Elemente zu einer einzigen Zeichenfolge. Hier werden alle quadratischen Ziffern zu einer einzigen Zeichenfolge ohne Trennzeichen zusammengefasst (da die Zeichenfolge zwischen den einfachen Anführungszeichen leer ist).

Wie wir sehen, zeigen die unterschiedlichen Lösungswege einer Übung den Kenntnisstand einer Sprache. Alle Lösungen sind korrekt, wenn sie die Tests bestehen, einige sind jedoch effizienter und lesbarer als andere. Die Wahl des Ansatzes hängt vom Kontext und den jeweiligen Prioritäten ab:

  • Lesbarkeit: Sie ist entscheidend, wenn andere Entwickler Ihren Code lesen und pflegen. Klarer, leicht verständlicher Code verringert das Fehlerrisiko und erleichtert die Wartung. ?

  • Effizienz: Wichtig bei der Arbeit mit großen Datenmengen oder bei Anwendungen, bei denen die Leistung entscheidend ist. Optimierter Code kann einen großen Unterschied in der Geschwindigkeit und im Ressourcenverbrauch bewirken. ?

  • Einfachheit: Für Fälle, in denen die schnelle und direkte Lösung des Problems im Vordergrund steht, etwa bei Prototypen oder didaktischen Übungen. Einfachheit erleichtert häufig das Debuggen und Testen von Code. ?

Bei der Entwicklung ist es wichtig, ein Gleichgewicht zwischen diesen Überlegungen zu finden und die Lösung an die spezifischen Bedürfnisse des Projekts oder der Aufgabe anzupassen.

Das obige ist der detaillierte Inhalt vonLogik- und Programmierübungen (Lösungen): Ansätze und Optimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn