Astuto Posted December 16, 2016 at 11:00 AM Report Share #601289 Posted December 16, 2016 at 11:00 AM Boas! Estou a começar a programar e tou um bocado encalhado na questão das classes/objectos. Como é uma questão de por ideias em prática e explorar, eu comecei agora com classes e então decidi criar uma classe que calcula o volume de um aquariao rectangular. Algo está errado no metodo que está a calcular o volume e não estou a chegar lá. Alguém pode dar uma dica? class Sample: altura = None comprimento = None largura = None def __init__(self, altura, comprimento, largura): self.altura = altura self.comprimento = comprimento self.largura = largura def showInputs(self): print("A Altura e: " + self.altura) print("A comprimento e: " + self.comprimento) print("A Altura e: " + self.largura) def calcVolume(self): return (self.altura * self.comprimento * self.largura) / 1000 print("\n") print("Introduzir as medidas do aquario") print("\n") altura = input("Introduzir a altura do aqua: ") comprimento = input("Introduzir o comprimento do aqua: ") largura = input("Introduzir a largura medidas do aqua: ") aqua1 = Sample(altura, comprimento, largura) print("\n") aqua1.showInputs() print ("\n") print(aqua1.calcVolume()) Erro: Traceback (most recent call last): File "C:/Users/dguimaraes/Documents/01 - DEV/02 - Python/classes.py", line 36, in <module> print(aqua1.calcVolume()) File "C:/Users/dguimaraes/Documents/01 - DEV/02 - Python/classes.py", line 20, in calcVolume self.result = (self.altura * self.comprimento * self.largura) / 1000 TypeError: can't multiply sequence by non-int of type 'str Link to comment Share on other sites More sharing options...
pedropregueiro Posted December 16, 2016 at 12:19 PM Report Share #601290 Posted December 16, 2016 at 12:19 PM Boas! Estás a receber esse erro por estar a tentar multiplicar uma ou mais strings. altura = input("Introduzir a altura do aqua: ") comprimento = input("Introduzir o comprimento do aqua: ") largura = input("Introduzir a largura medidas do aqua: ") O método input retorna sempre strings portanto podes fazer 1 de 2 coisas: converter esses valores para inteiro a seguir ao input acrescentar ao método init a conversão dos valores para inteiros 1 Report Link to comment Share on other sites More sharing options...
Nilo Menezes Posted December 16, 2016 at 03:42 PM Report Share #601296 Posted December 16, 2016 at 03:42 PM Como o pedro falou, tens que converter para um tipo numérico antes de multiplicar. Recomendo usar o tipo float, pois medidas podem não ser inteiras (1.5 etc). Como estas estudando Orientação a objetos (OO), podes fazer a conversão no __init__ da classe, mas não é muito pythonico. Na realidade, em Python farias apenas uma função para calcular o volume. Em OO, um problema recorrente com números é a questão da unidade. Trabalhando com floats, você não tem como garantir que os valores estão corretos, somente se o usuário digitar todos com a mesma unidade. Seguem algumas correções e sugestões (ler os comentários, supondo Python 3): # Não gostei do nome :-D class Sample: # Não precisa inicializar e aqui é o espaço para # atributos da classe Sample.altura != self.altura! #altura = None #comprimento = None #largura = None def __init__(self, altura, comprimento, largura): # Não é muito Pythonico... self.altura = float(altura) self.comprimento = float(comprimento) self.largura = float(largura) # Apenas como exemplo self.verificavalores("Altura", self.altura) self.verificavalores("Comprimento", self.comprimento) self.verificavalores("Largura", self.largura) def verificavalores(self, nome, valor): if type(valor) is not float: raise ValueError("{} não é float".format(nome)) def showInputs(self): print("A Altura é: {:6.2f}".format(self.altura)) print("A comprimento é: {:6.2f}".format(self.comprimento)) print("A Altura é: {:6.2f}".format(self.largura)) def calcVolume(self): return (self.altura * self.comprimento * self.largura) #/ 1000 -> conversão de unidades? print("\nIntroduzir as medidas do aquario\n") altura = float(input("Introduzir a altura do aqua: ")) comprimento = float(input("Introduzir o comprimento do aqua: ")) largura = float(input("Introduzir a largura medidas do aqua: ")) aqua1 = Sample(altura, comprimento, largura) print("\n") aqua1.showInputs() print ("\n") print("Volume: {:6.2f}".format(aqua1.calcVolume())) Eu acho legal também dar uma olhada em como validar os valores, como não aceitar valores negativos ou perguntar novamente valores errados. Exemplo: http://python.nilo.pro.br/listagem/capitulo 08/listagem-08-16.html Eu não recomendo começar a estudar Python com objetos, mas primeiramente com funções. 1 Report Link to comment Share on other sites More sharing options...
Astuto Posted December 18, 2016 at 07:27 PM Author Report Share #601348 Posted December 18, 2016 at 07:27 PM Boas, Antes demais obrigado pelas dicas, mas eu tou a seguir um livro, logo passou para a fase das classes, daí estar a entrar nas duvidas das classes, à partida as funções não acho que sseja complicado, apenas não estou habituado às formatações que usou. Mas é uma questão de gostos porque acho que há mais formas de formatar ou colocar os valores das variaveis nas prints. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now