Если вы хотите получить только несколько чисел Фибоначчи, вы можете использовать матричный метод.
from numpy import matrix
def fib(n):
return (matrix('0 1; 1 1', dtype='object') ** n).item(1)
Это быстро, поскольку numpy использует алгоритм быстрого возведения в степень. Вы получаете ответ в O (log n). И это лучше, чем формула Бине, потому что она использует только целые числа. Но если вы хотите, чтобы все числа Фибоначчи были до n, тогда лучше сделать это путем запоминания.
Атрибут file
для StandardOutput
стал доступен только с systemd
версией 236. Какая у вас версия?
pi@wifi-relay:~ $ systemd --version
systemd 232
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN
Если она меньше версии 236 и вы не можете / don Если вы не хотите обновляться, вы можете просто обновить строку ExecStart
до:
/usr/bin/python3 -u /home/pi/bme.py >1 /home/pi/senselog.csv
... затем вернуть строку StandardOutput
к значению по умолчанию.
Таким образом, решение состоит в том, чтобы на самом деле вызвать .close () для файла, в который мы пишем сценарий python, тогда служба systemd работает, как и ожидалось. Обращайтесь к этой теме: https://askubuntu.com/questions/83549/python-script-wont-write-data-when-ran-from-cron последний ответ = f.close ()
и рабочий файл скрипта:
from time import strftime
import board
import busio
import adafruit_bme280
# Create library object using our Bus I2C port
i2c = busio.I2C(board.SCL, board.SDA)
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c,address=0x76)
# OR create library object using our Bus SPI port
#spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
#bme_cs = digitalio.DigitalInOut(board.D10)
#bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, bme_cs)
# change this to match the location's pressure (hPa) at sea level
bme280.sea_level_pressure = 1013.25
with open("/home/pi/senselog.csv", "w") as log:
while True:
temp_h = bme280.temperature
humidity = bme280.humidity
pressure = bme280.pressure
log.write("{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),str([temp_h,humidity,pressure])))
log.close()
time.sleep(60) ```