Найти - Пользователи
Полная версия: Помогите улучшить код
Начало » Python для новичков » Помогите улучшить код
1
web0worm
Доброго времени суток.
Несколько дней назад зарегистрировался на сайте 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()

Скажите пожалуйста, правильно ли здесь все написано? Как можно улучшить код? Под улучшить имею ввиду, например, как сделать так, чтобы при вводе чего то иного, кроме числа, не вылезала ошибка? Что еще можно добавить (или убрать)?
Буду очень благодарен за любую информацию
FishHook
try:
   guess_n = input("Ваше число: ")
except:
   print "I want integer"
   continue
Adastraz
Привыкай писать
if __name__ == u'__main__':
gameMain()
для запуска функции. Потом, вдруг если, с большими проектами работать будешь и будешь импортировать функции, чтоб не было лишних действий и лишних запусков ненужных функций
web0worm
FishHook
Спасибо!

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

Нашел еще баг. в любой момент можно ввести “n” и выйграть. Ну это, думаю, догадаюсь, как исправить.
Shaman
Процедуры там в следующем занятии после while и for. Лучше освоить и их, прежде чем использовать. А лучше пройти курс полностью.
prokoptsev
Принципиально использовать 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. Пользуйся этим сайтом как можно чаще. Там есть практически все ответы на вопросы что и как.

И вот тебе еще загадка: какое максимальное число раз ты сможешь сыграть в свою игру при одном запуске скрипта?
FishHook
prokoptsev
А еще не знаю, проходили вы это или нет, но использование конкатенации не самый лучий способ
Недавно обсуждалось, в скорости работы скрипта конкатенация не проигрывает на актуальных версиях питона.
prokoptsev
FishHook
Недавно обсуждалось, в скорости работы скрипта конкатенация не проигрывает на актуальных версиях питона.
А можете ссылку дать?
Shaman
По поводу цикла for/while. Некоторые IDE ругаются на неиспользованную переменную. Можно вот так:
def count(n):
    while True:
        yield n > 0
        n -= 1
c = count(10)
while c.next():
    pass
Сам так не делаю, но обкурить можно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB