Alvorens te denken over hoe dit te implementeren in python (of een andere taal) laten we kijken naar de pseudo-code, die eruit ziet als een vrij goed plan om het probleem op te lossen.
Ik denk dat dat zou een ding dat je zou kunnen vast komen te zitten op de manier waarop de pseudo-code verwijst naar variabelen , zoals highen low. De manier om variabelen te begrijpen, is te beschouwen slots die waarden kunnen worden opgeslagen. Op elk willekeurig moment een variabele enige waarde, zoals het aantal 5 of een verwijzing naar een open bestand. Die waarde kan op elk moment worden opgeroepen door het gebruik van de naam, of het kan een nieuwe waarde worden gegeven door toe te wijzen aan het, en de oude waarde zal worden vergeten met de nieuwe waarde in de plaats.
De pseudo-code verwijst naar drie variabelen high, lowen tries. Het vertelt je ook wat hun beginwaarden moeten zijn. Na de tweede lijn is uitgevoerd, worden deze waarden ingesteld tot 1000, 1 en 1, respectievelijk, maar ze nemen over nieuwe waarden als het programma vordert.
Een ander kenmerk van de pseudocode een voorwaardelijke lus en een individuele analyse van de gebruikersinvoer. Uw vertaling van de lus van de pseudocode is onjuist. In uw geval, heb je een nieuwe variabele gemaakt, ien het programma om de lus lichaam uitgevoerd met elke waarde van i tussen 1 en 1000. hebben geïnstrueerd Uiteraard is dit niet een heel veel te maken met de pseudocode.
In plaats daarvan wat je wilt doen is lus voor altijd, totdat enige voorwaarde (welke wijzigingen in de loop lichaam) vals wordt. In python, de whileverklaring doet dit. Als u bekend bent met een ifverklaring, whileziet er hetzelfde uit, maar nadat het lichaam is gedaan, de toestand is opnieuw geëvalueerd en het lichaam wordt opnieuw uitgevoerd als het is nog steeds zo.
Ten slotte is de case-analyse in het lichaam van de lus moet vergelijken iets te verwachte waarden. Hoewel sommige andere talen hebben een aantal manieren om dit uit te drukken, in python we hebben alleen if- elif- elseclausules.
Buiten het transformeren van pseudocode om werkende code, is het waarschijnlijk nuttig om te begrijpen wat het programma eigenlijk aan het doen is. De sleutel is hier op lijn 4, waarbij het programma raadt het gemiddelde van twee waarden. na dat het programma werkt op hoe goed de gok uitgewerkt.
In de eerste run door de lus met highdaarin 1000 en lowdie 1 is het gemiddelde 500 (eigenlijk het gemiddelde 500.5, maar omdat we gemiddeld hele getallen, python gissingen dat we de gewenste positie van de divisie ook een geheel getal ). Het is duidelijk dat de gok heeft slechts een kans om recht 0,1%, maar als het verkeerd is, wordt de gebruiker naar verwachting om ons te vertellen als het te hoog of te laag was. Hoe dan ook, het antwoord elimineert 50% van de mogelijke gissingen.
Als, bijvoorbeeld, is de gebruiker te denken van een klein aantal, dan wanneer het programma geraden 500, zou de gebruiker het programma dat 500 te hoog was, en dan is het programma niet zou ooit raden dat het aantal was in het vertellen range van 501 thru 1000. Dat de computer een hoop werk besparen.
Om die informatie te maken aan het gebruik, het programma houdt het bereik van mogelijke waarden het doel nummer zou kunnen zijn. Wanneer het aantal geraden te hoog is, het programma stelt de bovengrens beneden, net onder de raden, en als de schatting te laag, het programma stelt de onderzijde omhoog gehouden net boven de raden.
Wanneer het programma opnieuw raadt, de schatting is in het midden van het mogelijke bereik, snijden het bereik anderhalf keer. Het aantal mogelijke gissingen ging van de oorspronkelijke 1000-500 in een gok, tot 250 in twee schattingen. Als het programma vreselijk geluk, en kan het niet krijgen twee (dat is eigenlijk vrij waarschijnlijk is), en vervolgens door de derde, het heeft slechts 125 nummers beschikbaar te maken over. Na de vierde raden, slechts 62 nummers blijven binnen bereik. Dit gaat zo door, en na acht gissingen, slechts 3 nummers blijven, en het programma probeert het middelste getal voor zijn negende gok. Als dat blijkt niet te kloppen, is slechts een nummer naar links, en het programma gissingen it!
Deze techniek van het splitsen van een reeks in de helft en dan blijven de dichter helft is genoemd tweedeling en lijkt in een breed scala onderwerpen die van belang zijn voor de informatica.
Hoe over enkele CODE! Omdat ik wil niet om u te beroven van de leerervaring, ik geef u een aantal fragmenten die je verder kunnen helpen. python is een taal ontwikkeld voor interactieve exploratie, dus start uw tolk en geef dit een schot. Ik zal het plaatsen van voorbeelden met de getoonde aanwijzingen, niet echt het type dat.
Hier is een voorbeeld met behulp van de whileclausule:
>>> x = 1000
>>> while x > 1:
... x = x/2
... print x
...
500
250
125
62
31
15
7
3
1
>>> x
1
Het krijgen van de console input van de gebruiker moet worden gedaan door middel van de raw_input()functie. Het geeft gewoon wat de gebruiker typt. Dit is een beetje moeilijker om te laten zien. Om alles te vereenvoudigen, na elke lijn van de python die input nodig is, zal ik het type "Hello World!" (zonder de aanhalingstekens)
>>> raw_input()
Hello World!
'Hello World!'
>>> y = raw_input()
Hello World!
>>> print y
Hello World!
>>>
Wat dacht je van een combinatie van concepten!
>>> myvar = ''
>>> while myvar != 'exit':
... myvar = raw_input()
... if myvar == 'apples':
... print "I like apples"
... elif myvar == 'bananas':
... print "I don't like bananas"
... else:
... print "I've never eaten", myvar
...
apples
I like apples
mangoes
I've never eaten mangoes
bananas
I don't like bananas
exit
I've never eaten exit
>>>
Oeps. beetje een bug daar. Kijk of je het kan oplossen!