Уведомления

Группа в Telegram: @pythonsu

#1 Март 20, 2013 16:26:17

web0worm
Зарегистрирован: 2013-03-20
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите улучшить код

Доброго времени суток.
Несколько дней назад зарегистрировался на сайте codecademy и начал изучать питон (дошел пока что только до изучения циклов while и for)
Написал эту простую игру на угадывание чисел. (ранее не программировал, не пинайте строго, пожалуйста)

from random import randint
def gameMain():
    print "Попытайтесь угадать число!"
    
    n = randint(1,101)
    i = 1
    #print n
    while i <= 10:
        print "Попытка: " + str(i)
        i += 1
        guess_n = input("Ваше число: ")
    
        if guess_n == n:
            print "Вы УГАДАЛИ! :-)"
            print "Загаданное число - " + str(n) + ". Заново? (y/n)"
            ch = raw_input()
            if ch == "n":
                print "Спасибо за игру!"
                break
            else:
                gameMain()
        else:
            if guess_n > n:
                print "Загаданное число меньше вашего!"
            else:
                print "Загаданное число больше вашего!"
    else:
        print "Вы проиграли! Загаданное число было - " + str(n) + ". Заново? (y/n)"
        ch = raw_input()
        if ch == "n":
            print "Спасибо за игру!"
        else:
                gameMain()
gameMain()

Скажите пожалуйста, правильно ли здесь все написано? Как можно улучшить код? Под улучшить имею ввиду, например, как сделать так, чтобы при вводе чего то иного, кроме числа, не вылезала ошибка? Что еще можно добавить (или убрать)?
Буду очень благодарен за любую информацию



Жажду знаний.

Отредактировано web0worm (Март 20, 2013 16:27:07)

Офлайн

#2 Март 20, 2013 17:25:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите улучшить код

try:
   guess_n = input("Ваше число: ")
except:
   print "I want integer"
   continue



Офлайн

#3 Март 20, 2013 17:39:32

Adastraz
Зарегистрирован: 2012-10-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите улучшить код

Привыкай писать

if __name__ == u'__main__':
gameMain()
для запуска функции. Потом, вдруг если, с большими проектами работать будешь и будешь импортировать функции, чтоб не было лишних действий и лишних запусков ненужных функций

Офлайн

#4 Март 20, 2013 18:08:30

web0worm
Зарегистрирован: 2013-03-20
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите улучшить код

FishHook
Спасибо!

Adastraz
Не совсем понял, мы такого не учили, можно, пожалуйста, поподробнее, или где почитать про это?

Нашел еще баг. в любой момент можно ввести “n” и выйграть. Ну это, думаю, догадаюсь, как исправить.



Жажду знаний.

Отредактировано web0worm (Март 20, 2013 18:14:24)

Офлайн

#5 Март 20, 2013 20:05:35

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Помогите улучшить код

Процедуры там в следующем занятии после while и for. Лучше освоить и их, прежде чем использовать. А лучше пройти курс полностью.

Офлайн

#6 Март 21, 2013 08:50:36

prokoptsev
Зарегистрирован: 2012-07-17
Сообщения: 13
Репутация: +  1  -
Профиль   Отправить e-mail  

Помогите улучшить код

Принципиально использовать while/else?
На мой взгляд с for/else можно избежать ненужной переменной i.
Пример:

for _ in xrange(10):
    game_code
else:
    fail_message
А еще не знаю, проходили вы это или нет, но использование конкатенации не самый лучий способ. Лучше использовать форматирование. Например через format
web0worm
Adastraz
Не совсем понял, мы такого не учили, можно, пожалуйста, поподробнее, или где почитать про это?
Вообще если прям так и загуглить (“if __name__ == ‘__main__’:”) выдаст много ссылок с ответом что это и с чем едят (в частности тут). А вообще вот ссылка на оф. док. http://docs.python.org/2/library/__main__.html. Пользуйся этим сайтом как можно чаще. Там есть практически все ответы на вопросы что и как.

И вот тебе еще загадка: какое максимальное число раз ты сможешь сыграть в свою игру при одном запуске скрипта?

Отредактировано prokoptsev (Март 21, 2013 08:51:39)

Офлайн

#7 Март 21, 2013 09:38:08

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите улучшить код

prokoptsev
А еще не знаю, проходили вы это или нет, но использование конкатенации не самый лучий способ
Недавно обсуждалось, в скорости работы скрипта конкатенация не проигрывает на актуальных версиях питона.



Офлайн

#8 Март 21, 2013 09:49:44

prokoptsev
Зарегистрирован: 2012-07-17
Сообщения: 13
Репутация: +  1  -
Профиль   Отправить e-mail  

Помогите улучшить код

FishHook
Недавно обсуждалось, в скорости работы скрипта конкатенация не проигрывает на актуальных версиях питона.
А можете ссылку дать?

Офлайн

#9 Март 21, 2013 14:11:23

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Помогите улучшить код

По поводу цикла for/while. Некоторые IDE ругаются на неиспользованную переменную. Можно вот так:

def count(n):
    while True:
        yield n > 0
        n -= 1
c = count(10)
while c.next():
    pass
Сам так не делаю, но обкурить можно.

Отредактировано Shaman (Март 21, 2013 14:12:00)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version