Nandinho 0 Posted June 19, 2019 Report Share Posted June 19, 2019 bom dia! Sou inciante no python, tenho a seguinte função que corre bem no jupyter notebook: def converter(miles): km = 1.6 * miles print("km ") print(km) mas quando faço uma ligeira modificação e usando idle do python: def converter(miles): input_m = print("please enter input in miles ") km = 1.6 * input_m print("km ") print(km) ele não retorna nada no idle. peço uma ajuda.. Link to post Share on other sites
pedropregueiro 7 Posted June 19, 2019 Report Share Posted June 19, 2019 Olá Nandinho, Parece que te esqueçeste de usar o método input para receber o valor em milhas: input_m = input("please enter input in miles ") # atencao que o input vira como string por isso tens de converter float_input = float(input_m) Além disto podes também melhorar um pouco o teu código tirando a variável "miles" do método, visto que não a estás a usar. E, já agora, também podes fazer o print numa só linha: print("km: %s" % km) 1 Report Link to post Share on other sites
Nandinho 0 Posted June 19, 2019 Author Report Share Posted June 19, 2019 Ola Pedro! to a ter dificuldades.... modifiquei o programa.. da seguinte maneira: def convert(miles): input_m = input("entre a valor em milhas: ") float_input = float(input_m) km = 1.6 * float_input return km convert(miles) mas mesmo assim tenho o seguinte erro: Traceback (most recent call last): File "C:\Users\fretagi\AppData\Local\Programs\Python\Python36-32\converter_miles2km.py", line 7, in <module> convert(miles) NameError: name 'miles' is not defined >>> Link to post Share on other sites
thoga31 577 Posted June 19, 2019 Report Share Posted June 19, 2019 Esse erro acontece porque miles não está definido no scope que chama a função convert. O que devias fazer é colocar o input de dados fora da função convert: esta função deveria ter única e exclusivamente o objectivo de fazer a conversão, e não de lidar com o input do utilizador. Exemplo: # Função só com o objectivo de cálculo def dobro(x): return 2*x # Scope onde a função é chamada: aqui deve decorrer o input e a chamada do cálculo a = int(input()) b = dobro(a) print("O dobro de {0} é {1}.".format(a, b)) Cumprimentos. 1 Report Knowledge is free! Link to post Share on other sites
Nandinho 0 Posted June 20, 2019 Author Report Share Posted June 20, 2019 Bom dia! modifiquei o codigo para o seguinte: miles = input("entre as milhas a converter: ") def converter(miles): km = 1.6 * int(miles) print(miles, "milhas, são", km, "kilometros") converter(miles) e funcionou, mas aceito sugestões de como poderia melhorar, principalmente, na função print Link to post Share on other sites
pwseo 234 Posted June 24, 2019 Report Share Posted June 24, 2019 @Nandinho, A tua função converter() não devia ser responsável por imprimir o resultado do cálculo que faz. Regra geral, as operações de input/output (através das funções input() e print(), neste caso), devem ficar fora da função propriamente dita. Assim sendo, a tua função deveria ser reduzida a algo como: def converter(miles): return 1.6 * miles Podes então utilizar da seguinte forma: milhas = int(input('entre as milhas a converter: ')) km = converter(milhas) print('{} milhas, são {} kilometros'.format(milhas, km)) Repara na utilização da função format() para mostrar o resultado final; é mais flexível que a forma que utilizaste no teu código. E por fim, um pormenor: o teu código não funciona quando introduzes um número de milhas com casas decimais (experimenta). Facilmente consegues contornar isso substituindo int() por float() na obtenção do valor do utilizador. No entanto, a apresentação de resultados sofre de um problema de arredondamentos: entre as milhas a converter: 6 6 milhas, são 9.600000000000001 kilometros Investiga um pouco sobre a função format() para conseguires chegar ao pretendido: entre as milhas a converter: 6 6 milhas, são 9.6 kilometros 2 Report Link to post Share on other sites
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