Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Python: Vaikea luvunarvaus

Sivun loppuun

Antti Laaksonen [07.06.2004 00:10:44]

#

Luvun arvaus on hyvin tavallinen harjoitusohjelma uutta ohjelmointikieltä opiskeltaessa. Ohjelma kertoo joka arvauksen jälkeen, onko luku suurempi, pienempi vai juuri sama kuin arvattava luku. Ohjelma päättyy, kun käyttäjä arvaa luvun oikein.

Tässä on Pythonilla toteutettu luvunarvaus, jossa on kuitenkin muuan erikoisuus. Oikeaa lukua ei näet ole valittu arvauksen alussa, vaan ohjelma muuttaa lukua aina käyttäjän arvauksen mukaan niin, että arvaaminen kestää mahdollisimman kauan. Etevinkään arvaaja ei saa milloinkaan lukua selville nopeammin kuin seitsemällä arvauksella. Varsin kiero ohjelma siis!

# -*- coding: latin1 -*-
print 'Arvaa luku väliltä 1 - 100!'
ala = 1
yla = 100
oikein = 0
# kysellään lukuja, kunnes käyttäjä arvaa "oikean" luvun
while not oikein:
    luku = int(raw_input())
    # jos luku on selvästi rajojen ulkopuolella
    if luku > yla:
        print 'Liian suuri.'
    elif luku < ala:
        print 'Liian pieni.'
    else:
        # jos rajojen välissä on enää yksi luku, ja arvattu
        # luku on se, on pakko tunnustaa luku oikeaksi
        if yla > luku and ala < luku and yla - ala == 2:
            print 'Oikein arvattu!'
            oikein = 1
        # muussa tapauksessa muutetaan rajoja niin, että
        # mahdollisimman paljon lukuja jää vielä jäljelle
        elif yla - luku > luku - ala:
            print 'Liian pieni.'
            ala = luku
        else:
            print 'Liian suuri.'
            yla = luku

Gwaur [07.06.2004 12:13:51]

#

Antti Laaksonen kirjoitti:

Varsin kiero ohjelma siis!

Minä en katso kieroon, kuten Runtelin kaveri kerran sanoi :P

Gwaur [07.06.2004 12:14:21]

#

äh, ongelmia tagien kanssa eikä voi muokata

nikkenakkerton [15.05.2005 00:26:31]

#

hieno ohjelma! juuri tälläsiä python "ohjelmaesimerkkejä" olen etsiskellyt

:D

toni1992 [11.01.2006 14:23:46]

#

lainaus:

hieno ohjelma!

:D

joo aika näppärä

moptim [12.01.2007 18:09:33]

#

Private Sub Form_Load()
MsgBox "Arvaa luku väliltä 1 - 100!"
ala = 1
yla = 100
oikein = 0
' kysellään lukuja, kunnes käyttäjä arvaa "oikean" luvun
While Not oikein
    luku = Int(InputBox("Arvaa luQ."))
    ' jos luku on selvästi rajojen ulkopuolella
    If luku > yla Then
        MsgBox "Liian suuri."
        ElseIf luku < ala Then
        MsgBox "Liian pieni."
    Else
        ' jos rajojen välissä on enää yksi luku, ja arvattu
        ' luku on se, on pakko tunnustaa luku oikeaksi
        If yla > luku And ala < luku And yla - ala = 2 Then
            MsgBox "Oikein arvattu!"
            oikein = True
        ' muussa tapauksessa muutetaan rajoja niin, että
        ' mahdollisimman paljon lukuja jää vielä jäljelle
        ElseIf yla - luku > luku - ala Then
            MsgBox "Liian pieni."
            ala = luku
        Else
            MsgBox "Liian suuri."
            yla = luku
        End If
    End If
  Wend
End Sub

Porttasin VB:lle \o/

Dude [01.08.2007 13:13:20]

#

aika hyvä. porttasin qbeelle.

Chiman [12.06.2015 11:28:11]

#

Pythonissa vertailuoperaattorit voi ketjuttaa matematiikasta tuttuun tapaan. Tällöin koodivinkin rivi

if yla > luku and ala < luku and yla - ala == 2:

voidaan yksinkertaistaa muotoon

if ala < luku < yla and yla - ala == 2:

Lisätietoa:
https://docs.python.org/2/reference/expressions.html#not-in
https://docs.python.org/3/reference/expressions.html#not-in


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta