-2

ブール論理を使用して変数を定義しようとしています。

if BestX!=1 or starcount!=1:
  x=cat

if BestX==1 or starcount==1:
  x=dog

ここで、BestX と starcount は両方ともリストです。x基本的に、いずれかのリストに複数の項目がある場合、変数を「cat」として定義したくありません。ただし、両方のリストに (同時に) 項目が 1 つしかない場合は、x「犬」と定義する必要があります。

starcount に 1 つのアイテムがあり、BestX に多数のアイテムがある場合、私の論理は現在立っています。これらのいずれかが 1 より大きい場合、x が「犬」として定義されるように構成するにはどうすればよいですか。

(抽象的でごめんなさい)

4

4 に答える 4

4

Python のバージョンの三項演算子で簡潔に行うことができます。

x = dog if len(BestX) == 1 and len(starcount) == 1 else cat
于 2013-08-01T20:30:22.147 に答える
4

いずれかのリストに少なくとも 1 つの要素がある場合は、次のようにしますx=dog

x=cat
if len(BestX) > 0 or (starcount) > 0:
  x=dog

あなたの質問は矛盾した要件を述べているようです。最初に、両方のリストに要素が1 つだけx=dogあるかどうかを尋ねます。これは次のように達成されます。

x=cat
if len(BestX) == 1 and (starcount) == 1:
  x=dog

明確化すると、2番目の解決策はOPの質問を解決したようです

于 2013-08-01T20:31:28.587 に答える
3

問題を理解している場合、実際に必要なのは次のとおりです。

if len(BestX) != 1 or len(starcount) != 1:
    x=cat
else:
    x=dog

BestXコードの唯一の大きな問題は、長さではなく、それ自体をと比較して1いて、リストが と等しくならないこと1です。


一方、2 つの条件はスペース全体をカバーしていません。値の 1 つが 1 で、もう 1 つがそうでない場合、どちらの条件も true にはなりません。これは、あなたが望むものではないと思います。

しかし、あなたの質問は矛盾しているので、あなたが実際に何を望んでいるのかわかりません。あなたの英語をコードに翻訳します。うまくいけば、それで十分です。

いずれかのリストに複数の項目がある場合、変数 x を「cat」として定義したくありません。

…おそらく、それを次のように定義たいという意味dogですか?これは次のようになります。

if len(BestX) > 1 or len(starcount) > 1:
    x=dog

ただし、両方のリストに (同時に) 項目が 1 つしかない場合は、x を「犬」と定義する必要があります。

…これは、他のケースを補完するものであると思われます。その場合は、次のとおりです。

else:
    x=dog

…または、2 つのリストを合わせて合計 1 つの項目があるかどうかを知りたいですか?

elif len(BestX) + len(starcount) == 1:
    x=dog

…それ以外の場合 (たとえば、各リストに正確に 1 がある場合、または各リストに 0 がある場合) はx未定義になるということですか?

xまた、あなたの説明は両方の場合に設定されていることに注意してくださいdog(または、少なくとも一方の場合は「猫にならないように」、もう一方の場合には「犬に」)、これはばかげているようです。


Python では、リストを 1 と比較しても意味がないのに、なぜリストを 1 と比較できるのか疑問に思われるかもしれません。Python では、通常、まったく関係のない型の 2 つの項目が等しいかどうかを尋ねることができ、常に等しくないと答えるだけです。>の代わりに を使用しようとすると!=TypeError(Python3 では — Python 2 では、一貫した、しかし恣意的で意味のない答えが得られていました) が得られます。

于 2013-08-01T20:30:20.677 に答える