Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Linton en 15 Febrero 2013, 19:21 pm



Título: (Python) TypeError: can't multiply sequence by non-int of type 'str'
Publicado por: Linton en 15 Febrero 2013, 19:21 pm
Intento correr este programilla:

Código
  1. print ("Calcular un rectángulo")
  2. largo = input("Longitud: ")
  3. ancho = input("Altura: ")
  4. 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.


Título: Re: (Python) TypeError: can't multiply sequence by non-int of type 'str'
Publicado por: Novlucker en 15 Febrero 2013, 20:03 pm
El input retorna un string, necesitas convertirlo a número :P


Título: Re: (Python) TypeError: can't multiply sequence by non-int of type 'str'
Publicado por: Linton en 15 Febrero 2013, 20:11 pm
Aaah vaya...  :-[

¿Así por ejemplo?
Código
  1. print ("Calcular un rectángulo")
  2. largo = input("Longitud: ")
  3. ancho = input("Altura: ")
  4. a = int(ancho)
  5. b = int(largo)
  6. print ("Área", a * b)
Pero entonces sólo puedo emplear números enteros  >:(

¡Gracias por tu ayuda!  :)


Título: Re: (Python) TypeError: can't multiply sequence by non-int of type 'str'
Publicado por: Novlucker en 15 Febrero 2013, 20:36 pm
En lugar de int, float :)

Saludos


Título: Re: (Python) TypeError: can't multiply sequence by non-int of type 'str'
Publicado por: Linton en 15 Febrero 2013, 20:46 pm
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?


Título: Re: (Python) TypeError: can't multiply sequence by non-int of type 'str'
Publicado por: xiruko en 15 Febrero 2013, 21:45 pm
Citar
Si 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!


Título: Re: (Python) TypeError: can't multiply sequence by non-int of type 'str'
Publicado por: Novlucker en 15 Febrero 2013, 22:02 pm
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


Título: Re: (Python) TypeError: can't multiply sequence by non-int of type 'str'
Publicado por: 177600531 en 15 Febrero 2013, 23:00 pm
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
  1. #-*- coding: utf-8 -*-



Título: Re: (Python) TypeError: can't multiply sequence by non-int of type 'str'
Publicado por: Softrix18 en 17 Febrero 2013, 01:19 am
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!


Título: Re: (Python) TypeError: can't multiply sequence by non-int of type 'str'
Publicado por: Linton en 17 Febrero 2013, 09:36 am
¡Muchas gracias a todos!  :) Un saludote.