Loops - Part 2 - Exercise: 03. Vacation
Здравейте!
Опитвам се да реша 3та задача по следния начин, но не се получава и не мога да си открия грешката:
# • Пари, нужни за екскурзията - реално число; # • Налични пари - реално число. # След това многократно се четат по два реда: # • Вид действие – текст с две възможности: "spend" или "save"; # • Сумата, която ще спести/похарчи - реално число. needed_money=float(input()) available_money=float(input()) days_spent=0 can_save=True saving_days=0 while available_money<=needed_money: action=input() amount_money=float(input()) saving_days += 1 last_action=action if action=='save': available_money += amount_money elif action=='spend': available_money -= amount_money if last_action=='spend': days_spent +=1 if days_spent>=5: can_save=False break if can_save==True: print(f"You saved the money for {saving_days} days.") else: print("You can't save the money.") print(f"{days_spent}")
Благодаря ви за помощта.
@Poddy
Причината, поради която броячите не се проверяват за равенство (==) се крие в четимостта и устойчивостта на кода.
Когато някой види сравнение за равенство на брояч, ще му се наложи да провери всички места, на които този брояч се модифицира, за да е сигурен, че няма как да прескочи точната стойност, докато използването на >, <, >=, <= гарантира, че логиката в if-a ще сработи. За кратка програма като тази може да не изглежда обосновано - наистина, губят се само няколко секунди, но при работа в голям проект, тези секунди стават минути и лесно може да се обърнат в часове, ако се гони някой бъг.
Под устойчивост на кода имам предвид, че ако - примерно - постъпи ново изискване при "spend" на сума над наличната, броячът да се увеличи с 2, кодът с равенство вече няма да работи и - което е още по-лошо - няма да работи само в някои случаи, а това са възможно най-трудните за откриване бъгове.
Ефектът от подобни промени (и проблемите. които могат да предизвикат) нарства заедно с обема на проекта и за да се избегнат, конвенцията във всички езици е броячите да не се проверяват за равенство, а за големина (за пример вижте как се използват в for циклите)
Много благодаря за помощта.
Решение на java?
@DesyKonstantinova
Тема за задачата на Java