zadanie na liczbach

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:

# 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.

# 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?

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

0

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

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ę)

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.")
0

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

2
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.

0

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

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