Jestem w trakcie przerabiania książki Michaela Dawsona “Python dla każdego. Podstawy programowania” i utkwiłem w jednym zadań, przez co mam problem. Zadanie brzmi:
Zgodnie z książką wprowadzam następujący kod:
# Ćwiczenie 3. Kalkuator napiwku
r = int(input ("Jaka była kwota rachunku?"))
print ("Jeżeli chcesz dać mniejszy napiwek:", r % 15)
print ("\nJeżeli chcesz dać większy napiwek:", r % 20)
input ("\n\nAby zakończyć program naciśnij klawisz Enter")
r jest zmienną dotyczącą kwoty napiwku, jednak przy wprowadzeniu np. kwoty 100 wyświetla mi się:
Jaka była kwota rachunku?100
Jeżeli chcesz dać mniejszy napiwek: 10
Jeżeli chcesz dać większy napiwek: 0
Aby zakończyć program naciśnij klawisz Enter
Co oczywiście nie jest zgodne z prawdą. Próbowałem bez int przy zmiennej i innych sposobów i nadal nic. Proszę o pomoc no chyba że jestem aż taki głupi by tego nie pojąć.
Z Pythonem nie miałem do czynienia, ale “%” jest operatorem modulo (powszechnie, nie tylko w tym języku), czyli zwracającym resztę z dzielenia pierwszego operandu przez drugi. Procent to nic innego jak 1/100, a więc chcesz kwotę napiwku pomnożyć przez odpowiednio 15/100 i 20/200. Program działał dokładnie tak, jak go napisałeś:
r = int(input ("Jaka była kwota rachunku?"))
print ("Jeżeli chcesz dać mniejszy napiwek:", r * 0.15)
print ("\nJeżeli chcesz dać większy napiwek:", r * 0.20)
input ("\n\nAby zakończyć program naciśnij klawisz Enter")
To mi wtedy elegancko wyszło:
Jaka była kwota rachunku?100
Jeżeli chcesz dać mniejszy napiwek: 15.0
Jeżeli chcesz dać większy napiwek: 20.0
Aby zakończyć program naciśnij klawisz Enter
Ja rozwiązałem to zadanie w trochę inny sposób. Twój jest lepszy bo krótszy i wprowadza tylko jedną zmienną, ale mój też działa. Wklejam bo może dla kogoś takie rozwiązanie sprawy będzie odrobinę czytelniejsze.
rachunek = int(input("Podaj kwotę rachunku z restauracji: "))
Tak czy siak musi zostać zaalokowane miejsce w pamięci pod wynik, w pierwszym przypadku niejawnie w Twoim jawnie. Oba rozwiązania są równoważne. Twoje nawet lepsze ze względu że gdy będziemy chcieli np. później wykorzystać wynik lub wcześniej (przed wyświetleniem) nie trzeba wprowadzać żadnych zmian w kodzie co minimalizuje popełnienie błędu i wysypanie się aktualnej funkcjonalności.
W tak trywialnym przypadku to żaden problem, ale dobre praktyki warto wpajać od samego początku i myśleć przede wszystkim o takich rzeczach.