• 1
    Entrada y salida de datos
    • Tareas
  • 2
    Condiciones
    • Tareas
  • 3
    Bucle for
    • Tareas
  • 4
    Cadenas de texto
    • Tareas
  • 5
    Bucle while
    • Tareas
  • 6
    Listas
    • Tareas
  • 7
    Matrices 2D
    • Tareas
  • 8
    Diccionarios
    • Tareas
  • 9
    Conjuntos
    • Tareas
  • 10
    Funciones y recursión
    • Tareas
  • к

Lección 5. While cycle

Dificultad:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Tarea«Vacaciones tan esperadas»

💻 Python

Anna sueña con unas vacaciones y quiere acumular una cierta cantidad para ello. Comienza con un salario anual determinado y planifica sus ahorros. Cada año, su empleador promete un aumento, y su salario se incrementa en un 15% en comparación con el año anterior. Anna es muy disciplinada y decide ahorrar exactamente el 10% de su salario anual al final de cada año.

Escriba un programa que ayude a Anna a calcular cuántos años completos le tomará acumular la cantidad necesaria. El programa debe preguntar al usuario el salario anual actual de Anna y el costo de las vacaciones.

Condición adicional: después de mostrar el resultado principal (el número de años), el programa debe preguntar al usuario si desea ver un informe detallado por año. Si el usuario ingresa sí, el programa debe mostrar para cada año su número, el salario de ese año, cuánto se ahorró y cuál fue el monto total de ahorros acumulados al final del año.

 

Formato de entrada

Salario anual de Anna (número,   float)
(Número,   float)
La respuesta a la pregunta de un informe detallado (cadena,   str)

Formato de salida

Resultado principal: una línea con información sobre cuántos años tomará (línea,   str )
Resultado adicional (opcional): informe detallado para cada año de ahorro (líneas,   str )

Ejemplo

Entrada

100000
50000
Sí

Salida

Anna tardará 5 años en ahorrar para las vacaciones.
¿Quieres ver un informe anual detallado? (sí/no):  
--- Informe anual ---
año 1: salario 100,000.00, se ahorró 10,000.00, total acumulado 10,000.00
año 2: salario 115000.00, se ahorró 11500.00, total acumulado 21500.00
año 3: salario 132250.00, se ahorró 13225.00, total acumulado 34725.00
año 4: salario 152087.50, se ahorró 15208.75, total acumulado 49933.75
año 5: salario 174900.62, se ahorró 17490.06, total acumulado 67423.81

Pista

While in python

In the Python programming language, the while loop construction can have an optional else block. This block is executed only when the loop completes in its natural way, that is, when its condition becomes false, and not as a result of a forced interruption using the break operator.

Syntax:

while condition:
    # the body of the loop
    # ...the code that runs on each iteration...
else:
    # else block
    # ...the code that is executed if the loop ended without a break...

You can think of the else block as a "plan B": it is triggered if the main goal within the loop (which is usually completed through a break) has not been achieved.

Usage example: Searching for an element

Consider a classic problem where we search for a number in a list. If a number is found, we immediately break the loop using break. If we have checked all the elements and still haven't found what we are looking for, the else block is executed.

numbers = [1, 2, 3, 4, 5]
target = 8 # Let's try to find a number that is not in the list.

index = 0
while index < len(numbers):
    if numbers[index] == target:
        print(f"Success! {target} found at {index}.")
break # Goal reached, exit the loop
    index += 1
else:
    # This block will be executed because break was not called
    print(f"The search is completed. {target} not found in the list.")

How it works:

  1. The whileloop is executed as long as the index < len(numbers) condition is true.
  2. Inside the loop, we check whether the current element is equal to the desired one (target).
  3. If we find a value, a success message is displayed and the loop is immediately interrupted by the break statement. The else block is ignored in this case.
  4. If the loop reaches the end (checked all the elements), it means that break has never worked. The index < len(numbers) condition becomes false, and then the else block is executed, reporting a failed search.

A useful tip: Using while...else helps to avoid "flagged" variables. Without this block, the code would look like this:

# Alternative version with "flag"
numbers = [1, 2, 3, 4, 5]
target = 8
found = False # Flag variable

index = 0
while index < len(numbers):
    if numbers[index] == target:
        found = True
        break
    index += 1

if found:
    print(f"Success! {target} found.")
else:
print(f"Search completed. {target} not found in the list.")

As you can see, the while...else construction makes the code cleaner, more concise, and more "Pythonic", eliminating the need to manually control the flag.

If break is missing

If there is no break operator in the body of the while loop, then the else block will always be executed after the loop ends.

count = 0
while count < 3:
print(f"Iteration number {count}")
count += 1
else:
print("The loop ended naturally, so the else block is executed.")

Here, the while loop runs until count is less than 3. As soon as count becomes 3, the loop condition becomes false, and control is transferred to the else block.

Important nuances

  • What about continue? The continue operator does not interrupt the loop, but only ends the current iteration ahead of schedule. It does not affect the execution of the else block in any way.
  • If the loop was never executed? If the while condition is initially false, the loop body will not be executed even once. However, the else block will still run, since the loop ended "normally" (it was not interrupted via break).
value = 10
while value < 5: # The condition is immediately false
    print("This text will never be printed")
else:
print("The cycle didn't even start, but it ended normally, so else worked.")
  • This also works for for loops! The same logic applies to for...else loops. The else block after for is executed if the cycle has passed through all the elements and has not been interrupted using break.

Output

The while...else construction is a powerful and elegant Python tool. It is ideal for situations where you need to perform an action only if the loop has completed its work completely without being interrupted. This is especially useful in search algorithms, condition checking, or when working with data streams, where break signals a special event, and else indicates a regular termination without any.

main.py
Prueba 1
Prueba 2
Prueba 3
Prueba 4
Prueba 5
Prueba 6
Prueba 7
Prueba 8
Prueba 9
Prueba 10
Solución del desarrollador
# Запрашиваем у пользователя начальные данные
initial_salary = float(input())
vacation_cost = float(input())

# Проверяем корректность введенных данных
if initial_salary <= 0 or vacation_cost <= 0:
    print("Ошибка: Зарплата и стоимость отпуска должны быть положительными числами.")
else:
    # Инициализация переменных для цикла
    current_salary = initial_salary  # Текущая годовая зарплата
    total_savings = 0.0              # Общая сумма накоплений
    years = 0                        # Счетчик лет
    
    # Список для хранения детальной информации по годам
    yearly_details = []

    # Цикл while работает, пока накопленная сумма меньше стоимости отпуска
    while total_savings < vacation_cost:
        years += 1  # Увеличиваем счетчик лет на 1
        
        # Рассчитываем, сколько денег будет отложено в этом году (10%)
        saved_this_year = current_salary * 0.10
        
        # Добавляем отложенные деньги к общей сумме накоплений
        total_savings += saved_this_year
        
        # Сохраняем детали этого года для возможного отчета
        yearly_details.append((years, current_salary, saved_this_year, total_savings))
        
        # Увеличиваем зарплату на 15% для следующего года
        current_salary *= 1.15

    # Выводим основной результат
    print(f"Анне потребуется {years} лет, чтобы накопить на отпуск.")
    
    # Спрашиваем пользователя, нужен ли детальный отчет
    show_details = input("Хотите увидеть подробный годовой отчет? (да/нет): ")
    
    # Условие для вывода детального отчета
    if show_details.lower() == 'да':
        print("\n--- Годовой отчет ---")
        # Цикл for для вывода информации по каждому году
        for detail in yearly_details:
            year, salary, saved, total = detail
            # Выводим отформатированную строку с данными за год
            print(f"Год {year}: Зарплата {salary:.2f}, Отложено {saved:.2f}, Всего накоплено {total:.2f}")

🎉 ¡Felicidades! 🎉

¡Has resuelto la tarea brillantemente! Era un reto difícil, pero encontraste la solución correcta. ¡Estás un paso más cerca de dominar la programación! Sigue así, cada etapa superada te hace más fuerte.

AD

Publicidad

red-snake blue-snake green-snake

Ejecutando tu código...

Asistente de IA

¡Hola! Soy tu asistente de programación. Hazme cualquier pregunta sobre Python — puedo explicarte funciones, métodos y ayudarte con la tarea actual.