Младший очень любит роботов-доставщиков, поэтому в какой-то момент мы купили ему такую игрушку. Не ту, что дорогая на радиоуправлении, а простенькую, с оттяжным моторчиком и светодиодами. Старшая это увидела и тоже себе такую попросила, купили и ей. Потом младший случайно увидел, что в доме есть второй ровер, и не его! Устроил скандал, пришлось ему отдать, а старшей купить третьего и попросить, чтобы спрятала.
И тут я подумал: а мог бы я сам сделать что-то типа такого дома, если бы игрушки не продавались, или вместо покупки второго-третьего-пятого? Вызов принят, засел за компас. Думал, что сделаю за вечер, но на самом деле с продумыванием конструкции, что где как должно соединяться, просидел дня четыре. И ещё столько же на сборку, потому что нельзя просто взять и с первого раза угадать все допуски и посадки :)
Моя версия крупнее, чем покупная игрушка, батареек хватает на подольше, и даже есть своего рода подвеска. Конечно, пространство для улучшений остаётся, но, получилось, кажется, довольно мило. Если вы хотите своим детям сделать прикольный сюрприз, я не поленился сверстать инструкцию по сборке, прикладываю её и все файлы. В архиве есть и редактируемый исходник в формате STEP. Просьба, кто напечатает, покажите в комментах :)
#diy@clockstackwheels#hobby@clockstackwheels
#Functions are first-class citizens in Python:
# They can be passed as arguments to other functions,
# returned as values from other functions, and
# assigned to variables and stored in data structures.
»> def myfunc(a, b):
... return a + b
...
»> funcs = [myfunc]
»> funcs[0]
<function myfunc at 0x107012230>
»> funcs[0](2, 3)
5
# Functions are first-class citizens in Python.
# They can be passed as arguments to other functions,
# returned as values from other #functions, and
# assigned to variables and stored in data structures.
»> def myfunc(a, b):
... return a + b
...
»> funcs = [myfunc]
»> funcs[0]
<function myfunc at 0x107012230>
»> funcs[0](2, 3)
5
https://docs.python.org/3/library/subprocess.html
The #subprocess module allows you to spawn new #processes, connect to their input/output/error pipes, and obtain their return codes. This module intends to replace several older #modules and #functions.
#python
https://docs.python.org/3/library/atexit.html
The #atexit module defines #functions to #register and #unregister cleanup functions. Functions thus registered are automatically executed upon normal interpreter termination. atexit runs these functions in the reverse order in which they were registered; if you register A, B, and C, at #interpreter#termination time they will be run in the order C, B, A.