Przed myślenie o tym, jak zaimplementować to w Pythonie (lub dowolnym języku) pozwala spojrzeć na pseudokod, który wygląda jak całkiem dobry plan, aby rozwiązać ten problem.
Przypuszczam, że jedną rzeczą, którą może być utknięcie na to sposób pseudokod odwołuje zmienne , jak highi low. Droga do zrozumienia zmiennych jest rozważenie nich szczeliny, które wartości mogą być przechowywane. W danym momencie, zmienna ma jakąś wartość, podobnie jak numer 5 lub odniesienie do otwartego pliku. Wartość ta może być zwołane w każdej chwili za pomocą jego nazwy, lub może mieć nową wartość poprzez przypisanie do niego i stara wartość zostanie zapomniane z nową wartość przy jego miejsce.
Pseudokod odwołuje trzy zmienne high, lowi tries. Informuje także, jakie są ich wartości początkowe powinno być. Po drugiej linii został wykonany, te wartości są ustawione na 1000, 1 i 1, odpowiednio, ale biorą na nowe wartości w miarę postępu programu.
Inną cechą warunkowa Pseudokod pętli, a analiza przypadek wprowadzania. Twoje tłumaczenie z pętli pseudokod jest nieprawidłowe. W twoim przypadku, stworzyliśmy nową zmienną, ioraz poinstruować program, aby uruchomić ciało pętli przy każdej wartości I między 1 i 1000. Oczywiście nie ma dużo wspólnego z Pseudokod.
Zamiast tego, co chcesz zrobić, to pętla na zawsze, dopóki jakiś warunek (która zmienia się w ciele pętli) staje się fałszywe. W Python, whileoświadczenie to robi. Jeśli jesteś zaznajomiony z ifoświadczeniem, whilewygląda tak samo, ale po ciało jest zrobione, warunek jest ponownej ocenie i korpus jest wykonany ponownie, jeśli nadal jest prawdą.
Wreszcie, analiza case w ciele pętli wymaga porównujące coś do oczekiwanej wartości. Chociaż niektóre inne języki mają wiele sposobów wyrażania tego, w python tylko mamy if- elif- elseklauzule.
Poza przekształcania Pseudokod do kodu działa, to chyba warto zrozumieć, co program jest rzeczywiście robi. Kluczem tutaj jest na linii 4, w którym program odgadnie średnią z dwóch wartości. Po tym program działa jak dobrze przypuszczenie wypracowane.
W pierwszym biegu przez pętlę, z highzawierającym 1000 i lowzawierający 1, średnia wynosi 500 (w rzeczywistości średnia wynosi 500,5, ale ponieważ jesteśmy średnio liczb całkowitych, zgaduje Pythona, który chcemy, aby wynik podziału będzie również liczbą całkowitą ). Oczywiście, że przypuszczenie ma tylko 0,1% szans na bycie w porządku, ale jeśli to się stało, oczekuje się, że użytkownik, aby powiedzieć nam, czy to zbyt wysoka lub zbyt niska. Tak czy inaczej, że odpowiedź całkowicie eliminuje 50% możliwych domysłów.
Jeśli, na przykład, użytkownik myślał o małej liczbie, a następnie, gdy program domyślić 500, użytkownik mógłby powiedzieć, że program 500 jest zbyt wysoka, a wtedy program nie będzie nigdy musiał się domyślać, że liczba była w Zakres 501 thru 1000. to może zaoszczędzić komputerowi dużo pracy.
Aby umieścić tę informację w użyciu program śledzi zakresie możliwych wartości liczba cel może być. Gdy liczba domyślić jest zbyt wysoka, program dostosowuje jej górna granica w dół, tuż poniżej odgadnięcia, a jeśli przypuszczenie było zbyt niskie, program dostosowuje jej dolnej granicy w górę tuż nad odgadnięcia.
Gdy program odgadnie kolejny domysł jest w samym środku możliwym zakresie, ponownie cięcia zakres w połowie. Liczba możliwych prób poszedł z oryginalnego 1000 do 500 w jednym przypuszczeniem, do 250 w dwóch prób. Jeśli program ma straszną szczęścia, i nie może się on dwa (co jest rzeczywiście bardzo prawdopodobne), a następnie przez trzeci, ma tylko 125 numerów w lewo, aby martwić. Po czwartym odgadnięcia tylko 62 numerów pozostają w zasięgu. To w dalszym ciągu, a po ośmiu prób, pozostają tylko 3 numery, a program próbuje środku numer na swojej dziewiątej odgadnięcia. Jeśli okaże się, że będzie źle, tylko jeden numer jest w lewo, a program odgadnie go!
Ta technika dzielenia zakres w pół, a następnie dalej do bliższej połowie jest nazywany bisekcji i pojawia się w szeroki zakres tematów interesujących informatyki.
Jak o jakiś kod! Ponieważ nie chcą pozbawić cię doświadczenie uczenia się, po prostu podać kilka fragmentów, które mogą Ci pomóc wzdłuż. Python to język przeznaczony do interaktywnej eksploracji, tak odpalić swój tłumacza i dać tę szansę. Będę delegowania przykłady z podpowiedzi pokazanych w rzeczywistości nie wpisać tego.
Oto przykład przy użyciu whileklauzuli:
>>> x = 1000
>>> while x > 1:
... x = x/2
... print x
...
500
250
125
62
31
15
7
3
1
>>> x
1
Pierwsze wejście konsola z użytkownikiem powinna odbywać się za pośrednictwem raw_input()funkcji. To po prostu zwraca niezależnie od typów użytkowników. To jest trochę trudniejsze, aby pokazać. Aby uprościć, po każdym wierszu pytona, który wymaga wkładu, będę wpisać „Hello World!” (bez cudzysłowów)
>>> raw_input()
Hello World!
'Hello World!'
>>> y = raw_input()
Hello World!
>>> print y
Hello World!
>>>
Jak o niektórych łączenie pojęć!
>>> 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
>>>
Ups. Trochę tam błąd. Sprawdzić, czy można to naprawić!