Palrom
По какой-то причине первая же строка, “import random” смещена на один пробел вправо, из-за чего будет ошибка! Перед запуском уберите пробел, или подскажите как его убрать, я на форуме новичок..
Чтобы выкладывать код на форуме без смещений
Если есть тип кода (python, bash и так далее):
[code python]здесь ставишь один пробел и переводишь строку
здесь вставляешь код и в каждой пустой строке в её начале ставишь пробел[/code]
Если это просто общий код:
[code]здесь можно вставлять код без каких-то ухищрений[/code]
Palrom
Доработка, оптимизация, дополнение - всё приветствуется!
Файл должен называться одним словом из маленьких букв или словами из маленьких букв, которые разделены подчёркиваниями. Типа shop.py или good_shop.py или my_good_shop.py .
Это связано с тем, что в питоне каждый его исходник сам по себе является модулем, который можно импортировать в другом скрипте. Если у него неправильное имя, то его нельзя будет импортировать через import.
В конце скрипта должны стоять ворота
Palrom
print('Добро пожаловать в "Уютный Магазинчик"!')
x = shopping()
no_purse(x)
if __name__ == '__main__':
print('Добро пожаловать в "Уютный Магазинчик"!')
x = shopping()
no_purse(x)
Это связано с тем, что в питоне каждый его исходник сам по себе является модулем, который можно импортировать в другом скрипте. Если у него нет ворот, то скрипт при импортировании сразу выполнится. А импортирование нужно обычно, когда ты хочешь взять какую-нибудь готовую функцию из какого-то скрипта и использовать её в другом скрипте. При этом тебе нужно лишь загрузить функции из него и не надо его выполнять. Чтобы загрузились только функции, существуют ворота, которые видят, импортируется скрипт или же выполняется сам по себе из командной строки. Если скрипт импортируется, ворота не пропускают. Если скрипт запускается сам по себе ворота пропускают и за ними всё выполняется.
Строки должны иметь длину не более восьмидесяти символов. Это связано не с размером экрана и новыми старыми экранами, а с чтением кода. Длинные строки сложнее умещать в оперативной памяти мозга, чем короткие. Соответственно, в голове должно быть свободно, чтобы туда загружать другие мысли о скрипте в любой момент. Когда же ты читаешь длинную строку, то она вся загружается в мозг и просто не остаётся места, чтобы о ней подумать с разных сторон. Когда таких строк ещё и много, то ты вообще ни о чём думать не можешь и просто запутываешься в коде. Мозг ограничен. Делай короткие строки до восьмидесяти символов, чтобы после каждой строки можно было остановиться и подумать
о многом.
Palrom
Здесь активный упор на функции (до классов я ещё не дошёл, но думаю для проги такого размера они и не нужны пока).
Ты и до классов не дошёл,
и до функций не дошёл. Это вот - то, что написано, - это не функции, а просто каша-малаша. Это как ребёнок сел бы за руль машины и стал бы там включать поворотники, крутить руль, смотреть в зеркала и бибикать проезжающим мимо машинам. При этом машина стояла бы незаведённой. Это не вождение и не управление транспортным средством, даже если сильно изображать рёв двигателя через дрын-дрын-дрын.
Так что до функций ты не дошёл. Надо тебе изучать этот вопрос.
Здесь писал подборку о том, как и что изучать. Там же найдёшь пример того, как разрабатывать, используя функции.
В твоей программе должно быть больше функций, и они будут получаться небольшими. Бывают функции и в одну строку, это не страшно. Функции будут появлятся типа зайти_в_магазин(), начать_покупку(), проверить_кошелёк(), прочитать_список_товаров(), выбрать_товар() и так далее. Имена пишешь на английском, естественно. Каждое имя функции должно отвечать на вопрос “что сделать?”. Твой ответ функции должен быть такой “приказываю, зайти в магазин!” - так она и будет называться, например enter_to_shop(). Всё это надо получить постепенно, используя метод разработки сверху вниз.
Пример небольшой
>>> def enter_to_shop():
... print('Вы в магазине')
... print('Выбирайте товар:')
... list_goods()
... product = select_product()
... print('Вы выбрали', product)
... print('До свидания, заходите ещё!')
...
>>> def list_goods():
... lst = ('масло',
... 'хлеб',
... 'кукуруза',
... 'кефир',
... 'кофе')
... for i in lst:
... message = wrap_product(i)
... print(message)
...
>>> def wrap_product(product):
... return 'На полке лежит {}'.format(product)
...
>>> def select_product():
... product = ''
... while not product:
... print('Введите название товара:')
... product = input()
... if not product:
... print('Ничего не введено, повторите ввод')
... return product
...
>>> def main():
... enter_to_shop()
...
>>> main()
Вы в магазине
Выбирайте товар:
На полке лежит масло
На полке лежит хлеб
На полке лежит кукуруза
На полке лежит кефир
На полке лежит кофе
Введите название товара:
Ничего не введено, повторите ввод
Введите название товара:
Ничего не введено, повторите ввод
Введите название товара:
Ничего не введено, повторите ввод
Введите название товара:
масло
Вы выбрали масло
До свидания, заходите ещё!
>>>
А так… это каша просто. Что есть здесь функции, что их не было бы, - разницы нет.