1. ホーム
  2. python

Understanding TypeError: unsupported operand type(s) for ^: Python の 'float' と 'int' (単純)

2022-02-18 11:08:43
<パス

^ Pythonの正しい理解(初級者向け)

バブルソートと選択ソートの長さと安定性を比較するときの平均、間隔、分散を計算するプログラムをpythonでコーディングしてみました。
コードは以下の通りです。

i=eval(input("": "))#Give the number of data
list1=[]
for x in range(0,i):
    list1.append(eval(input()))#Input data
list2=[]
for n in range(0,i):
    list2.append((list1[n]-(sum(list1)/i))^2)
print("Maximum and minimum spacing:",max(list1)-min(list1),"Mean:",sum(list1)/i,"Variance is:",sum(list2)/i)


すると、プログラムがエラーになります。

Traceback (most recent call last):
  File "C:/Users/22655/Desktop/yy.py", line 7, in <module>
    list2.append((list1[n]-(sum(list1)/i))^2)
TypeError: unsupported operand type(s) for ^: 'float' and 'int'


エラーは list2.append((list1[n]-(sum(list1)/i))^2) という行の ^ にあり、エラーには float vs. int integer と記載されています。
としてデータを入れてください。

<テーブル 5 0.029918670654296875 0.03444409370422363 0.036663055419921875 0.04584145545959473 0.0288238525390625

その後、コードを次のように変更しました。

list2.append((list1[n]-(sum(list1)/i))**2)


結果は正しく実行されます

<ブロッククオート

最大間隔と最小間隔 0.017017602920532227 平均値。0.035138225541992 分散は。3.689622309593687e-05

IDLEとの相互作用のもと、(^)記号の意味を探る。

>>> (0.213253632)^2
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    (0.213253632)^2
TypeError: unsupported operand type(s) for ^: 'float' and 'int'
>>> (4)^2
6
>>> (4)*(4)
16
>>> (4)**2
16
>>> (0.213253632)**2
0.04547711156119142
>>> 


pythonの^記号を指数演算と誤解していたことが判明しました。pythonでは一般に、指数演算を行うには (**) または pow(a,b)


>>> pow(2,5)
32
>>> pow(5,2)
25
>>> 2**5
32
>>> 5*2
25


そして、^はもうpythonでは指数を意味しない。

<ブロッククオート

はビット単位の等オア論理演算子です。

Pythonの^は明らかに 等オルの論理演算子
ヘテロジニアス論理演算子とは何ですか?
最も一般的なものは、以下の例で説明するように、or論理演算子とwith論理演算子のスーツです。
or 演算子です。

  01010101
V 11001010
------------
  11011111


または操作 ここで、0は1との演算の後に1、1は1との演算の後に1、0は0との演算の後に0である。
同様に
with in arithmetic 0は0と1の演算の後0、1は1の演算の後1
で表される等オルの論理演算子の演算規則は以下の通りです。
1は0で1を操作し、1は1で0を操作し、0は0で0を操作する
上記0, 1はバイナリ

pythonで^を使って計算する

>>> 5^2


コンピュータは、まず5と2を別々に2進数に変換します
5 ==> 101
2 ==> 010
次に、異種演算または論理演算を行う
というのは 101^010 その結果、111
111 ==> 7 の結果に続く。

>>> 5^2
7


このほかにも、ビット単位の論理演算子はたくさんありますが、ここでは割愛します。