• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program w Pythonie

Object Storage Arubacloud
+1 głos
523 wizyt
pytanie zadane 29 października 2021 w Python przez defałlt juzer Obywatel (1,140 p.)

Dzień dobry. Uczę się Pythona i chciałbym napisać program. Ma to być kalkulator posiadający opcje dodawania, odejmowania, mnożenia i dzielenia oraz potęgowania i modulo. Program po uruchomieniu ma wyświetlić listę opcji i pozwolić użytkownikowi na dokonanie wyboru. Następnie ma poprosić o pierwszą i drugą liczbę i wykonać odpowiednie działanie. Ma to powtarzać, aż zostanie wybrana opcja 7, czyli "Wyjdź". Wtedy program ma się zakończyć. Problem w tym, że, kiedy wpisuję numer danej opcji, to Python pokazuje jeszcze raz opcje, zamiast pytać o liczby do działania i obliczać. Bardzo proszę o pomoc. Poniżej wstawiam kod: 

user_choice = -1

liczba_pierwsza = -1
liczba_druga = -1
wynik = -1

while user_choice != 7:
    print("1. Dodawanie")
    print("2. Odejmowanie")
    print("3. Mnożenie")
    print("4. Dzielenie")
    print("5. Potęgowanie")
    print("6. Modulo")
    print("7. Wyjdź")

    user_choice = input("Wpisz liczbę: ")

    if user_choice == 1:
        liczba_pierwsza = input("Podaj pierwszą liczbę: ")
        liczba_druga = input("Podaj drugą liczbę: ")
        wynik = liczba_pierwsza + liczba_druga
        print("Wynik: ")
        print(wynik)

    if user_choice == 2:
        liczba_pierwsza = input("Podaj pierwszą liczbę: ")
        liczba_druga = input("Podaj drugą liczbę: ")
        wynik = liczba_pierwsza - liczba_druga
        print("Wynik: ")
        print(wynik)

    if user_choice == 3:
        liczba_pierwsza = input("Podaj pierwszą liczbę: ")
        liczba_druga = input("Podaj drugą liczbę: ")
        wynik = liczba_pierwsza * liczba_druga
        print("Wynik: ")
        print(wynik)

    if user_choice == 4:
        liczba_pierwsza = input("Podaj pierwszą liczbę: ")
        liczba_druga = input("Podaj drugą liczbę: ")
        wynik = liczba_pierwsza / liczba_druga
        print("Wynik: ")
        print(wynik)

    if user_choice == 5:
        liczba_pierwsza = input("Podaj pierwszą liczbę: ")
        liczba_druga = input("Podaj drugą liczbę: ")
        wynik = liczba_pierwsza ** liczba_druga
        print("Wynik: ")
        print(wynik)

    if user_choice == 6:
        liczba_pierwsza = input("Podaj pierwszą liczbę: ")
        liczba_druga = input("Podaj drugą liczbę: ")
        wynik = liczba_pierwsza % liczba_druga
        print("Wynik: ")
        print(wynik)

 

1
komentarz 30 października 2021 przez VBService Ekspert (253,340 p.)

@defałlt juzer, W czasie nauki programowania staraj się w miarę możliwości stosować: DRY - unikaj powtarzania tych samych części kodu.

możesz uzyskać ten sam efekt i nie powtarzać części kodu np. tak

( on-line )

user_choice = 0
while user_choice != 7:
    print("1. Dodawanie")
    print("2. Odejmowanie")
    print("3. Mnożenie")
    print("4. Dzielenie")
    print("5. Potęgowanie")
    print("6. Modulo")
    print("7. Wyjdź")
 
    user_choice = int(input("Wpisz liczbę: "))
    
    if user_choice in range(1, 7): # od 1 do 7, czyli 1,2,3,4,5,6
        liczba_pierwsza = liczba_druga = wynik = 0
        liczba_pierwsza = int(input("Podaj pierwszą liczbę: "))
        liczba_druga    = int(input("Podaj drugą liczbę: "))
        
        if user_choice == 1:
            wynik = liczba_pierwsza + liczba_druga
        elif user_choice == 2:
            wynik = liczba_pierwsza - liczba_druga
        elif user_choice == 3:
            wynik = liczba_pierwsza * liczba_druga
        elif user_choice == 4:
            if liczba_druga != 0: # nie dzielimy przez zero 0
                wynik = round(liczba_pierwsza / liczba_druga, 2)
            else:
                wynik = "nie dzielimy przez zero '0'"
        elif user_choice == 5:
            wynik = liczba_pierwsza ** liczba_druga
        elif user_choice == 6:
            wynik = liczba_pierwsza % liczba_druga
            
        print(f"Wynik: {wynik}\n")

 

3 odpowiedzi

+2 głosów
odpowiedź 29 października 2021 przez Inn Gaduła (4,300 p.)

Cześć,

W twoim kodzie jest parę błędów które uniemożliwiają na ten moment jego prawidłowe działanie.
Opisany przez Ciebie problem spowodowany jest tym fragmentem kodu:

user_choice = input("Wpisz liczbę: ")

W tej formie zapisu, wprowadzona przez użytkownika liczba zapisana zostaje jako ciąg znaków (string).
W celu pobrania od użytkownika liczby zmienimy powyższy zapis na:

user_choice = int(input("Wpisz liczbę: "))

Następny problem to wykonywanie operacji matematycznych na ciągach znaków, o ile operacja dodawania nie wyrzuci nam błędu ponieważ jest ona dozwolona to np. odejmowanie zakończy działanie programu.
Rozwiązanie jest analogiczne:

liczba_pierwsza = int(input("Podaj pierwszą liczbę: "))
liczba_druga = int(input("Podaj drugą liczbę: "))

Jak już program będzie działał tak jak autor miał na myśli, warto zwrócić uwagę na zjawisko redundancji.
Pierwsza wskazówką jak oczyścić twój kod z powtórzeń jest pobieranie obydwu liczb tylko raz, to samo możemy zrobić z wynikiem na końcu każdej iteracji.

0 głosów
odpowiedź 29 października 2021 przez Darki Obywatel (1,960 p.)

Cześć

Zmień

user_choice = input("Wpisz liczbę: ")

na

user_choice = int(input("Wpisz liczbę: "))
0 głosów
odpowiedź 1 listopada 2021 przez defałlt juzer Obywatel (1,140 p.)
Bardzo dziękuję! Pomogło.

Podobne pytania

0 głosów
3 odpowiedzi 517 wizyt
0 głosów
1 odpowiedź 416 wizyt
pytanie zadane 14 czerwca 2021 w Python przez mattaha Użytkownik (690 p.)
0 głosów
1 odpowiedź 461 wizyt
pytanie zadane 25 listopada 2021 w Python przez doskanoness Obywatel (1,240 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...