Форум сайта python.su
Всем доброго времени суток! Буквально второй день как начал изучать 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 для выхода.")
Офлайн
103
ну как-то так
#-*- 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 для выхода.")
Отредактировано terabayt (Фев. 5, 2015 20:50:38)
Офлайн
terabayt
А я вот не додумался на счёт сравнения разницы миимума и максимума с двойкой, от этого он явно становится умнее
. Да и что за модуль пока itertools не знаю.
Офлайн
103
вот только думаю если ввести вместо “да” или “нет” что-то другое, то программа снова спросит это же самое число
это можно считать за попытку?
или попытка эт только когда программа спрашивает новое число? если да, то нужно изменить код
Офлайн
terabayt
Да согласен, я тоже думал об этом, конечно нужно изменить. А в Python то что вводишь не регистрозависимо? То есть у меня было прописано “Да” или “да” или “ДА”, а у вас только один вариант. Если ввести большими буквами код сработает?
Офлайн
103
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
Отредактировано terabayt (Фев. 5, 2015 21:53:19)
Офлайн
terabayt
Я просто об этом ещё не знаю
кстати если вместо “больше” или “меньше” ввести, что нибудь другое, он тоже запустит цикл заного
Офлайн
103
unnamed_xdа самому проверить
кстати если вместо “больше” или “меньше” ввести, что нибудь другое, он тоже запустит цикл заного
Офлайн
857
unnamed_xdif 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)
Офлайн
1
unnamed_xd
Всем доброго времени суток! Буквально второй день как начал изучать Python. Сначала начал читать Стаммерфилда, но первые же задания мне показались не слишком уж для новичков, хотя почти все их получилось выполнить. Подумав, что дальше будет тяжелее, я решил её не много отложить и переключиться на книгу Доусона.
Офлайн