(Python) TypeError: can't multiply sequence by non-int of type 'str'

Iniciado por Linton, 15 Febrero 2013, 19:21 PM

0 Miembros y 3 Visitantes están viendo este tema.

Linton

Intento correr este programilla:

Código (python) [Seleccionar]
print ("Calcular un rectángulo")
largo = input("Longitud: ")
ancho = input("Altura: ")
print ("Área", largo * ancho)


Y continuamente me da error; he probado todas las variantes de las comillas: "largo" * "ancho", "largo * ancho"...

¿Dónde está el fallo? Gracias, un saludo.

Novlucker

El input retorna un string, necesitas convertirlo a número :P
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Linton

Aaah vaya...  :-[

¿Así por ejemplo?
Código (python) [Seleccionar]
print ("Calcular un rectángulo")
largo = input("Longitud: ")
ancho = input("Altura: ")
a = int(ancho)
b = int(largo)
print ("Área", a * b)

Pero entonces sólo puedo emplear números enteros  >:(

¡Gracias por tu ayuda!  :)

Novlucker

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Linton

Hum, pensándolo mejor... no me entero  :-\ Si la entrada en el input es un número, ¿por qué hay que convertirlo en número? ¿Por qué retorna un string?

xiruko

CitarSi la entrada en el input es un número, ¿por qué hay que convertirlo en número?

lo que tu aqui llamas 'numero' no es mas que una cadena compuesta exclusivamente de caracteres '0123456789' (mas el '.' si es un numero real). luego si tu en el input sabes que se deben introducir solo numeros, debes convertir la cadena a un entero o real para poder operar con ese numero.

Citar¿Por qué retorna un string?

pues simplemente porque la funcion esta hecha asi, y supongo que es porque es el caso mas general. luego tu puedes hacerte una funcion tuya que sea solo para leer numeros, en la que no tendras mas que un input y luego deberas recorrer la cadena que retorna mirando que todos los caracteres sean numeros y que haya como maximo 1 punto. despues de eso, solo te faltaria convertirlo a int o float dependiendo de si hay un punto o no, y retornar el numero resultante. igual ya viene 'de serie' en python, pero no estoy muy metido en este lenguaje.

un saludo!

Novlucker

El input retorna un valor de tipo string, tal vez lo estas confundiendo con el antiguo input.

En python 2.3 raw_input retorna un string mientras que input retorna números, pero en el caso de python 3, solo existe input, el cual devuelve un string.

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

177600531

No soy un experto en python hace poco he empezado a estudiarlo 3 días exactamente xD pero yo no veo ningún error en el programa. Lo único que veo es que utilizas caracteres acentuados, estos caracteres causan errores de sintaxis.

Para solucionarlo basta con definir el encoding a utilizar insertando la siguiente línea al comienzo de nuestro código: 

Código (python) [Seleccionar]
#-*- coding: utf-8 -*-


Softrix18

largo = int(input("Longitud: "))

La mejor manera es esta, ya que el valor que que entre tiene que ser int y no otros valores como string.

Saludos!

Linton