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

Yapmakta olduğum sorun, 4.74 parçasını elde edene kadar çalışacağım. O zaman durur ve geçilmez tip hakkında şikayet eder. Bunun ne anlama geldiği konusunda tamamen kafam karıştı.Düzeltilemez Tür hatası Python'da ne anlama geliyor?

+0

Ne hakkında şikayet ediyor? – dukevin

+3

'price_loyal'' dize ('find' ile bulduğunuz sayıları içeriyor olsa bile) bir sayısal değerle (4.75) karşılaştırmaya çalıştığınız bir string değil midir? Float (price_royal) ' – Levon

+0

'u denerseniz ne olur? Diğer popüler betik dillerinden farklı olarak, python kesinlikle yazılmıştır. Bu, bir dizeyi bir sayıya dönüştürmek istiyorsanız, bunu açıkça yapmanız gerektiği anlamına gelir. –

cevap

6

price_loyal bir dize (find ile bulduğunuz sayıları içeriyor olsa bile) sayısal bir değerle (4.75) karşılaştırmaya çalışıyorsunuzdur? senin Karşılaştırma için

float(price_loyal)

GÜNCELLEME (teşekkürler @agf) deneyin: Python v 3.x ile

Eğer belirtilen hata iletisi alıyorum. Python sürümü bu durumda bir fark yaratıyor

>>> float(price_loyal) > 5000.0 
False 

oysa

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

, bu yüzden muhtemelen iyi bir fikir her zaman bir ile çalışıyor hangi sürümünün söz. önce ... Python v 2.x ile

Kişisel karşılaştırmalar sizin string bir float ilk dönüştürmeden kapanacaktır. dize ve şamandıra ile bu karşılaştırma True

price_loyal > 5000.0 
True 
verir

price_loyal 
'555.5' 

Ör

şamandıra ve şamandıra ile bu karşılaştırma False olması gerektiği gibi

float(price_loyal) > 5000.0 
False 

, başka sorunlar da olabilir ama bu verir birine benziyor.

+3

Bu davranış, Python 2 üzerinde. Onun davranış Python 3 üzerinde olduğunu. – agf

+0

teşekkürler, float(), çözülmüş> kullanarak> 4.75 ve python_loyal şamandıra dönüştürmek zorunda kaldı>> – Humility

+0

@Humility zaten bir, sadece 'dize' fiyat_loyal' beri 7.75 bir 'float' dönüştürmek için gerekli olmamalıdır – Levon

2

Python kod yazıcısı değilim, ancak bir katarı dize ile karşılaştırmaya çalıştığınız için şikayetçi gibi görünüyor ve sanırım Python sizin için hokkabazlık yapmıyor.

Dizeyi bir float'a dönüştürmelisiniz, ancak bu Python'da yapılır.

+0

'foo_float = float (foo_string)' –

+0

teşekkür ederim, Bay Floap açık ve KDi'nin dediği gibi, tüm float bunu düzeltmedi. sadece sonsuz döngü dışına çıkaracağım im – Humility