• 1
    数据输入输出
    • 任务
  • 2
    条件语句
    • 任务
  • 3
    for循环
    • 任务
  • 4
    字符串
    • 任务
  • 5
    while循环
    • 任务
  • 6
    列表
    • 任务
  • 7
    二维数组
    • 任务
  • 8
    字典
    • 任务
  • 9
    集合
    • 任务
  • 10
    函数与递归
    • 任务
  • к

课程 5. While cycle

难度:

任务«Denis accumulations»

💻 Python

杰尼斯 & mdash; 一名新手程序员,他梦想拥有一部功能强大的新智能手机用于工作和娱乐。他决定每月存下工资的20%用于购买。

rn

编写一个程序帮助杰尼斯计算他需要多长时间才能攒够所需金额。程序应要求用户输入两个数值:杰尼斯的月薪和智能手机的全价。

rn

& nbsp;

rn rn
  • 如果杰尼斯工资为零或负数,程序应报告无法攒钱购买智能手机。若每月存下工资的20%后,程序应显示相应信息。
  • rn
  • 其他情况下,程序应计算攒钱所需的完整年数和月数。
  • rn
  • 输出结果应符合语法规范。例如:"1年","2年","5年";"1个月","3个月","10个月"。
  • rn
  • 如果攒钱恰好需要n年(无余月)或恰好n个月(不足一年),则分别仅输出年数或月数。
  • rn

    输入格式

    第一行输入一个数字——月薪的金额。
    第二行输入一个数字——智能手机的总价。

    输出格式

    行 — 积累所需金额所需的月数或年数。

    示例

    输入

    50000
    25000

    输出

    访问将持续:3个月

    提示

    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
    测试 1
    测试 2
    测试 3
    测试 4
    测试 5
    测试 6
    测试 7
    测试 8
    测试 9
    测试 10
    开发者解答
    # Запрашиваем у пользователя исходные данные
    salary = float(input())
    smartphone_cost = float(input())
    
    # Проверяем, может ли Денис в принципе копить
    if salary <= 0:
        print("При такой зарплате Денис никогда не сможет накопить на смартфон.")
    else:
        # Рассчитываем, сколько Денис откладывает каждый месяц
        monthly_saving = salary * 0.20
    
        # Проверяем, может ли он купить смартфон с одной зарплаты
        if monthly_saving >= smartphone_cost:
            print("Денис может купить смартфон сразу, с одной зарплаты!")
        else:
            # Используем цикл while для симуляции процесса накопления
            accumulated_sum = 0  # Переменная для хранения накопленной суммы
            total_months = 0     # Счетчик месяцев
    
            while accumulated_sum < smartphone_cost:
                accumulated_sum += monthly_saving  # Каждый месяц добавляем к накоплениям
                total_months += 1                  # Увеличиваем счетчик месяцев
    
            # Рассчитываем полные годы и оставшиеся месяцы
            years = total_months // 12
            months = total_months % 12
    
            # Готовим строки для вывода с правильными окончаниями
            year_str = ""
            month_str = ""
    
            # Формируем строку для лет (используем условия для правильной грамматики)
            if years > 0:
                if years % 10 == 1 and years % 100 != 11:
                    year_str = f"{years} год"
                elif 2 <= years % 10 <= 4 and (years % 100 < 10 or years % 100 >= 20):
                    year_str = f"{years} года"
                else:
                    year_str = f"{years} лет"
    
            # Формируем строку для месяцев (используем условия для правильной грамматики)
            if months > 0:
                if months == 1:
                    month_str = "1 месяц"
                elif 2 <= months <= 4:
                    month_str = f"{months} месяца"
                else:
                    month_str = f"{months} месяцев"
    
            # Собираем и выводим итоговый результат
            result_parts = []
            if year_str:
                result_parts.append(year_str)
            if month_str:
                result_parts.append(month_str)
            
            print("Накопление займет: " + " и ".join(result_parts))

    🎉 恭喜! 🎉

    你出色地完成了任务!这是一个不小的挑战,但你找到了正确答案。你离编程大师又近了一步!继续保持,每一步都让你更强大。

    AD

    广告

    red-snake blue-snake green-snake

    正在运行代码...

    AI助手

    你好!我是你的编程助手。随时向我提问关于 Python 的问题——我可以解释函数、方法,并帮助你完成当前任务!