1

とても簡単な質問で申し訳ありません。私は非常に簡単に思えるPythonを独学しようとしていますが、いくつかのことに行き詰まっています。

x = input("Enter a number: ")

if x > 10 & x < 20:
   print "YES!!!"

else:
   print "Not between 10 and 20"

C(疑似コード)で私はやります

if(x > 10 && x < 20)
     "yes"
else
     "no"

それはうまくいくでしょう..しかし、PythonではYESを出力し続けます!!! 何を入力しても。私は何を間違っていますか?

私がそれを実行すると:

Enter a number: 3
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 13
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 6
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 13
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 4
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 8
Not between 10 and 20
>>> ================================ RESTART ================================
>>> 
Enter a number: 13
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 3
YES!!!
>>> ================================ RESTART ================================
>>> 
Enter a number: 8
Not between 10 and 20
4

4 に答える 4

8

&Pythonのビットごとの「and」演算子です。必要なのは、論理的な「and」であり、これは単なるキーワードです: and

if x > 10 and x < 20:

---ペダンティックな説明---

PythonTrueFalseは単に1とであるため、それが唯一の問題である場合は、実際には問題ありません0。ただし、実際に問題を引き起こす別のことが起こっています。具体的には、ビット演算子は比較演算子よりも優先されます。その結果、Python は (たとえば、 if x = 5)5 > 10 & 5 < 20を見て、それを として解析します。5 > (10 & 5) < 20これは連鎖比較です。これはさらに次のように拡張されます。

(5 > (10 & 5)) and ((10 & 5) < 20)

はゼロであるためTrue、次のように評価されます。10 & 5

(5 > 0) and (0 < 20)
True

10 & 8が に評価されることに注意して8ください。入力8すると、条件を満たさないという「正しい」結果が得られるのはそのためです (最初の条件で 8 は 8 未満ではないため)。

(8 > (10 & 8)) and ((10 & 8) < 20)
(8 > 8) and (8 < 20)
False
于 2013-09-05T22:42:25.107 に答える
1

演算子 & は二項演算子です。おそらく「and」論理演算子を使用したいと思うでしょう。

例: (a と b) は真です。

「&」を「and」に置き換えます。

于 2013-09-05T22:46:35.007 に答える
0

Python の論理 AND はandキーワードであり、 ではありません&。それはビットごとの操作です。

于 2013-09-05T22:43:38.010 に答える