• 1
    Eingabe und Ausgabe
    • Aufgaben
  • 2
    Bedingungen
    • Aufgaben
  • 3
    For-Schleife
    • Aufgaben
  • 4
    Zeichenketten
    • Aufgaben
  • 5
    While-Schleife
    • Aufgaben
  • 6
    Listen
    • Aufgaben
  • 7
    2D-Arrays
    • Aufgaben
  • 8
    Wörterbücher
    • Aufgaben
  • 9
    Mengen
    • Aufgaben
  • 10
    Funktionen und Rekursion
    • Aufgaben
  • к

Lektion 5. While cycle

Schwierigkeit:

Aufgabe«Perfekte Zahl»

💻 Python

Du strebst danach, der geheimen "Bruderschaft der digitalen Pythagoreer" beizutreten. Diese uralte Gesellschaft glaubt, dass die Zahlen das Universum regieren und besondere, "perfekte" Zahlen den Schlüssel zur Harmonie der Welt bewahren. Um deinen Wert zu beweisen, musst du den "Test der Perfektion" bestehen.

Das Programm erhält eine Folge von natürlichen Zahlen als Eingabe, jede in einer neuen Zeile. Die Eingabe endet mit der Zahl 0. Für jede eingegebene Zahl (außer 0) muss bestimmt werden, ob sie perfekt ist.

Hinweis: Eine vollkommene Zahl — Dies ist eine natürliche Zahl, die gleich der Summe all ihrer echten Teiler ist (das heißt, aller positiven Teiler, die von der Zahl selbst verschieden sind). Zum Beispiel sind für die Zahl 6 die echten Teiler 1, 2 und 3. Ihre Summe ist 1 + 2 + 3 = 6, was bedeutet, dass 6 — eine vollkommene Zahl ist.

Eingabeformat

Es werden Einträge an die Eingabe des Programms übergeben, jeder in einer neuen Zeile. Die letzte Zahl in der Sequenz ist immer 0. Diese Zahl & mdash; ein Zeichen für das Ende der Eingabe, und es ist nicht notwendig, sie zu verarbeiten.

Ausgabeformat

Für jede Zahl aus der Eingabesequenz (außer 0) muss das Programm in einer separaten Zeile das Wort "yes" ausgeben, wenn die Zahl vollständig ist, und "no", wenn nicht.

Beispiel

Eingabe

6
28
12
1
0

Ausgabe

Ja
Ja
Nein
nein

Hinweis

There will be no clue here, decide for yourself!

main.py
Test 1
Test 2
Test 3
Test 4
Test 5
Test 6
Test 7
Test 8
Test 9
Test 10
Entwicklerlösung
def is_perfect(n):
    """
    Проверяет, является ли число n совершенным.
    """
    # Совершенные числа по определению больше 1.
    if n <= 1:
        return False

    # Начинаем сумму с 1, так как 1 - делитель любого числа.
    sum_of_divisors = 1
    
    # Ищем делители до квадратного корня из n.
    # Это эффективный способ, так как делители ходят парами.
    # Например, для 28: (2, 14), (4, 7).
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            sum_of_divisors += i
            # Добавляем парный делитель, если он не равен самому корню
            if i * i != n:
                sum_of_divisors += n // i

    # Сравниваем сумму делителей с исходным числом.
    return sum_of_divisors == n

# Основной цикл программы
while True:
    try:
        number = int(input())
        # Если ввели 0, завершаем программу.
        if number == 0:
            break
        
        if is_perfect(number):
            print("YES")
        else:
            print("NO")
            
    except (ValueError, EOFError):
        # Обработка некорректного ввода или конца файла
        break

🎉 Glückwunsch! 🎉

Du hast die Aufgabe hervorragend gelöst! Es war schwierig, aber du hast die Lösung gefunden. Du bist dem Meister einen Schritt näher! Mach weiter so.

AD

Werbung

red-snake blue-snake green-snake

Führe deinen Code aus...

KI-Assistent

Hallo! Ich bin dein Programmier-Assistent. Stelle mir beliebige Fragen zu Python — ich erkläre Funktionen, Methoden und helfe dir bei der aktuellen Aufgabe!