プロが教えるわが家の防犯対策術!

こんにちは、MicroPythonを勉強中、
今日、「Pythonの変数を使って、プログラムをもっとコンパクトさせる」と言われましたが、どの変数を使ったら良いのか、分からなくて、MicroPythonに詳しい方々、宜しかったら、教えていただけますでしょうか?

ideoneという「簡単にコードを貼れて閲覧可能な」サービスを使っておりますので、よろしかったら、下記のリンクをクリックしていただいたら、自分のコードが見えます。

https://www.ideone.com/tddECZ

宜しくお願いします。

「MicroPython変数、関数について」の質問画像

A 回答 (2件)

なんだかな~



要は何かのデバイス向けのコマンド送信を短く書きたい
ということなんだろうけど、ただの数値の羅列やdefault value?
とか意味不明のこと言われても誰にも答えられませんよ。

デバイスを操作する目的と送信データフォーマットが有れば
いろいろ工夫出来るとは思います。
    • good
    • 0

まぁ、正直言うとmicropythonを知らないし。

Rapsberry Piも持ってないんだけど。
仮にmicropythonがPythonと同じ文法を持ってるとしたら、だ。

例えば

default_value = [0x84, 0x7F,
        0x00, 0x10,
        0x00, 0x30,
        0x00, 0x10,
        0x00, 0x10,
        0x33, 0x30,
        0x07, 0xC2,
        0x00, 0x00,
        0x00, 0x00,
        0x3F, 0xFF,
        0x00, 0x00,
        0x00, 0x08,
        0x00, 0xFF,
        0x00, 0x00,]

とリストを定義しておいて、

> 「0x84,0xFF」が「0x20,0x30」に自動に変えられるらしいです。

を意図するなら

[0x20 if i == 0x84 else 0x30 if i == 0xFF else i for i in default_value]

とすればいい。
つまり、関数spi_write_data_1は、

def spi_write_data_1(val):
 spi.write(bytes([0x00, 0x00] +
        [0x20 if i == 0x84 else 0x30 if i == 0xFF for i in val]))

と書いて

spi_write_data(default_value)

で実行すりゃあエエ、って話になるんだが・・・・・・。

しかし貴方のideone上のコードを見ると、だ。

> 21行目

0x20,0x03, #default value:0x84,0x7F

default valueが0x7Fなのに0x03になってる。

> 28行目

0x87,0xC2, #default value:0x07,0xC2

default valueが0x07なのに0x87に変更されている。

等と、「貴方の提示したルールに従っていない」。
よって、取り敢えず、これ以上はどうしようもないね。
貴方しか分からんルールなんでコッチ側では何とも言いようがない。
よって、以上、です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!