Уведомления

Группа в Telegram: @pythonsu

#1 Март 2, 2009 13:11:32

Newbie
От:
Зарегистрирован: 2009-03-02
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

The Guess My Number Game: ВАША ВЕРСИЯ

Доброго времени суток!

Сделал следующее задание из книги Python Programming for the Absolute Beginner (автор Michael Dawson):

Here's a bigger challenge. Write the pseudocode for a program where the player and the computer trade places in the number guessing game. That is, the player picks a random number between 1 and 100 that the computer has to guess. Before you start, think about how you guess. If all goes well, try coding the game.

Сейчас интересно: А как бы другие справились с этим заданием?

Я понимаю, что нужно было сделать так: компьютер просит Вас выбрать любое число в пределах от 1 до 100 (в моей игре его надо ввести), после чего он делает свою первую попытку и называет произвольное число (естественно в тех же самых пределах). Если предложенное компьютером число не соответствует числу, которое Вы загадали, компьютер просит Вас подсказать ему “выше” или “ниже” (в игре слова ‘UP’ и ‘DOWN’ соответственно) находится загаданное Вами число. После того как компьютер угадывает Ваше число, игра заканчивается и компьютер сообщает Вам о том, сколько попыток ему потребовалось для того, чтобы угадать это число.

Я выполнил задание, но что на мой взгляд не менее важно - я “обучил” программу делать следущее.

К примеру, Вы загадали число 20 => компьютер делает свою первую попытку и называет число 40 => Вы подсказываете (я это так называю): DOWN => компьютер генерирует произвольное число В ПРЕДЕЛАХ ОТ 1 ДО 39 включительно и предлагает его в качестве ответа; допустим сгенерировано число 39 => Вы решаете “обмануть” компьютер и подсказываете: UP => компьютер не дурак (!) - выводит следущее сообщение: Oops, kazhetsya, Vi pozabili: kogda ya nazval chislo 40, Vi skazali MEN'SHE! T.k. posle chisla 39 idet chislo 40, men'she kotorogo, yakobi, nahoditsya zagadannoe Vami chislo, ya otkazivajus' gadat' VISHE 39!!!; еще пару раз скажите UP - компьютер прекратит игру и выведит следущее сообщение: Ya tak ne igraju!!!; если не будете как в танке и скажите DOWN => компьютер продолжит игру и сгенерирует произвольное число в пределах от 1 до 38 включительно; допустим компьютер сгенерировал и предложил число 36 => Вы случаем толи забыли, толи перегадали, так сказать, свое то-самое, первоначально Вами загаданное/введенное число 20 и говорите UP => компьютер не знает, что UP - “неверно” и произвольно выбирает либо 37, либо 38 (т.к. ранее Вы сказали компьютеру, что Ваше число находится выше 36, но ниже 39); допустим выбрано число 38 => Вам либо “UP”, либо “DOWN”: скажите UP - компьютер напомнит, что выше ни-ни - там знакомое нам число 39 (в общем, известный случай); говорите DOWN => и компьютер наталкивается на единственно возможное число 37; wow, думает он, what the hell? - число же совсем не ТО!!! Ну, как говорится, чем богаты, тем и рады: 37 так 37; выводит сообщение: Naskol'ko mne izvestno, pervonachal'no Vi zagadali chislo 20, no t.k. Vi skazali mne, chto Vashe chislo vishe 36 i nizhe 38, to ostaetsya tol'ko chislo 37. Nesmotrya na to, chto chislo 37 ne yavlyaetsya chislom Vami pervonachal'no zagadanim, ya budu schitat', chto ya otgadal Vashe chislo i igra zakonchena!

Выше были рассмотрены нестандартные случаи, о которых, как я счел, должен знать компьютер (т.к от human being можно ожидать все, что угодно) и которые я прописал в программу. Единственное, что не достает - так это то, что пользователь вместо числа может ввести муру какую-нибудь, которую, соответственно, программа не в состоянии обработать. Кстати, на случай если пользователь вместо UP или DOWN вводит что-либо иное, программа просит его: Ispol'zujte ‘UP’ ili ‘DOWN’! Mne nuzhna podskazka!!! Если б знал КАК, то прописал бы подобную просьбу и для “числа”, но к сожалению за неимением такого “know-how” вынужден отложить внедрение подобной функции на будущее. Знаю, в JavaScript есть такая штука как NaN (Not a Number), которая отличает numbers от strings, но как такое организовать в Питоне - еще не научился! Если кто знает, можете подсказать - буду рад!



Отредактировано (Март 8, 2009 04:42:40)

Офлайн

#2 Март 2, 2009 13:31:07

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

The Guess My Number Game: ВАША ВЕРСИЯ

Ну тут еще можна добавить какие-то более продвинутое АИ генерации случайных чисел компьютером, а не в тупую генерировать равномерное распределение…

Я когда-то таким игрался в школе еще на Паскале. Еще добавил, что при варианте угадывания чисел компьютером (оригинальная версия задачи) создавался файлик статистики (авторизация была, так что для каждого пользователя разный). Компьютер “набирал опыта” о каждом игроке и старался генерировать число в каждом случае такое, чтобы было труднее угадать. Такое отлично работало, если применялась какая-то система угадывания, в случае тупого рандома, никакого эффекта не было =).

