Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Monty halli paradoks(programmi loogika,python) märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
armido15
HV kasutaja
armido15

liitunud: 24.12.2010



Autoriseeritud ID-kaardiga

sõnum 15.10.2013 21:21:02 Monty halli paradoks(programmi loogika,python) vasta tsitaadiga

Tervist!

Enda huvist koostasin programmi, mis simuleerib monty halli paradoksi.
Küsimus on rohkem programmi loogika, kui mingi errori kohta.
Üritan võimalikult lühidalt teha.

Listis on 3 väärtust[kits*2 ja auto].Kasutaja saab suvalise indexi.
Sealt on edasi 2 varianti
1.Kui see ühtib autoga, siis panen +1 kirja automaatselt muutujasse, kus ta oleks kaotanud ukse vahetamisega.
Teise variandi puhul saan eeldada, et kasutaja on valinud kitse.
2.Eemaldan listist väärtuse, mis ei võrdu autoga ja kasutaja poolt valitud uksega.Ehk, siis eemaldan, kas kitse1 või kitse2.
Alles jääb 2 ust(1 auto ja 2. kitsega.
Vahetan kasutaja valitud ukse indexi ära.
Lõpuks saan teada, mis oleks kasutaja saanud, kui ta oleks ukse vahetanud.

Kood ka, ehk aitab paremini selgitada.

Spoiler Spoiler Spoiler


Oskab keegi ka ideid anda, kuidas programmi automaatsemaks muuta, ehk kuidas saaks ilma suurte täiendusteta näiteks 5 ust oleks ja süsteem toimiks samamoodi ?
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
Dealer14
HV vaatleja

liitunud: 09.02.2004




sõnum 16.10.2013 03:09:56 vasta tsitaadiga

Su kood on jama ja ei tööta. Aga sellest pole hullu, me kõigi kood on alguses enamvähem sama olnud.

Ma ei aita su koodile funktsionaalsust lisada, vaid ütleksin ära mis on valesti:
Üldiselt tavaks on, et koodi kirjutatakse inglise keeles. See ei ole kivisse raiutud reegel, aga mida varema sa inglise keelele üle lähed seda lihtsam sul endal.
Su kood on läbimõtlemata ja raskesti loetav kordab ennast. Sa kasutad andmetüüpe raiskavalt, ning kordab ennast.

Iseenesest pole hullu, et tulevikus kergem oleks ma kirjutaks sellised märksõnad nagu:
Flowchart, Style Guide for Python Code, Efficient Use of Data Types

Ma kirjutasin su koodi ümber ja püüdsin enamus su vigasid ära parandada.
Kirjutatud Python 2.7-mes
import random

SimulationRounds = 10000
numberOfDoors = 10
switchYourChoice = True
WinCounter = 0

def DoorList():
    doorList =[False] * numberOfDoors
    rightDoor = random.randrange(numberOfDoors)
    doorList[rightDoor] = True
    return doorList

def ChosenDoorNumber():
    myDoorID = random.randrange(numberOfDoors)
    return myDoorID

def DoorSwitch(DoorChoice):
    if switchYourChoice:
        if DoorChoice:
            return False
        else:
            return True
    return DoorChoice

def WinCheck(chosenDoor):
    global WinCounter
    if chosenDoor:
        WinCounter = WinCounter + 1
       

def MontyHallProblem():
    firstDoorChoice = DoorList()[ChosenDoorNumber()]
    seccondDoorChoice = DoorSwitch(firstDoorChoice)
    WinCheck(seccondDoorChoice)

def Percentage(part, whole):
  return 100 * float(part)/float(whole)
       
def main():

    i = 0
    while(i < SimulationRounds):
        i = i+1
        MontyHallProblem();
   

    print WinCounter
    print Percentage(WinCounter,SimulationRounds)


   

if __name__ == '__main__':
    main()


Aga jah põhiline, et tahtmis ja aega oleks, küll see kood sul ka paremaks muutub.
Kommentaarid: 22 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 22
tagasi üles
vaata kasutaja infot saada privaatsõnum
armido15
HV kasutaja
armido15

liitunud: 24.12.2010



Autoriseeritud ID-kaardiga

sõnum 16.10.2013 09:43:00 vasta tsitaadiga

Ega hetkel on oskused veel kesised.1.kursus Pythonis ja ei ole veel tsüklitest/tingimustes väga kaugemale jõudnud.
Eesti keeles kirjutamine tundub kergem,kui inglise keeles aga eks tuleb ümber õppida, kuna mingil hetkel on see niikuinii vajalik.
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
andresv
HV kasutaja

liitunud: 06.12.2004



Autoriseeritud ID-kaardiga

sõnum 16.10.2013 10:54:48 vasta tsitaadiga

sorry pole pythonit ammu progenud aga, mis kord on global ja kord mitte?
python:
  1.  
  2. def WinCheck(chosenDoor):
  3.     global WinCounter
  4.  

python:
  1.  
  2. def DoorSwitch(DoorChoice):
  3.     if switchYourChoice:
  4.  
Kommentaarid: 5 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 5
tagasi üles
vaata kasutaja infot saada privaatsõnum
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 16.10.2013 10:58:54 vasta tsitaadiga

Ei tea ka Pythonist suurt midagi, aga intuitiivselt pakuks, et alamprogrammid ei saa by default globaalseid muutujaid torkida ja need mida torkida on vaja peab ette ütlema.
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
Dealer14
HV vaatleja

liitunud: 09.02.2004




sõnum 16.10.2013 11:47:21 vasta tsitaadiga

Mitte päris. Pythonis saavad alamprogrammid globaalseid muutujaid lugeda ja muuta täiesti vabalt.


Antud olukorras kui ma poleks muutujat "WinCounter" määranud globaalseks, tekiks olukord kus python loeks "WinCounter" muutuja kohalikuks.
Millepeale python viskaks veateate, et see muutuja on juba enne "WinCheck" meetodit määratletud.

python:
  1.  
  2. WinCounter = 0
  3.  
  4.     def WinCheck(chosenDoor):
  5.     global WinCounter
  6.     if chosenDoor:
  7.         WinCounter = WinCounter + 1
  8.  
Kommentaarid: 22 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 22
tagasi üles
vaata kasutaja infot saada privaatsõnum
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 16.10.2013 12:02:08 vasta tsitaadiga

Dealer14 kirjutas:
Mitte päris. Pythonis saavad alamprogrammid globaalseid muutujaid lugeda ja muuta täiesti vabalt.


Antud olukorras kui ma poleks muutujat "WinCounter" määranud globaalseks, tekiks olukord kus python loeks "WinCounter" muutuja kohalikuks.
Millepeale python viskaks veateate, et see muutuja on juba enne "WinCheck" meetodit määratletud.


See ei ole päris korrektne - globaalseid muutujaid saab alati lugeda ja nende meetodeid välja kutsuda, kuid globaalse muutuja nimele ei saa uut väärtust määrata kui muutuja ei ole kohalikus skoobis globaalsena määratletud.
Lisaks - sa viitasid pythoni koodi stiili kohta, kuid endal sul ka kood ei vasta PEP8-le (mitte et see kohustus oleks).

_________________
ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn


viimati muutis troglodyte 16.10.2013 15:58:00, muudetud 1 kord
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 34
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Dealer14
HV vaatleja

liitunud: 09.02.2004




sõnum 16.10.2013 12:42:41 vasta tsitaadiga

Tõsi ta on, et globaalsed muutujad ainult loetavad on(Oleks pidanud enne järgi vaatama, mitte peast laduma).

Su postituse teise osaga ma ei taha nõus olla. Mida sa selle all mõtlesid "Kui sinu koodinäites global WinCounter ära jätta"?
Lisasin siia kaks näidet.

Töötab:

WinCounter = 0

def WinCheck(chosenDoor):
    WinCounter = 0
    if chosenDoor:
        WinCounter = WinCounter + 1

WinCheck(True)


Veateatega:

WinCounter = 0

def WinCheck(chosenDoor):
    if chosenDoor:
        WinCounter = WinCounter + 1

WinCheck(True)



Mu erinev koodi stiil tuleneb sellest, et igapäevaselt kirjutan C#. Python on keel millega sai kunagi küll alustatud, aga praegu enam ei kasuta pea üldse.
Kommentaarid: 22 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 22
tagasi üles
vaata kasutaja infot saada privaatsõnum
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 16.10.2013 15:57:11 vasta tsitaadiga

Dealer14 kirjutas:

Su postituse teise osaga ma ei taha nõus olla. Mida sa selle all mõtlesid "Kui sinu koodinäites global WinCounter ära jätta"?


Sul on õigus - ei süvenenud sinu kirjutatud koodi piisavalt, vabandan. Eemaldasin oma postitusest ebakorrektse info.

_________________
ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 34
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Monty halli paradoks(programmi loogika,python)
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.