2012-05-28 4 views
6
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.") 

Das Problem, das ich habe, ist, dass es läuft, bis ich den 4,74 Teil bekomme. Dann hört es auf und beschwert sich über einen unbeständigen Typ. Ich bin völlig verwirrt, was das bedeutet.Was bedeutet der Fehler Unorderable Type in Python?

+0

Worüber beklagt es sich? – dukevin

+3

Ist 'price_loyal' kein String (selbst wenn er Zahlen enthält, die Sie mit' find' gefunden haben), die Sie dann mit einem numerischen Wert (4.75) vergleichen wollen? Was passiert, wenn Sie 'float (price_royal)' versuchen – Levon

+0

Im Gegensatz zu anderen gängigen Skriptsprachen ist Python streng typisiert. Wenn Sie also eine Zeichenfolge in eine Zahl konvertieren möchten, müssen Sie dies explizit tun. –

Antwort

6

price_loyal ist ein String (auch wenn er Zahlen enthält, die Sie mit find gefunden haben), die Sie mit einem numerischen Wert (4.75) vergleichen möchten? Für Ihren Vergleich versuchen

float(price_loyal)

UPDATE (dank @agf):

Mit Python v 3.x Sie die Fehlermeldung erhalten, die Sie erwähnt.

>>> 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() 
>>> 

während

>>> float(price_loyal) > 5000.0 
False 

Die Version von Python einen Unterschied in diesem Fall macht, so ist es wahrscheinlich eine gute Idee, immer zu erwähnen, welche Version man mit arbeitet. Früher ... mit Python v 2.x

Ihre Vergleiche werden ausgeschaltet sein, ohne Ihre string ein float erste Umwandlung. ZB

price_loyal 
'555.5' 

Dieser Vergleich mit String und Schwimmer True

price_loyal > 5000.0 
True 

Dieser Vergleich gibt False, wie es sollte

float(price_loyal) > 5000.0 
False 

Es mit Schwimmer und Schwimmer gibt möglicherweise andere Probleme, aber das sieht wie einer aus.

+3

Das ist das Verhalten auf Python 2. Das Verhalten, das er bekommt, ist auf Python 3. – agf

+0

danke, musste sowohl 4.75 und python_loyal in Floats mit dem float(), gelöst>.> – Humility

+0

konvertieren @Humility Es sollte nicht notwendig sein, 7.75 in ein 'float' zu konvertieren, da es bereits eins ist, nur die Zeichenfolge' price_loyal' – Levon

2

Ich bin kein Python-Programmierer, aber es sieht so aus, als würde es sich beschweren, dass Sie versuchen, eine Zeichenkette mit einem Gleitkomma zu vergleichen, und ich nehme an, Python jongliert nicht für Sie.

Sie sollten die Zeichenfolge in einen Float konvertieren, aber das ist in Python getan.

+0

'foo_float = Schwimmer (foo_string)' –

+0

danke, alle Schwimmer tat es beheben jedoch wie Herr Burnap sagte ausdrücklich und KDi auch so Ich werde es nur außerhalb der Endlosschleife nehmen – Humility