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

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

  • tartar

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

    Spritz 9 декабря 2011 г. 16: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 &quot;Чувак, хреново ты справился :D&quot;
    else:
    print &quot;Пацаны, ваще, ребята, классно ваще - магете! :)&quot;
    break

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Разве в питоне нету библиотек по работе с терминалом? {+++190+++} Попробуй сделать тупо системный вызов команды clear из питона, на линуксе должно сработать, на винде точно не сработает {+++144+++} perl -e &quot;system &#39;clear&#39;;&quot;
    запустил в терминале на своём вдс - он отчистился, значит должно работать и с питоном
  • phpdude

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

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

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

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

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

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


    for key, value in Question.items():


    CreateQuestion = &quot;(%i) %s:&quot; % (Count, Question[key][&#39;name&#39;])




  • adwo

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

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

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

    import os

    def clear():
    if os.name == &#39;posix&#39;:
    os.system(&#39;clear&#39;)

    elif os.name == (&#39;ce&#39;, &#39;nt&#39;, &#39;dos&#39;):
    os.system(&#39;cls&#39;)


    clear()
    {+++40+++} Вот это, видимо, ты не читал? http://www.python.org/dev/peps/pep-0008/
  • adw0rd

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    # coding: utf-8

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


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

    print &quot;=&quot; * 30
    print &quot;[ Simple Python Game v0.1 ]&quot;
    print &quot;=&quot; * 30

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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