zadanie na liczbach

zadanie na liczbach
SA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Witam. Uczę się programowania w pythonie i mam dwa zadania. Napisałem dwa programy ale nie do końca działają poprawnie.
Pierwsze zdania:

Kopiuj
# Komputer zgaduje liczbę
import random

x = int(input("Wybierz liczbę od 1 do 100: "))
y = random.randint(1, 100)
while y != x:
    if y > x:
        print("Za duża...")
    elif y < x:
        print("Za mała...")
    else:
        print("Twoja liczba to:", y)
    y = random.randint(1, 100)
input("\n\nAby zakończyć program wciśnij enter.")

Instrukcje w warunkach if oraz elife są wyświetlane poprawnie, ale kiedy komputer odgadnie moją liczbę instrukcja print w warunku else nie jest wykonywana tylko komputer kończy pętle i program czeka na wciśnięcie enter.

Kopiuj
# Odgadnij liczbę w 10 próbach

import random

print("Witaj w programie odgadnij liczbę!")
print("Masz 7 prób aby odgadnąć liczbę jaką wybrałem")

liczba = random.randint(1, 100)
x = int(input("Wybierz liczbę: "))
próba = 10
while x != liczba:
    if próba == 0:
        print("Wykorzystałeś wszystkie próby")
        break
    elif x < liczba:
        print("Twoja liczba jest za mała")
    elif x > liczba:
        print("Twoja liczba jest za duża")
    else:
        print("Brawo! Chodziło mi o liczbę", x)
    x = int(input("Wybierz liczbę: "))
    próba -= 1

input("\n\nAby zakończyć program naciśnij enter")


W drugim zadaniu również ten sam problem. Program nie wykonuje jak poprzednio instrukcji print z warunku else. Gdy odgadnę liczbę po prostu kończy pętle i czeka na wciśnięcie enter.
Co robię źle?

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5549
3

Bo dzięki warunkowi w pętli while y != x: wykluczyłeś już przypadek else i nigdy tam nie wejdziesz. Przesuń print("Twoja liczba to:", y) poza pętlę i po problemie

SA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Dzięki. Działa. Wcześniej tak robiłem, ale myślałem, że to zły zapis.

Spearhead
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1007
2

Alternatywnie możesz sobie robić pętlę nieskończoną z while True i wychodzić z niej przy pomocy break (lub return jakbyś to wrzucił w funkcję)

Kopiuj
x = int(input("Wybierz liczbę od 1 do 100: "))
y = random.randint(1, 100)
while True:
    if y > x:
        print("Za duża...")
    elif y < x:
        print("Za mała...")
    else:
        print("Twoja liczba to:", y)
        break
    y = random.randint(1, 100)
input("\n\nAby zakończyć program wciśnij enter.")
SA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

O dzięki Spearhead twoja wersja jest dużo lepsza. O while true nie pomyślałem, a była w rozdziale.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
x = int(input("Wybierz liczbę od 1 do 100: "))
min = 1
max = 100
while True:
    y=int((max+min)/2)
    if y > x:
        max=y-1;
        print("Za duża...")
    elif y < x:
        min=y+1
        print("Za mała...")
    else:
        print("Twoja liczba to:", y)
        break
input("\n\nAby zakończyć program wciśnij enter.")

To nigdy nie przekroczy 7 prób.

SA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Ciekawa alternatywa. Nie znałem tego sposobu. W książce go nie zaprezentowali. Przyda się może w przyszłości.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.