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

Program w Pythonie

Cloud VPS
+1 głos
759 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 (256,600 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 958 wizyt
0 głosów
1 odpowiedź 630 wizyt
pytanie zadane 14 czerwca 2021 w Python przez mattaha Użytkownik (690 p.)
+1 głos
1 odpowiedź 205 wizyt

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 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

Kursy INF.02 i INF.03
...