2012-05-28 13 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.") 

Problem mam jest to, że działa aż dostanę się 4,74 części. Następnie przestaje i skarży się na typ nie podlegający umowie. Jestem całkowicie zdezorientowany, co to oznacza.Co oznacza błąd Unorderable Type w języku Python?

+0

Na co narzeka? – dukevin

+3

Czy nie jest "price_loyal" ciąg znaków (nawet jeśli zawiera liczby znalezione za pomocą 'find'), które próbujesz następnie porównać z wartością numeryczną (4.75)? Co się stanie, jeśli spróbujesz 'float (price_royal)' – Levon

+0

W przeciwieństwie do innych popularnych języków skryptowych, python jest ściśle wpisany. Oznacza to, że jeśli chcesz przekonwertować ciąg na liczbę, musisz to zrobić jawnie. –

Odpowiedz

6

price_loyal to ciąg znaków (nawet jeśli zawiera liczby znalezione przy użyciu find), który próbujesz porównać z wartością numeryczną (4,75)? Dla Państwa porównania spróbować

float(price_loyal)

UPDATE (dzięki @agf):

Pythona v 3.x pojawi się komunikat o błędzie wymieniony.

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

natomiast

>>> float(price_loyal) > 5000.0 
False 

Wersja Python robi różnicę w tym przypadku, więc prawdopodobnie to dobry pomysł, aby zawsze wspomnieć, jaka wersja jeden pracuje z. ... Wcześniej z Pythona v 2.x

Twoje porównania będzie wyłączony bez konwertowania string Do float pierwszy. Np

price_loyal 
'555.5' 

To porównanie z ciągiem i pływaka daje True

price_loyal > 5000.0 
True 

To porównanie z pływaka i pływak daje False jak powinien

float(price_loyal) > 5000.0 
False 

Mogą istnieć inne problemy, ale to wygląda jak jeden.

+3

to zachowanie na Python 2. zachowanie on otrzymujesz jest na Python 3. – agf

+0

dzięki musiał konwertować zarówno 4.75, a python_loyal do pływaków korzystających z float(), rozwiązany>.> – Humility

+0

@Humility Konwersja wersji 7.75 na 'float' nie powinna być konieczna, ponieważ jest to już jeden, tylko ciąg' price_loyal' – Levon

2

Nie jestem Pythona koder, ale wygląda na to narzekają próbujesz porównać ciąg do pływaka i myślę, że Python nie żonglować dla Ciebie.

Powinieneś przekonwertować strunę na float, jednak jest to zrobione w Pythonie.

+0

'foo_float = float (foo_string)' –

+0

dziękuję, wszystkie float nie naprawiły tego jednak, jak Pan Burnap powiedział jednoznacznie i KDi tak dobrze im po prostu zamiar wziąć ją na zewnątrz nieskończonej pętli – Humility