1. ホーム
  2. python

[解決済み] PythonのUnorderable Typeエラーの意味とは?

2022-02-05 04:24:26

質問

from urllib.request import urlopen
page1 = urlopen("http://www.beans-r-us.biz/prices.html")
page2 = urlopen("http://www.beans-r-us.biz/prices-loyalty.html")
text1 = page1.read().decode("utf8")
text2 = page2.read().decode("utf8")
where = text2.find(">$")
start_of_price = where + 2
end_of_price = where + 6
price_loyal = text2[start_of_price:end_of_price]
price = text1[234:238]
password = 5501
p = input("Loyalty Customers Password? : ")
passkey = int(p)

if passkey == password:
    while price_loyal > 4.74:
        if price_loyal < 4.74:
            print("Here is the loyal customers price :) :")
            print(price_loyal)
        else:
            print( "Price is too high to make a profit, come back later :) ")
else:
    print("Sorry incorrect password :(, here is the normal price :")
    print(price)
input("Thanks for using our humble service, come again :), press enter to close this window.")

私が抱えている問題は、4.74の部分まで実行されることです。その後、停止し、順序付けできない型があると文句を言われます。それが何を意味するのか、完全に混乱しています。

解決方法は?

price_loyal は文字列です。 find と比較しようとしているのでしょうか?比較のために

float(price_loyal)

アップデイト (@agf さんありがとうございます)。

Pythonで v 3.x というエラーメッセージが表示されます。

>>> price_loyal = '555.5'
>>> price_loyal  > 5000.0
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    price_loyal > 5000.0
TypeError: unorderable types: str() > float()
>>> 

ここで

>>> float(price_loyal) > 5000.0
False

この場合、Pythonのバージョンによって違いが出てきますので、常にどのバージョンで作業しているのかを記載しておくとよいでしょう。 前回までのあらすじ......Pythonを使用 v 2.x

を変換しないと比較対象がずれてしまいます。 stringfloat を最初に指定します。例

price_loyal
'555.5'

この文字列と浮動小数点数の比較から True

price_loyal > 5000.0
True

このfloatとfloatとの比較から False そのまま

float(price_loyal) > 5000.0
False

他にも問題があるかもしれませんが、これはその一つに見えます。