[Python] Operacje na procentach


(raanst) #1

Witam serdecznie.

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ąć.


(pio_95) #2

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ś:


(Fizyda) #3

Czy przypadkiem % nie oznacza reszty z dzielenia? Nie znam pytona, ale tutaj masz błąd:

.... r % 15)

i

... r % 20)

EDIT:

Ogólnie radzę się pouczyć matematyki przed rozpoczęciem nauki programowania.


(raanst) #4

Dziękuję za odpowiedź. Gdy zastosowałem kod:

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

Jeszcze raz stokrotne dzięki :slight_smile:


(Jacek Lubiszewski) #5

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. :slight_smile: Wklejam bo może dla kogoś takie rozwiązanie sprawy będzie odrobinę czytelniejsze.

rachunek = int(input("Podaj kwotę rachunku z restauracji: "))


(Fizyda) #6

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.