Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Poprawicie mój pierwszy kod w pythonie?

09.10.2018 16:34
PATORIKKU
1
PATORIKKU
143
jak trwoga to do Boga
Image

Poprawicie mój pierwszy kod w pythonie?

Uczę się obsługi pythona. Szukam sobie jakiś problemów i staram się je zapisać. Stworzyłem jeden z pierwszych programów w którym podaje się imię oraz wiek i program ma za zadanie się przywitać, a także powiedzieć ile to czasu upłynęło od lub upłynie do 18stych urodzin.

Program jest prosty. Problem mam z inną sytuacją. Chciałbym żeby:
1) jak ktoś poda źle imię, czyli będą w nim liczby/znaki specjalne to żeby wyskoczył komunikat np. "Błędnie wpisane imię" i aby ponownie wyświetliła się opcja z wpisaniem imienia
2) to samo dotyczy wieku, program crashuje mi za każdym razem jak wpiszę literę, a chciałbym komunikat, że "Błędny wiek, podaj ponownie"
3) to samo przy ponownym uruchomieniu programu, jest opcja "tak" i "nie", a przy wpisaniu czegokolwiek innego miałby się pojawić komunikat, że "Proszę wpisać tak lub nie"

Pomożecie? Poniżej kod z programem, który napisałem:

spoiler start


#program in function
def program():
#welcome
print("Witaj w programie!")
#name
name = input("Podaj swoje imię:\n")
print("Witaj", name)
#age
age = int(input("Ile masz lat?\n"))
if age == 18:
print("Gratuluję. Jesteś pełnoletni!")
elif age >= 18:
print("Jesteś pełnoletni od",age-18,"lat")
else:
print("Skończysz 18 lat za",18-age,"lat")
#repeat
def repeat():
repeat = input ("Spróbować ponownie? tak/nie\n").lower()
if repeat == "tak":
program()
elif repeat == "nie":
print("KONIEC")
exit
else:
print("Wpisz tak lub nie!")
repeat()
program()

spoiler stop

post wyedytowany przez PATORIKKU 2018-10-09 16:37:30
09.10.2018 16:58
hopkins
2
odpowiedz
hopkins
212
Zaczarowany
09.10.2018 17:12
Orzołek
3
odpowiedz
1 odpowiedź
Orzołek
152
Haters gonna hate

Problem crashowania możesz rozwiązać na dwa sposoby :
- Sprawdzić pobraną wartość inputa przez usera zanim będziesz ją próbował parsować do np. inta i wtedy reagować w zależności od tego co wpisał
- Wprowadzić w kodzie tzw. obsługę błędów. Nie wiem jak w pythonie bo w nim pisałem dawno temu, ale większość języków ma tzw. bloki try-catch.
Funkcje sprawdzające najlepiej umieść gdzieś oddzielnie w programie (takie pisanie linijka po linijce bez funkcji i rozdzielenia programu to zła praktyka).

09.10.2018 20:24
3.1
poltar
176
Senator

Jest oczywiscie try:except, a typ danych chyba najlepiej bedzie sprawdzic assertami.

post wyedytowany przez poltar 2018-10-09 20:25:23
09.10.2018 21:54
Minas Morgul
4
odpowiedz
1 odpowiedź
Minas Morgul
240
Szaman koboldów
Image

PATORIKU, błędów tu strasznych nie ma i programik jest napisany w miarę poprawnie, tylko gdzieś spierniczyłeś indentację i w jednym miejscu kolejność jest trochę chyba na opak.
U mnie, jak wklejam to, co podałeś, to wszystko działa i nie pozwala na wpisanie nic, poza tak lub nie, ALE zmień kolejność tak, żeby na końcu wywoływał się najpierw program(), a później repeat(), bo inaczej jest bez sensu.

P.S. A jeśli chodzi o wiek, to program crashuje Ci się dlatego, że używasz age = int(input("ile masz lat?\n") bez żadnego warunku, co do dozwolonych znaków. Wystarczy, że dodasz jakiś warunek, by sprawdzał typ zmiennej i na tej podstawie podejmował decyzję.

post wyedytowany przez Minas Morgul 2018-10-09 22:01:58
10.10.2018 09:10
4.1
poltar
176
Senator

Z indentami jest w porzadku, twoj przyklad spowoduje jedynie ze:
1. zostanie wywolany "program"
2. nastepnie zostanie wywolany "repeat"
3. OPCJONALNIE raz jeszcze "program" i koniec.

On ma cos w rodzaju ukrytej petli - "program" wywoluje na koncu "repeat" ktora to opcjonalnie wywoluje "program". nie lubie takich konstrukcji, ale powinna dzialac.

I juak wspomnialem wyzej bardzo widac tu brak jakiejkolwiek kontroli bledow. Rzutowanie na inta wsadzic w "try", w "except" wywolac komunikat o blednie wprowadzonych danych i ponowic.

09.10.2018 23:35
5
odpowiedz
Lutz
173
Legend

uzywaj try: except: do obslugi ewentualnych bledow (jak wlasnie wspomniany age)
po pierwsze jest "pythonic" po drugie mozesz rozbudowac obsluge.

10.10.2018 06:27
siara000000
6
1
odpowiedz
siara000000
0
Pretorianin

8==>

Masz, jak wujek siara nauczy kodu to nie ma uja we wsi. Wiekszosc wspolczensych enginow hula na kodzie odemnie.

post wyedytowany przez siara000000 2018-10-10 06:29:50
Forum: Poprawicie mój pierwszy kod w pythonie?