все =)



Отредактировано (Март 2, 2009 13:32:45)

Офлайн

#3 Март 2, 2009 13:47:27

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

The Guess My Number Game: ВАША ВЕРСИЯ

Когда-то давно решил подобную задачку на МК-61 Ээх ностальгия :). Но ваш вариант не совсем верен. Вы все время берёте произвольное число ищ оставшегося промежутка. Но таким образом не минимизируется количество шагов. Наименьшее количество шагов гораздо вероятнее будет получатся, если каждый раз брать число наибольшие близкое к середине промежутка.

Офлайн

#4 Март 2, 2009 13:50:40

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

The Guess My Number Game: ВАША ВЕРСИЯ

Ferroman, именно это я имел ввиду, написав

regall
Ну тут еще можна добавить какие-то более продвинутое АИ генерации случайных чисел компьютером…
=)



Офлайн

#5 Март 2, 2009 14:36:03

Newbie
От:
Зарегистрирован: 2009-03-02
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

The Guess My Number Game: ВАША ВЕРСИЯ

Ferroman
Когда-то давно решил подобную задачку на МК-61 Ээх ностальгия. Но ваш вариант не совсем верен. Вы все время берёте произвольное число из оставшегося промежутка. Но таким образом не минимизируется количество шагов. Наименьшее количество шагов гораздо вероятнее будет получатся, если каждый раз брать число наибольшие близкое к середине промежутка.
Я полагаю, чем меньше предсказуемостей, тем больше вероятностей!

К примеру, я загадал единицу => компьютер - 50 => DOWN! => 25 => DOWN! => 12 => DOWN! => 6 => DOWN! => 3 => Хммм, кажется слишком долго… совсем дауном можно сделаться!

В моей версии больше вероятность того, что компьютер назовет единицу с третьего, второго или ПЕРВОГО раза!

Конечно, random-генерация - это псевдослучайная генерация, основанная на определенной формуле, но как написано в книге Python Programming for the Absolute Beginner: pseudorandom generation is good enough for most applications (just don't try to start an online casino with it).



Офлайн

#6 Март 2, 2009 14:46:06

Newbie
От:
Зарегистрирован: 2009-03-02
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

The Guess My Number Game: ВАША ВЕРСИЯ

regall
Ну тут еще можна добавить какие-то более продвинутое АИ генерации случайных чисел компьютером…
Кстати, из той же самой книги вычитал, что существует генерация, основанная на естественном и непредсказуемом процессе радиоактивного распада.

Уж и не знаю: Cтоит ли использовать подобную генерацию для таких простых игр?



Офлайн

#7 Март 2, 2009 15:04:56

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

The Guess My Number Game: ВАША ВЕРСИЯ

Newbie
Наверное, стоит почитать теорию вероятности перед сном.
Кстати, пример взят один из самых длинных. В вашем “случайном” варианте может быть гораздо больше попыток.
50 - down - 35 - down - 32- down -22- down- 13 -down- 12 -down - 8 - down - 5 - down - 2 up - 4 - down - 3

Отредактировано (Март 2, 2009 15:10:30)

Офлайн

#8 Март 2, 2009 15:29:35

Newbie
От:
Зарегистрирован: 2009-03-02
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

The Guess My Number Game: ВАША ВЕРСИЯ

Ferroman
В вашем “случайном” варианте МОЖЕТ БЫТЬ гораздо больше попыток. 50 - down - 35 - down - 32- down -22- down- 13 -down- 12 -down - 8 - down - 5 - down - 2 up - 4 - down - 3
Вся фишка в том, что может и НЕ БЫТЬ! А в Вашем варианте - ГАРАНТИРОВАНО!



Отредактировано (Март 4, 2009 13:05:24)

Офлайн

#9 Март 2, 2009 15:32:20

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

The Guess My Number Game: ВАША ВЕРСИЯ

Newbie
Ferroman
В вашем “случайном” варианте МОЖЕТ БЫТЬ гораздо больше попыток. 50 - down - 35 - down - 32- down -22- down- 13 -down- 12 -down - 8 - down - 5 - down - 2 up - 4 - down - 3
Вся фишка в том, что МОЖЕТ и НЕ БЫТЬ! А в Вашем варианте - ГАРАНТИРОВАННО!
гарантировано наименьшее кол-во попыток.
проведите статистические исследования этих двух методов.
быстрее будет отгадывать деление пополам.



Офлайн

#10 Март 2, 2009 15:51:46

Newbie
От:
Зарегистрирован: 2009-03-02
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

The Guess My Number Game: ВАША ВЕРСИЯ

Таким галопом можно в инструкции к игре прописать большими буквами: ЗАГАДАЕТЕ ЧИСЛО 50 - СИЮ МИНУТУ ПРОИГРАЕТЕ; ЗАГАДАЕТЕ ЧИСЛО 1 ИЛИ 99 (к примеру) - ПОИГРАЕТЕ ПОДОЛЬШЕ!

Мое личное мнение: предсказуемая игра - неинтересная игра! А там как изволите: можете пополам, а можете иначе.



Отредактировано (Март 2, 2009 16:03:56)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version