Jump to content
Nandinho

conversor miles2km

Recommended Posts

Nandinho

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..

Share this post


Link to post
Share on other sites
pedropregueiro

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)

 

  • Vote 1

Share this post


Link to post
Share on other sites
Nandinho

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

 

Share this post


Link to post
Share on other sites
thoga31

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.

  • Vote 1

Knowledge is free!

Share this post


Link to post
Share on other sites
Nandinho

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

 

Share this post


Link to post
Share on other sites
pwseo

@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

 

  • Vote 2

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.