Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 5, 2015 19:38:19

unnamed_xd
Зарегистрирован: 2015-02-05
Сообщения: 18
Репутация: +  0  -
Профиль  

Угадай число. Самый новичок.

Всем доброго времени суток! Буквально второй день как начал изучать Python. Сначала начал читать Стаммерфилда, но первые же задания мне показались не слишком уж для новичков, хотя почти все их получилось выполнить. Подумав, что дальше будет тяжелее, я решил её не много отложить и переключиться на книгу Доусона. Так вот в первых же упражнениях есть задача, сделать программу которая будет угадывать число. Я написал код, но в итоге мне стало интересно, а как можно сделать его ещё лучше? В общем интересно, кто-нибудь делал такую же ерунду? И как у него получилось. Если есть предложения как его улучшить, то только без забеганий вперед, типа сбора ошибок через try, except, ValueError потому, что в книге такого ещё не проходилось. Если тему считаете неуместной, можете её удалить
Вот, как получилось у меня

import random
print("Добро пожаловать, меня зовут Угадай-ка!")
print("\nВы должны загадать натуральное число от 1 до 100")
print("А я при вашей помощи должен его отгадать")
print("Подсказывайте мне словами: \"больше\" или \"меньше\"")
print("Когда я отгадаю, просто скажите мне \"да\", а если не число не верное, то скажите \"нет\" ")
print("Только не обманывайте меня! :)")
input("\nЕсли Вы загадали число, то просто нажмите Enter!")
num = random.randint(1, 100)
count = 0
maximum = 100
minimum = 1
while True:
	if minimum == maximum:
		print("Или это число ", minimum, ", или вы держите меня за дурака и я отказываюсь с Вами играть!")
		break
	count += 1
	print("\nЭто число ", num, "?")
	temp = input("Да или нет? ", )
	if temp == "да" or temp == "Да" or temp == "ДА":
		print("Ура! Мне потребовалось ", count, " попыток!")
		break
	elif temp == "Нет" or temp == "НЕТ" or temp == "нет":
		var = input("Это число больше или меньше? ", )
		if var == "больше" or var == "Больше" or var == "БОЛЬШЕ":
			minimum = num
			num = random.randint(minimum, maximum)
			continue
		elif var == "Меньше" or var == "меньше" or var == "МЕНЬШЕ":
			maximum = num
			num = random.randint(minimum, maximum)
			continue
input("\nНажмите Enter для выхода.")

Офлайн

#2 Фев. 5, 2015 20:39:00

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Угадай число. Самый новичок.

ну как-то так

#-*- coding: utf-8 -*-
import itertools
print('Добро пожаловать, меня зовут Угадай-ка!'
      '\n\nВы должны загадать натуральное число от 1 до 100'
      '\nА я при вашей помощи должен его отгадать'
      '\nПодсказывайте мне словами: "больше" или "меньше"'
      '\nКогда я отгадаю, просто скажите мне "да", а если не число не верное, то скажите "нет" '
      '\nТолько не обманывайте меня! :)')
input("\nЕсли Вы загадали число, то просто нажмите Enter!")
minimum, maximum = 0, 100
for i in itertools.count(1): 
    num = (maximum + minimum) // 2
    if maximum - minimum <= 2:
        print("Или это число %d, или вы держите меня за дурака и я отказываюсь с Вами играть!" % (minimum + 1))
        break
    temp = input("\nЭто число %d ?\nДа или нет? " % num).lower()
    if temp == "да":
        print("Ура! Мне потребовалось %d попыток!" % i)
        break
    elif temp == "нет":
        var = input("Это число больше или меньше? ").lower()
        if var == "больше":
            minimum = num
        elif var == "меньше":
            maximum = num
input("\nНажмите Enter для выхода.")



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Фев. 5, 2015 20:50:38)

Офлайн

#3 Фев. 5, 2015 21:08:21

unnamed_xd
Зарегистрирован: 2015-02-05
Сообщения: 18
Репутация: +  0  -
Профиль  

Угадай число. Самый новичок.

terabayt
А я вот не додумался на счёт сравнения разницы миимума и максимума с двойкой, от этого он явно становится умнее. Да и что за модуль пока itertools не знаю.

Офлайн

#4 Фев. 5, 2015 21:31:46

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Угадай число. Самый новичок.

вот только думаю если ввести вместо “да” или “нет” что-то другое, то программа снова спросит это же самое число
это можно считать за попытку?
или попытка эт только когда программа спрашивает новое число? если да, то нужно изменить код



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Фев. 5, 2015 21:46:46

unnamed_xd
Зарегистрирован: 2015-02-05
Сообщения: 18
Репутация: +  0  -
Профиль  

Угадай число. Самый новичок.

terabayt
Да согласен, я тоже думал об этом, конечно нужно изменить. А в Python то что вводишь не регистрозависимо? То есть у меня было прописано “Да” или “да” или “ДА”, а у вас только один вариант. Если ввести большими буквами код сработает?

Офлайн

#6 Фев. 5, 2015 21:52:06

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Угадай число. Самый новичок.

temp = input("\nЭто число %d ?\nДа или нет? " % num).lower()
в конце
.lower()
>>> s = "Yes"
>>> print(s.lower())
yes
>>> s = "YES"
>>> print(s.lower())
yes
>>> s = "yES"
>>> print(s.lower())
yes



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Фев. 5, 2015 21:53:19)

Офлайн

#7 Фев. 5, 2015 21:54:17

unnamed_xd
Зарегистрирован: 2015-02-05
Сообщения: 18
Репутация: +  0  -
Профиль  

Угадай число. Самый новичок.

terabayt
Я просто об этом ещё не знаю кстати если вместо “больше” или “меньше” ввести, что нибудь другое, он тоже запустит цикл заного

Офлайн

#8 Фев. 5, 2015 21:57:10

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Угадай число. Самый новичок.

unnamed_xd
кстати если вместо “больше” или “меньше” ввести, что нибудь другое, он тоже запустит цикл заного
а самому проверить
да



————————————————
-*- Simple is better than complex -*-

Офлайн

#9 Фев. 6, 2015 01:17:31

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Угадай число. Самый новичок.

unnamed_xd
if temp == "да" or temp == "Да" or temp == "ДА":

temp = temp.lower()
if temp == "да":

Вообще, лучше обернуть.
>>> def ask(msg):
...     return input(msg).lower()
... 
>>> ans = ask('Это чило больше?\n')
Это чило больше?
Yes
>>> ans
'yes'
>>>



Отредактировано py.user.next (Фев. 6, 2015 01:22:05)

Офлайн

#10 Фев. 6, 2015 05:59:10

alekscooper
Зарегистрирован: 2015-01-25
Сообщения: 66
Репутация: +  1  -
Профиль   Отправить e-mail  

Угадай число. Самый новичок.

unnamed_xd
Всем доброго времени суток! Буквально второй день как начал изучать Python. Сначала начал читать Стаммерфилда, но первые же задания мне показались не слишком уж для новичков, хотя почти все их получилось выполнить. Подумав, что дальше будет тяжелее, я решил её не много отложить и переключиться на книгу Доусона.

Чуть оффтопом - а что это за книги? Как называются? Вообще для новичков щас много курсов на Корсере и ЭдЕксе. Правда, большинство из них уже началось, но если так, для себя, без сертификатов, задания доступны. Если хочешь, могу ссылки дать.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version