• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

spokeite

Comparar numeros

17 mensagens neste tópico

Boas....

tenho aqui um código que é suposto inserirmos dois números e ele dizer se é maior menor ou igual... e o código é suposto repetir 15 vezes...o problema é que o código mostra sempre o sinal de maior. :mad:

o código é o seguinte:

def main():
    a=raw_input()
    a.split()
    if a[0]<a[1]:
        print "<"
    elif a[0]==a[1]:
        print "="
    elif a[0]>a[1]:
        print ">"
    del a
t=15
while t>0:
    t=t-1
    main()

alguém me explica porquê?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta assim:

def main():
    a=raw_input()
    a.split()
    a = int(a[0])
    b = int(a[1])
    if a<b:
        print "<"
    elif a==b:
        print "="
    elif a>b:
        print ">"
    del a, b
t=15
while t>0:
    t=t-1
    main()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fnds, acho que falta-te uma coisa:

>>> a=raw_input()
1023123 1241241
>>> a.split()
['1023123', '1241241']
>>> a
'1023123 1241241'

Ou seja, o código seria antes:

def main():
    a=raw_input()
    a=a.split()
    b = int(a[1])
    a = int(a[0])
    if a<b:
        print "<"
    elif a==b:
        print "="
    elif a>b:
        print ">"
    del a, b
t=15
while t>0:
    t=t-1
    main()

Até porque no teu código existe outro erro:

a = int(a[0])
b = int(a[1])

a ficará com o suposto inteiro do primeiro elemento do split (que já mostrei que nao guardaste o resultado do split) e tás a tentar atribuir a 'b' o inteiro de a[1] que já não existe.

O melhor mesmo era fazer:

a=input()
b=input()

E tava feito! :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ya, fiz isso a despachar, mas deu para dar a ideia, tens de comparar ints e não strings.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes comparar as strings. :)

>>> x="121312312 243294324"
>>> x=x.split()
>>> x[0]<x[1]
True
>>> 

Não, não podes. Challenge:

>>> x="2 10"
>>> x=x.split()
>>> x[0]<x[1]
False

Cuidado com isso :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, não podes. Challenge:

>>> x="2 10"
>>> x=x.split()
>>> x[0]<x[1]
False

Cuidado com isso :)

Ah pois é! Ele vai fazer lexicograficamente. My Bad! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas,

o problema está resolvido graças a voçes  :) e ainda adicionei uma coisa que faz com que o programa peça o numero de vezes que ele vai comparar numeros...

ficou assim:

t=int(raw_input())
def main():
    a=raw_input()
    a=a.split()
    b = int(a[1])
    a = int(a[0])
    if a<b:
        print "<"
    elif a==b:
        print "="
    elif a>b:
        print ">"
    del a, b
while t>0:
    t=t-1
    main()

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só uma coisa, quando queres pedir um número e não uma string, escusas de fazer int(raw_input()) e fazes antes input(). O input() é como o raw_input() só que para números (float, int).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só uma coisa, quando queres pedir um número e não uma string, escusas de fazer int(raw_input()) e fazes antes input(). O input() é como o raw_input() só que para números (float, int).

Essa facilidade pode dar buraco, porque não é para só para ints/floats como dizes. O input é basicamente um eval(raw_input()). É SEMPRE preferível ler com o raw_input(). :)

>>> def x():
print "x() here!"


>>> x = input("Insira um número: ")
Insira um número: x()
x() here!
>>> 

Capiche?

Anyway, eu faria assim:

>>> x = "7234 91"
>>> a, b = map(int, x.split())
#daqui para baixo foi uma brincadeira para arranjar algo mais simples do que a tua cadeia de if...elif...else 
>>> tabela = {(True, False): ">", (False, True): "<", (False, False): "="}
>>> print tabela[(a>b, a<b)]
>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Essa facilidade pode dar buraco, porque não é para só para ints/floats como dizes. O input é basicamente um eval(raw_input()). É SEMPRE preferível ler com o raw_input(). :)

>>> def x():
print "x() here!"


>>> x = input("Insira um número: ")
Insira um número: x()
x() here!
>>> 

Capiche?

Anyway, eu faria assim:

>>> x = "7234 91"
>>> a, b = map(int, x.split())
#daqui para baixo foi uma brincadeira para arranjar algo mais simples do que a tua cadeia de if...elif...else 
>>> tabela = {(True, False): ">", (False, True): "<", (False, False): "="}
>>> print tabela[(a>b, a<b)]
>

Oh djthyrax, andar à caça de gambuzinos para quê? Então a função input() foi criada para nada... :|

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
input([prompt])

Equivalent to eval(raw_input(prompt)). Warning: This function is not safe from user errors! It expects a valid Python expression as input; if the input is not syntactically valid, a SyntaxError will be raised. Other exceptions may be raised if there is an error during evaluation. (On the other hand, sometimes this is exactly what you need when writing a quick script for expert use.)

If the readline module was loaded, then input() will use it to provide elaborate line editing and history features.

Consider using the raw_input() function for general input from users.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@fnds, ninguém disse que não. Mas por exemplo, duvido que a coisa que ele está a fazer vai aparecer um x() :/

Anyway, já não tem a ver com o tópico, por isso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oh djthyrax, andar à caça de gambuzinos para quê? Então a função input() foi criada para nada... :|

Não, ela tem o seu devido lugar na std lib do Python (há quem a ache útil, embora eu só a tenha achado útil na minha calculadora que fiz para brincar com exceptions), simplesmente é um erro usá-la para este caso de I/O.

É uma pena não teres participado na tchs pah :)

Why?

@fnds, ninguém disse que não. Mas por exemplo, duvido que a coisa que ele está a fazer vai aparecer um x() :/

É melhor habituares-te a fazer as coisas bem do que mal. Os maus hábitos custam muito a largar. :P
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu sinceramente em questão a parte do input ou raw_input para mim tanto faz porque eu iria sempre por assim:


try: a=int(raw_input("Introduza um numero: ")
except ValueError: print "Por favor introduza um NUMERO"

Para mim isto e fazer as coisas correctamente independentemente se estas a usar raw_input ou input, por isso djthyrax, nao vejo como dizes "É melhor habituares-te a fazer as coisas bem do que mal. Os maus hábitos custam muito a largar" quando a maneira como fizeste não me parece tão correcta assim...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

newbeen, e tens toda a razão, devia ter posto lá o try catch de qualquer maneira, mesmo estando apenas a explicar o porquê do input() ser perigoso e não do tratamento do input lido. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora