🎉 恭喜! 🎉
你出色地完成了任务!这是一个不小的挑战,但你找到了正确答案。你离编程大师又近了一步!继续保持,每一步都让你更强大。
安娜梦想着度假,并希望为此攒够一定金额。她以一定的年薪起步,并规划自己的储蓄。每年,她的雇主承诺加薪,她的年薪比上一年增长15%。安娜非常自律,决定每年年底存下年薪的正好10%。
编写一个程序,帮助安娜计算她需要多少整年才能攒够所需金额。程序应询问用户安娜当前的年薪以及度假的费用。
附加条件: 在输出主要结果(年数)之后,程序应询问用户是否希望查看按年划分的详细报告。如果用户输入“是”,程序必须输出每年的年份编号、该年的年薪、该年存下的金额以及年底的总累积金额。
安娜的年薪(数字,float)
奖金(数字,float)
详细报告问题的答案(字符串,str)
主要结果:一行信息,说明需要多少年(字符串, str)
附加结果(可选):每年储蓄的详细报告(字符串, str)
100000
50000
是
安娜需要5年时间存钱去度假。
想查看详细的年度报告吗?(是/否):
--- 年度报告 ---
第1年:工资100,000.00,存下10,000.00,累计总额10,000.00
第2年:工资115,000.00,存下11,500.00,累计总额21,500.00
第3年:工资132,250.00,存下13,225.00,累计总额34,725.00
第4年:工资152,087.50,存下15,208.75,累计总额49,933.75
第5年:工资174,900.62,存下17,490.06,累计总额67,423.81
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.
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:
whileloop is executed as long as the index < len(numbers) condition is true.target).break statement. The else block is ignored in this case.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.
break is missingIf 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.
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.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.")
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.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.
# Запрашиваем у пользователя начальные данные
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}")
🎉 恭喜! 🎉
你出色地完成了任务!这是一个不小的挑战,但你找到了正确答案。你离编程大师又近了一步!继续保持,每一步都让你更强大。
AD
广告
正在运行代码...