1

Scratch からブロードキャストを受信し、そのブロードキャストに基づいてどこに進むかを決定するプログラムを作成しています。このコードはブロードキャスト (リスト項目) を文字列に変換し、.split() を使用してその文字列をリストに分割します。唯一の問題は、ブロードキャストが 2 語ではなく 1 語である可能性があることです。

困っているところ

scratchbroadcast =  str(msg[1])

    BroadcastList = scratchbroadcast.split()

    #starts the switch statement that interprets the message and proceeds
    #to the appropriate action
    v = BroadcastList[0]
    w = BroadcastList[1]
    if BroadcastList[1] == '':
        w = "na"
4

2 に答える 2

0

では、まずこれを考えてみましょう。3 番目の項目はどうでしょうか。それとも4番目?それとも42秒?

文字列に区切り文字 (スペースなど) が含まれていない場合、2 つの項目のリストが作成されず、そのうちの 1 つが空白になり、1 つの項目のみのリストになります。

Python では、通常、何かの長さは組み込みlen()関数によって取得されます。

len([])              # == 0
len(["foo"])         # == 1
len(["foo", "bar"])  # == 2

したがって、次のようにします。

if len(broadcast_list) == 1:
    broadcast_list += [""]

同じことを行う他の方法には、broadcast_list.append("")と がありbroadcast_list.extend([""])ます。どちらを使用するかは完全にあなた次第です。+=.extendは多かれ少なかれ同等ですが.append、単一の要素しか追加できません。

コードの残りの部分を見ると、case呼び出しは期待どおりに機能しません。Python では、文字列は真であり、'string' or 'otherString'基本的にはTrue or True. orは厳密にはブール演算子であり、「これまたはあれ」には使用できません。

Python は、switch ステートメントがないことで有名です。これを実装しようとするあなたの試みは、あなたがそれを経験していれば、実際には一種のかわいいものになるでしょう.そのようなものは、Python OOPで非常に良い練習になり、関数をファーストクラスのオブジェクトとして渡すことができます. (私の日常的な Python の使用では、そのようなことを行う必要はほとんどありませんが、概念的なツールキットに含まれていることは素晴らしいことです。)

lowerPython 文字列にはメソッドがあることを知って喜んでいるかもしれません。それを使用すると、コードは次のようになります。

v = broadcast_list[0].lower()
if v == 'pilight':
    # ...
else if v == 'motor':
    # ...
else if v == 'camera':
    # ....

余談ですが、Python コードをフォーマットするためのデファクト スタンダードであるPEP8を確認することをお勧めします。他の人がコードをすぐに理解できるようにしたい場合は、少なくともその最も基本的な命題に準拠する必要があります。たとえば、クラスはキャメルケースで、変数は小文字にするなど、その逆ではありません。

于 2014-07-02T17:21:40.750 に答える
0

BroadcastList単語が 1 つしか含まれていない場合はBroadcastList、単一要素のリストになります。

>>> "foo".split()
['foo']

明らかに、リストの 2 番目の項目が空の文字列であるかどうかを確認することはできません''2 番目の要素はありません。代わりに、リストの長さを確認してください。

w = "na" if len(BroadcastList) == 1 else BroadcastList[1]

tryまたは、をキャッチするために使用しますIndexError(許可よりも許しを求める方が簡単です):

try:
    w = BroadcastList[1]
except IndexError:
    w = "na"
于 2014-07-02T17:17:27.327 に答える