Walidacja kodu , po wpisaniu stringa....

0

Witam ponownie. Męczę się , z walidacją kodu (liczenie, tabliczka mnozenia)

#tabliczka mnożenie sposób 2


wybor = 't'
while wybor == 't': #Dopóki będzie wybierane t ,pętla zapętli się od nowa pytaniami o liczby
        def gracze(gracze):
            pobierz_liczbe = input(f' {gracze} podaj liczbę: ')
            return pobierz_liczbe
        def wykonaj_dodawanie(liczba1, liczba2):
            return int(liczba1) + int(liczba2)
        def gracze(gracz):
            pobierz_liczbe = input(f' {gracz} podaj liczbę: ')
            return pobierz_liczbe
        def wykonaj_mnozenie(liczba1,liczba2):
            return int(liczba1) * int(liczba2)

        print('Mnożenie: ')

        liczba1 = gracze('Adam')
        liczba2 = gracze('Piotr') 
        wynik = wykonaj_mnozenie(liczba1, liczba2)
        print('Wynik mnożenia to: ', wynik)

        #Dodawanie
        print('Dodawanie: ')

        liczba1 = gracze('Adam')
        liczba2 = gracze('Piotr') 
        wynik = wykonaj_dodawanie(liczba1, liczba2)
        print('Wynik dodawania to: ', wynik )

        wybor = input('Grasz dalej t/n: ' )
        if wybor == 'n':
            print('Dziękujemy za grę!')
            break

I teraz jak wpiszę przykładowo do Adama zamiast liczby, wpiszę jakiego stringa( fsfsfsfsflki ) to dostaję błąd, co jest zrozumiałe. Czy muszę dać drugą pętlę w pętli?, zeby walidować kod.? W jaki sposób to mogę zrobić? Chodziłoby mi o to , że jak wpisuję do Adama jakiś "string" to zamiast wyskoczenia błedu , mam ponowne zapytanie: Adam podaj liczbę: I tak w kółko, dopóki nie wpiszę liczby, cyfry.... . To samo się tyczy Piotra. Mam nadzieję, ze wiecie o co mi chodzi? Czy jest możliwośc zrobienia tego? Oczywiście z tą pętlą o zapytaniu dalszego udziału w "grze".

0

I tak w kółko, dopóki nie wpiszę liczby, cyfry.... .

W poprzednim poście "Pomoc w kodzie napisanym własnoręcznie."
https://4programmers.net/Forum/Python/354392-pomoc_w_kodzie_napisanym_wlasnorecznie?page=1
użytkownik Arthan stworzył własną wariację Twojego programu.
przyjrzyj się temu skryptowi a szczególnie co jest napisane pod komentarzem

pobieranie wyboru bramki od użytkownika

1

@pythonowiec74:

Uzupełnię do @nanoant20

W poprzednim wątku dostałeś upomnienie, żeby nie definiować funkcji w pętli, a na zewnątrz.
A znów to robisz.

Pewnych rzeczy się nie da osiągnąć "bo bardzo chcę", tylko tzreba przyjąć wiedzę i dobre praktyki z "ekosystemu", tj np postów, ale i książek.
Jakbyś wziął jakąś w rękę, a książki do Pythona są BARDZO sympatyczne, byś zobaczył, ze nikt takiego dziwoląga nie tworzy.

0

@nanoant20: Ok, pokombinuję z tym , ale to już jutro :)Co do książek , niestety nie mam czasu na nie..... Uczę się praktycznie od razu. Najwyzej nauka dłużej potrwa. Mam czas, "na bawienie się" :) Nauka = rozrywka u mnie :) Nic na siłę.

0

@nanoant20: Jutro pokombinuję jeszcze :) Dzięki za wskazówkę

0

Aby dokonać takiej walidacji musisz zapoznać się z Exception Handling w Pythonie.
Skorzystaj z dokumentacji Pythona.
Gdybyś nie zrozumiał czegoś w kodzie to pisz.

def gracze(gracze):
    pobierz_liczbe = ""
    while type(pobierz_liczbe) is str: # Sprawdzam dopóki  pobierz_liczbe jest stringiem
        try:
            pobierz_liczbe = int(input(f' {gracze} podaj liczbę: ')) # Staram zamienić się pobierz_liczbe na inta
        except ValueError:
            print("Podaj Liczbę!") # Jeżeli pobierz_liczbe nie da się zamienić na liczbę dostajemy błąd i wracamy do początku pętli
    return pobierz_liczbe
0

