ФорумПрограммированиеPython → Первый Python скрипт - Игра о пыха.ру )

Первый Python скрипт - Игра о пыха.ру )

  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 9 декабря 2011 г. 13:55

    Здравствуйте!

    Поставил себе Ubuntu было сразу установлен Python + книга на столе "Python самое необходимое"
    и решил начать изучать данный язык.

    Теорию нужнр прикрепить практикой и написал свою первую программу на Python
    Всего лишь 5 вопросов на которых нужно ответить правильно чтобы выиграть игру (Вопросы о pyha.ru)
    - Кто хочет дополнить вопросы, милости прошу редактируйте скрипт ))

    Смысл темы: Нужна критика что я не так делаю и как можно было сделать лучше

    # -*- coding: utf-8 -*-
    ## Настройки вопросов
    QuestionSettings = {
    1: {'name': 'Ник пользователя на пыха.ру с ID: 220', 'answer': ('Assessor'), 'point': 1},
    2: {'name': 'Куда обычно посылают новичков на пыхе? ', 'answer': ['нахуй', 'нах', 'гугл', 'google'], 'point': 2},
    3: {'name': 'Главный Пайтоно-дрочер на пыхе', 'answer': ['adw0rd', 'Эдво', 'эдво'], 'point': 2},
    4: {'name': 'Главный тролль на пыхе со времен существования форума', 'answer': ['дуд', 'phpdude', 'пхпдуд'], 'point': 1},
    5: {'name': 'Какому пользователю пыхи скоро исполнится 38?', 'answer': ['AlexB', 'alexb'], 'point': 3},
    };

    Question = dict(QuestionSettings)
    def StartGame():
    Nick = raw_input("Имя в игре: ")
    if bool(Nick) == True:
    Count = 0
    StartPoint = 0 # Стартовые баллы
    Correct = 0 # Правильные ответы
    Wrong = 0 # Неправильные ответы
    print " ============================"
    print "[ Simple Python Game v0.1 ]"
    print " ============================"
    enterGame = raw_input("Нажмите Y(д) или N(н) для подтверждения началы игры: ")
    if enterGame in ['N', 'n', 'н', 'Н']:
    print "Покинул игру…"
    else:
    print "\nВопросы:"

    for key in Question.keys():
    Count += 1;
    CreateQuestion = str(Count)+") "+Question[key]['name']+": "
    GiveQuestion = raw_input(CreateQuestion)
    if GiveQuestion not in Question[key]['answer']:
    StartPoint -= Question[key]['point']
    print "НЕправильный ответ!\nВы потеряли ", Question[key]['point'], " бал. сейчас у вас: ", StartPoint, "\n"
    Wrong += 1
    else:
    StartPoint += Question[key]['point']
    print "ПРАВИЛЬНО!\nНакопили +", Question[key]['point'], " бал. сейчас у вас: ", StartPoint, "\n"
    Correct += 1

    if len(Question) == Count:
    print "============================"
    print "Вы вышли в финал ;)"
    print "Всего баллов: ", StartPoint
    print "Правильных ответа: ", Correct
    print "Неправильных ответа: ", Wrong
    if Correct < Wrong:
    print "Чувак, хреново ты справился :D"
    else:
    print "Пацаны, ваще, ребята, классно ваще - магете! :)"
    break

    ## Если баллы пользователя достигли 0 или ниже
    ## игра сразу завершается
    if StartPoint <= 0:
    print "============================"
    print "Игра окончена!"
    print "Правильных ответа: ", Correct
    print "Неправильных ответа: ", Wrong
    break

    else:
    print "Ошибка в имени игрока!"

    ## Рестарт игры
    Restart = raw_input("\nХотите продолжить игру Y(д) или N(н) ?: ");
    if Restart in ['Y', 'y', 'д', 'Д']:
    print "\n" * 7
    StartGame()
    print "\n" * 7

    ## Начинаем игру
    StartGame()


    Сохраняйте с расширением *.py и пробуйте - Ваш Кэп!
  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 9 декабря 2011 г. 14:04, спустя 8 минут 29 секунд

    Какую команду нужно написать чтобы очистить консоль от старых данных? для этого я банально умножил \n (перевод строки) 7 раз чтобы сделать заметным барьер между новым стартом игр.
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 9 декабря 2011 г. 14:09, спустя 4 минуты 51 секунду

    \r - перенести курсор в начало строки (кроссплатформенно), всё остальное особыми кодами терминала
  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 9 декабря 2011 г. 14:19, спустя 10 минут 45 секунд

    Ivan, Мне нужно чтобы когда игрок к примеру провалил игру и хочет опять играть, нажал - Y и старые строки сверху удаляются и начинается опять с чистой консоли.
    Вопрос для меня не очень важный но все же интересно как можно реализовать такое поведение на Python.
  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 9 декабря 2011 г. 14:24, спустя 5 минут 7 секунд

    может быть я туплю и Вы уже ответили на мой вопрос … нужен пример с кодом =)
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 9 декабря 2011 г. 14:36, спустя 11 минут 36 секунд

    Разве в питоне нету библиотек по работе с терминалом?
    Спустя 190 сек.
    Попробуй сделать тупо системный вызов команды clear из питона, на линуксе должно сработать, на винде точно не сработает
    Спустя 144 сек.
    perl -e "system 'clear';"
    запустил в терминале на своём вдс - он отчистился, значит должно работать и с питоном
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 9 декабря 2011 г. 14:52, спустя 15 минут 39 секунд

    какбы дитя не тешилось ололо
    Спустя 16 сек.
    если отвечаете везде дуд, то получаете плюс в карму от меня :)
    Сапожник без сапог
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 9 декабря 2011 г. 22:12, спустя 7 часов 20 минут 2 секунды

    Небольшой синтаксический сахар:
    print "Покинул игру…" if enterGame in ['N', 'n', 'н', 'Н'] else "\nВопросы:" 


    for key, value in Question.items():


    CreateQuestion = "(%i) %s:" % (Count, Question[key]['name'])




  • adwo

    Сообщения: 913 Репутация: N Группа: Джедаи

    Spritz 9 декабря 2011 г. 23:43, спустя 1 час 30 минут 46 секунд

    Какую команду нужно написать чтобы очистить консоль от старых данных? для этого я банально умножил \n (перевод строки) 7 раз чтобы сделать заметным барьер между новым стартом игр.

    import os

    def clear():
    if os.name == 'posix':
    os.system('clear')

    elif os.name == ('ce', 'nt', 'dos'):
    os.system('cls')


    clear()
    Спустя 40 сек.
    Вот это, видимо, ты не читал? http://www.python.org/dev/peps/pep-0008/
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 10 декабря 2011 г. 2:10, спустя 2 часа 27 минут 28 секунд

    Кашакод. Питоник в шоке!
    Спустя 36 сек.
    Вот это, видимо, ты не читал? http://www.python.org/dev/peps/pep-0008/

    +1, поставь себе pep8
    sudo apt-get install pep8
    adw/0
  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 10 декабря 2011 г. 2:35, спустя 25 минут 16 секунд

    adwo, Работает спасибо.
    Что-то подобное с os.system('clear') я уже находил на форумах и не работало, но только сейчас понял, что программу нужно было запускать в терминал а не в IDLE Python`на.
  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 10 декабря 2011 г. 2:45, спустя 9 минут 22 секунды

    Кашакод. Питоник в шоке!

    Возможно, я только начал путь война пайтон :)
    В чем каша ? что раздражает в коде ?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 10 декабря 2011 г. 3:23, спустя 38 минут 17 секунд

    Я лучше покажу, а то слишком много объяснять:

    # coding: utf-8

    # Настройки вопросов
    questions = {
    1: {
    'name': 'Ник пользователя на пыха.ру с ID: 220',
    'answer': ('Assessor',),
    'point': 1,
    },
    2: {
    'name': 'Куда обычно посылают новичков на пыхе? ',
    'answer': ('нахуй', 'нах', 'гугл', 'google',),
    'point': 2,
    },
    3: {
    'name': 'Главный Пайтоно-дрочер на пыхе',
    'answer': ('adw0rd', 'Эдво', 'эдво',),
    'point': 2,
    },
    4: {
    'name': 'Главный тролль на пыхе со времен существования форума',
    'answer': ('дуд', 'phpdude', 'пхпдуд',),
    'point': 1,
    },
    5: {
    'name': 'Какому пользователю пыхи скоро исполнится 38?',
    'answer': ('AlexB', 'alexb',),
    'point': 3,
    },
    }


    def start_game():
    nick = raw_input("Имя в игре: ")
    if nick:
    count = 0
    start_point = 0 # Стартовые баллы
    correct = 0 # Правильные ответы
    wrong = 0 # Неправильные ответы

    print "=" * 30
    print "[ Simple Python Game v0.1 ]"
    print "=" * 30

    enter_game = raw_input("Нажмите Y(д) или N(н) для подтверждения началы игры: ")
    if enter_game in ['N', 'n', 'н', 'Н']:
    print "Покинул игру…"
    else:
    print
    print "Вопросы:"

    for question in questions.values():
    count += 1
    create_question = "{count}) {question}:".format(count=count, question=question['name'])
    give_question = raw_input(create_question)
    if give_question not in question['answer']:
    start_point -= question['point']
    print "Неправильный ответ!\nВы потеряли {point} бал. Сейчас у вас: {start_point}\n".format(
    point=question['point'],
    start_point=start_point)
    wrong += 1
    else:
    start_point += question['point']
    print "ПРАВИЛЬНО!\nНакопили +{point} бал. Сейчас у вас: {start_point}\n".format(
    point=question['point'],
    start_point=start_point)
    correct += 1

    if len(questions) is count:
    print "=" * 28
    print "Вы вышли в финал ;)"
    print "Всего баллов: ", start_point
    print "Правильных ответа: ", correct
    print "Неправильных ответа: ", wrong

    if correct < wrong:
    print "Чувак, хреново ты справился :D"
    else:
    print "Пацаны, ваще, ребята, классно ваще - магете! :)"
    break

    # Если баллы пользователя достигли 0 или ниже
    # игра сразу завершается
    if start_point <= 0:
    print "=" * 28
    print "Игра окончена!"
    print "Правильных ответа: ", correct
    print "Неправильных ответа: ", wrong
    break
    else:
    print "Ошибка в имени игрока!"

    # Рестарт игры
    restart = raw_input("\nХотите продолжить игру Y(д) или N(н) ?: ")
    if restart in ['Y', 'y', 'д', 'Д']:
    print "\n" * 7
    start_game()
    print "\n" * 7

    if __name__ == "__main__":
    # Начинаем игру
    start_game()



    ps. Логику приложения не менял.
    Хотя её стоит поменять, слишком много написано излишнего
    adw/0
  • adwo

    Сообщения: 913 Репутация: N Группа: Джедаи

    Spritz 10 декабря 2011 г. 3:23, спустя 36 секунд

    В  чем каша ? что раздражает в коде ?

    прочитай полностью страницу по линку, что я дал
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 10 декабря 2011 г. 3:29, спустя 5 минут 43 секунды

    Хотя её стоит поменять, слишком много написано излишнего

    +1
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!