Цели устроится на работу в какой-нибудь IT гигант не стоит, т.к. реально понимаю , что в моем возрасте это вряд ли осуществимо в данной области, так скорее хобби(но очень интересное), но и говнокод писать не хочется. Если что-то делаешь, то делай правильно. В реальной жизни мне обратиться за советом не к кому. обращаюсь к вам.
В общем осваиваю Майкла Доусона “Программируем на питон”, дойдя и изучив главы Функции и Файлы ,для закрепления материала, собрал несколько ранее созданных учебных заданий и объединил их в одну программку, в которой пользователь с компьютером играет в игру “Угадай число”, а программа собирает результаты и выводит на экран.
В общем хотел попросить вас оценить получившийся продукт, указать на недостатки, недочеты. Вообще , правильно ли я усвоил понятия функций, все ли в порядке с логикой и т.д.
И ещё, это мой первый опыт в данной области вообще, так что, то что для ВАС тривиально, для меня тёмный лес)
Вот собственно, сам код.
import random, pickle, shelve, sys def acquaintance(question): """Знакомство с пользователем""" response = None while not response: response = input(question). title() return response def hallo_unit(name): print("""\t\t\tДобро пожаловать в игру \"УГАДАЙ ЧИСЛО\",""", name,""" Я буду загадывать число, а ты угадывать! Ты можешь задать диапазон чисел в которых будешь угадывать или оставить как есть, тогда диапазон будет от 1 до 100. у тебя всего 10 попыток! """) def ask_yes_no(question): """Задает вопрос с ответом "ДА" или "НЕТ".""" response = None while response not in ("ДА", "НЕТ"): response = input(question).upper() return response def game_interval(): """При желании пользователя меняет величину диапазона""" answer = ask_yes_no("\n\n\tВы желаете изменить диапазон чисел?") if answer == "НЕТ": interval = 100 else: try: interval = int(input("\n\n\tВведите величину диапазона, в котором будете отгадывать.")) except: print("\n\tВы ввели недопустимое значение, попробуем ещё разок!") interval = game_interval() return interval def ask_number(question, interval): """Просит ввести число из диапазона""" response = None while response not in range(1,interval): try: response = int(input(question)) if response not in range(1,interval): print("\n\tЭто число вне диапазона!") except: print("\n\tВы ввели недопустимое значение, попробуем ещё разок!") return response def user_game(interval, name): """Пользователь отгадывает число""" computer_choise = random.randrange(interval) + 1 score = 0 response = None while response != computer_choise : response = ask_number("\n\n\tНазывай число в заданном диапазоне.", interval) if response > computer_choise : score += 1 print("\n\tМеньше") elif response < computer_choise : score += 1 print("\n\tБольше") elif response == computer_choise : score += 1 print("\tМолодец, это действительно" , computer_choise) print("\tТы отгадал число всего за", score ,"шагов!") elif response <= 1 or response >= interval: print("Это число вне диапазона, пожалуйста введите другое!") if score == 10: print("\n\tНу ты , вообще, неудачник!") break records_list_4(score, interval, name) def records_list_4(score, interval, name): """Добавляет рекорды в виде консервированных списков на полке""" records = shelve.open("records.dat") interval = str(interval) if interval in records: name_records = records[interval] name_record = (score, name) name_records.append(name_record) records[interval] = name_records else: name_records = [] name_record = (score, name) name_records.append(name_record) records[interval] = name_records records.close() def print_record_2(): """Выводит на экран рекорды из файла""" print("\t\t\tСписок рекордов\n") print("""\t\tВ графе СЛОЖНОСТЬ указан интервал в котором велся поиск, чем больше тем сложнее, в графе РЕКОРД указано количество шагов за которое игрок угадал число, чем меньше тем лучше результат \n\n""") print("\t\tСЛОЖНОСТЬ\t\t\tИМЯ\t\tРЕКОРД\n\n") records = shelve.open("records.dat") for i in records: lvl_records = records[i] name_records = [] for j in lvl_records: score, name = j name_record = (score, name, i) name_records.append(name_record) name_records.sort() name_records = name_records[:3] for k in name_records: score, name, lvl, = k print("\t\t", lvl, "\t\t\t", name, "\t\t", score) print("\n\n") def computer_game(interval, ): """Компьютер отгадывает число""" print("""\n\n\t\t А теперь моя очередь, я буду отгадывать, Пиши больше или меньше, когда угадаю пиши - правильно. посмотрим кто быстрее?""") item = int(input("\n\tЗагадай число в заданном тобой диапазоне:")) name = "Компьютер" low = 1 hight = interval score = 0 user_response = "" response_copy = None while user_response != "Правильно": mid = (low + hight) // 2 response = range(interval + 1)[mid] print("\n\t", response) user_response = input("").title() if user_response == "Правильно": score += 1 print("\n\tЯ отгадал число всего за", score,"шагов!") elif user_response == "Больше": low = mid + 1 score += 1 elif user_response == "Меньше": hight = mid - 1 score += 1 else: print("\n\tПовторите пожалуйста - 'больше' или 'меньше'") if score == 10: print("\n\tВот я лошара!!!") break if response == response_copy: print("Вы либо забывчивый либо мошенник, я с такими не дружу! Прощайте!") sys.exit() response_copy = response records_list_4(score, interval, name) def main(): end_game = None while end_game != "НЕТ": name = acquaintance("\tДавай знакомиться,меня зовут Компьютер, а тебя?:") hallo_unit(name) interval = game_interval() user_game(interval, name) computer_game(interval) print_record_2() end_game = ask_yes_no("""\n\n\t\t\tЖелаете продолжить или и отдать ход другому, если ни то ни другое введите \"нет\".""") input("Нажмите Enter чтобы выйти") main()