@Kola12: Dzięki, przeanalizuję to w wolnej chwili :) Co do czytania , to chodzi mi że nie mam czasu czytać książek (praca, dom itp...), zeby coś tam liznać programowania korzystam z pomocy wujka google, fora, dokumentacje Pythona (co kolego dał w linku). Co się czegoś nauczę, to próbuję tworzyć własne mini programiki wykorzystując "wiedzę" z tych programów co wczesniej utworzyłem. Tu coś dodam , tam coś odejmę i w ten sposób się uczę :) Każdy sposób na naukę jest w jakiś sposób dobry :) Pozdrawiam Was :)

0

@Kola12: Dzięki za link . Po modyfikacji mojego kodu na twój sposób:

wybor = 't'
while wybor == 't': 
    def gracze(gracze): 
        pobierz_liczbe = ''
        while type(pobierz_liczbe) is str:
            try:
                pobierz_liczbe = int(input(f'{gracze} podaj liczbę: '))
                
            except ValueError:
                print('Tylko liczby należy wpisać! ')
        return pobierz_liczbe

Działa, ale częsciowo... Nie przeskakuje mi na Gracz2 , tylko cały czas waliduje jednego użytkownika... Próbowałem z pętlą while True z dokumentacji Pythona, ale mam to samo co niżej... Albo bład w kodzie (błędów mi nie pokazuje), albo coś w kodzie brakuje jeszcze....

Gracz1 podaj swój wybór: 5
Gracz1 podaj swój wybór: 5
Gracz1 podaj swój wybór: gdfgdg
Gracz1 podaj swój wybór: 

Spróbuję tez walidować w inny sposób, na podstawie skryptu kolegi z bramkami, ale na razie chciałbym tu problem rozwiązać, a potem spróbuję tamtego sposobu.

1

Bez kodu źródłowego nie mam pojęcia co mogło pójść nie tak. Postarałem się przerobić trochę wersję twojego kodu i wydaje się, że wszystko działa.

def gracze(gracze): 
    pobierz_liczbe = ''
    while type(pobierz_liczbe) is str:
        try:
            pobierz_liczbe = int(input(f'{gracze} podaj liczbę: '))
        except ValueError:
             print('Tylko liczby należy wpisać! ')
    return pobierz_liczbe

def wykonaj_dodawanie(liczba1, liczba2):
    return liczba1 + liczba2

def wykonaj_mnozenie(liczba1,liczba2):
    return liczba1 * liczba2

wybor = 't'
while wybor == 't': # Dopóki będzie wybierane t ,pętla zapętli się od nowa pytaniami o liczby
        print('Mnożenie: ')
        liczba1 = gracze('Adam')
        liczba2 = gracze('Piotr') 
        wynik = wykonaj_mnozenie(liczba1, liczba2)
        print('Wynik mnożenia to: ', wynik)

        #Dodawanie
        print('Dodawanie: ')
        liczba1 = gracze('Adam')
        liczba2 = gracze('Piotr') 
        wynik = wykonaj_dodawanie(liczba1, liczba2)
        print('Wynik dodawania to: ', wynik )

        wybor = input('Grasz dalej t/n: ' )
        if wybor == 'n':
            print('Dziękujemy za grę!')
            break
0

@Kola12: Dzieki za kod. Poprawiłem swój i działa. Wiem , gdzie robiłem błędy . Cytuję kolegę @AnyKtokolwiek :

Uzupełnię do @nanoant20
W poprzednim wątku dostałeś upomnienie, żeby nie definiować funkcji w pętli, a na zewnątrz.
A znów to robisz. >

Za szybki Bil jestem, i nie zajarzyłem od początku. Postaram się dokładniejszy być w pisaniu kodu.

Tak bez trybu, chciałem się pochwalić na szybko małym, programikiem z parametrem: Exception Handling Skarbonka napisanym przeze mnie:

magazyn = []
print('       Max 5 razy można włożyć kasę do skarbonki.')
for c in range(5):  # 5 razy wykonuje się pętla
 
    while True:
        try:
            kwota = int(input('\nWłóż kwotę do skarbonki: '))
            break
        except ValueError:
            print('Błąd wpisywanie wartości. Wpisz kwotę liczbową: ')

    magazyn.append(int(kwota))
    print('Włożyłeś do skarbonki: PLN', magazyn)

    kwota_sumowa = sum(magazyn)
    print( 'Suma wszystkich oszczędności wynoszą: ', kwota_sumowa)

Wiem, że próżność przemawia przeze mnie. Ale musiałem :) Wiem, ze kod jest pewnie dla was banalny w prostocie. Ale cieszę się ,że cos mi wychodzi...

1 użytkowników online, w tym zalogowanych: 0, gości: 1