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

El problema que tengo es que funciona hasta que obtengo la parte 4.74. Luego se detiene y se queja de un tipo imposible de ordenar. Estoy completamente confundido en cuanto a lo que eso significa.¿Qué significa el error Tipo irrelevante en Python?

+0

¿De qué se queja? – dukevin

+3

¿No es 'price_loyal' una cadena (incluso si contiene números que ha encontrado con' find') que está tratando de comparar con un valor numérico (4.75)? ¿Qué sucede si prueba 'float (price_royal)' – Levon

+0

A diferencia de otros lenguajes de scripting populares, python está estrictamente tipado. Esto significa que si quieres convertir una cadena en un número, tienes que hacerlo explícitamente. –

Respuesta

6

price_loyal es una cadena (incluso si contiene números que ha encontrado con find) que está tratando de comparar con un valor numérico (4.75)? Para su comparación tratar

float(price_loyal)

ACTUALIZACIÓN (@agf gracias):

Con Python 3.x v recibe el mensaje de error que usted ha mencionado.

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

mientras que

>>> float(price_loyal) > 5000.0 
False 

La versión de Python hace una diferencia en este caso, por lo que probablemente sea una buena idea mencionar siempre qué versión se está trabajando con. Anteriormente ... con Python v 2.x

Sus comparaciones habrá apagado sin la conversión de su string a un float primero. Por ejemplo,

price_loyal 
'555.5' 

Esta comparación con una cuerda y flotador da True

price_loyal > 5000.0 
True 

Esta comparación con el flotador y el flotador da False como debería

float(price_loyal) > 5000.0 
False 

Puede haber otros problemas, pero esto parece uno.

+3

Ese es el comportamiento en Python 2. El comportamiento que está teniendo está en Python 3. – agf

+0

gracias, tuve que convertir tanto 4.75 como python_loyal en flotantes usando el float(), resuelto>.> – Humility

+0

@Humility No debería ser necesario convertir 7.75 en un 'float' ya que ya es uno, solo la cadena' price_loyal' – Levon

2

No soy un codificador de Python, pero parece que se está quejando de que intentes comparar una cadena con un flotador y supongo que Python no hace malabarismos contigo.

Debe convertir la cadena en un flotador, sin embargo, eso se hace en Python.

+0

'foo_float = float (foo_string)' –

+0

gracias, todo el flotador no lo corrigió, sin embargo, como el Sr. Burnap dijo explícito y KDi también Voy a sacarlo fuera del ciclo infinito – Humility

Cuestiones relacionadas