Como comparar um numero no python

Vamos ver como comparar Strings em Python. 

Método 1: usando operadores relacionais

Os operadores relacionais comparam os valores Unicode dos caracteres das strings do índice zero até o final da string. Em seguida, retorna um valor booleano de acordo com o operador usado.

Exemplo:

“Geek” == “Geek” retornará True já que o Unicode de todos os caracteres são iguais



No caso de “Geek” e “geek” como o unicode de G é \ u0047 e de g é \ u0067 “Geek” “geek” retornará False

print["Geek" == "Geek"] print["Geek" < "geek"] print["Geek" > "geek"] print["Geek" != "Geek"]

Resultado:

Verdade Verdade Falso Falso

Método 2: usar é e não é

O operador == compara os valores de ambos os operandos e verifica a igualdade de valor. Já o operador is verifica se ambos os operandos se referem ao mesmo objeto ou não. O mesmo é o caso para! = E não é .

Vamos entender isso com um exemplo:

str1 = "Geek" str2 = "Geek" str3 = str1    print["ID of str1 =", hex[id[str1]]] print["ID of str2 =", hex[id[str2]]] print["ID of str3 =", hex[id[str3]]] print[str1 is str1] print[str1 is str2] print[str1 is str3]    str1 += "s" str4 = "Geeks"    print["\nID of changed str1 =", hex[id[str1]]] print["ID of str4 =", hex[id[str4]]] print[str1 is str4]

Resultado:

ID de str1 = 0x7f6037051570 ID de str2 = 0x7f6037051570 ID de str3 = 0x7f6037051570 Verdade Verdade Verdade ID de str1 alterado = 0x7f60356137d8 ID de str4 = 0x7f60356137a0 Falso

O ID do objeto das strings pode variar em diferentes máquinas. Os IDs de objeto de str1, str2 e str3 eram os mesmos, portanto, o resultado é True em todos os casos. Depois que o id de objeto de str1 for alterado, o resultado de str1 e str2 será falso. Mesmo depois de criar str4 com o mesmo conteúdo do novo str1, a resposta será falsa, pois seus IDs de objeto são diferentes.



O vice-versa acontecerá com não.

Método 3: Criando uma função definida pelo usuário .

Usando operadores relacionais, podemos apenas comparar as strings por seus unicodes. Para comparar duas strings de acordo com alguns outros parâmetros, podemos fazer funções definidas pelo usuário.

No código a seguir, nossa função definida pelo usuário irá comparar as strings com base no número de dígitos.

def compare_strings[str1, str2]:     count1 = 0     count2 = 0            for i in range[len[str1]]:         if str1[i] >= "0" and str1[i] = "0" and str2[i] y: # Comparamos x e y, se x é maior retornamos o valor de x     return x   else: # caso contrário, retornamos o valor de y     return y x= float[raw_input["Insira o valor de x \n"]] # requisição dos valores para as variáveis y= float[raw_input["Insira o valor de y \n"]] maior[x,y] # chamamos a função para efetuar o processamento print "O maior valor é: \n", maior[x,y] # imprimimos o resultado

Scripts recomendados

Gerador de Tabuada

Horá do descanso! Uma peque aplicação que fiz usando pygtk

Loja de tintas

Calculadora Python - sem bugs !?

Validador e gerador de CPF em Python



Comentários

[1] Comentário enviado por eldermarco em 15/05/2011 - 17:14h

Apenas uma observação: Você faz duas chamadas a função maior que você definiu. A primeira não é necessária.


[2] Comentário enviado por levi linux em 16/05/2011 - 18:20h Boa noite Elder Marco, é verdade a primeira "chamada" é desnecessário.

Vlw, muito obrigado.


[3] Comentário enviado por Lisandro em 27/05/2011 - 07:37h

Pode tirar a primeira chamada e melhorar a função para reconhecer e informar quando os numeros são iguais. Abraço.



Nesse artigo vou mostrar como funciona o operador de igualdade no Python e como alteramos seu comportamento, controlando mais nosso código.

Tenho um sistema em Python que armazena os filmes que eu tenho em uma lista, para organização, com uma função que pega todos os filmes e retorna uma lista com eles:

class Filme[]: def __init__[self, titulo, diretor]: self.titulo = titulo self.diretor = diretor def __str__[self]: return self.titulo + ‘ - ‘ + self.diretor def pega_todos_os_filmes[]: meus_filmes = pega_todos_os_filmes[] for filme in meus_filmes: print[filme]

Vamos ver como ficou:

A Teoria de Tudo - James Marsh La La Land - Damien Chazelle O Poderoso Chefão - Francis Ford Coppola

Ok, temos nossa lista de filmes!

Depois de um tempo, queria descobrir se eu tinha um filme. Como podemos fazer isso?

Comparando objetos com o operador ==

Para descobrir se eu já tenho um filme, criei uma função que verifica se o filme que eu quero saber está na nossa lista de filmes:

def tenho_o_filme[filme_procurado]: meus_filmes = pega_todos_os_filmes[] for filme in meus_filmes: if filme_procurado == filme: return True return False filme_procurado = Filme[‘A Teoria de Tudo’, ‘James Marsh’] if tenho_o_filme[filme_procurado]: print[‘Tenho o filme!’] else: print[‘Não tenho :[‘]

Rodamos nosso código e esse foi o resultado:

Não tenho :[

Ué! A gente já viu que o filme A Teoria de Tudo está na nossa lista, então o que está dando errado?

Sabemos que o operador == funciona bem para números e strings:

x = 700 y = 700 print[x == y] a = ‘Yan’ b = ‘Yan’ print[a == b]

O resultado:

True True

Mas então por que ele não funciona como queremos com nossa classe Filme?

Como o Python compara objetos?

A questão é que o Python não sabe como deve comparar os objetos de tipo Filme quando utilizamos o operador ==. Que valor deve ser comparado? O titulo? O diretor? E de que forma? O Python não sabe!

Com essa dúvida, o Python opta por não verificar valor nenhum, mas sim a identidade dos objetos. Isto é, ele checa se as variáveis em comparação apontam para o mesmo objeto na memória. Podemos verificar a identidade de um objeto através da função id[]:

a = Filme[‘A Teoria de Tudo’, ‘James Marsh’] b = Filme[‘A Teoria de Tudo’, ‘James Marsh’] print[id[a]] print[id[b]]

O resultado será parecido com esse:

139789394500856 139789394500800

Repare que, de fato, os dois valores de identidade são diferentes! Se indicássemos que a variável b aponta para o objeto da variável a, o resultado seria diferente:

a = Filme[‘A Teoria de Tudo’, ‘James Marsh’] b = a print[a == b]

Dessa vez:

True

Isso ocorre porque, nesse caso, as duas variáveis apontam para o mesmo objeto, ou seja, possuem a mesma identidade:

print[id[a]] print[id[b]]

O resultado:

139824816890912 139824816890912

Vamos ver como isso funciona com os números inteiros e as strings que testamos lá atrás:

x = 700 y = 700 print[‘Os inteiros:’] print[id[x]] print[id[y]] a = ‘Yan’ b = ‘Yan’ print[‘As strings:’] print[id[a]] print[id[b]]

E o resultado:

Os inteiros: 139789394500800 139789394500856 As strings: 139789394500970 139789394500970

Bem, os números têm identidades diferentes, enquanto as strings apresentaram identidades iguais. Isso significa que a comparação == com strings compara o id, e com números inteiros não? Não exatamente…

Como o Python compara tipos primitivos?

De fato, os ids eram os mesmos com as strings, mas, mesmo assim, não era isso que estava sendo comparado. Os tipos primitivos no Python já têm implementado nativamente suas próprias maneiras de se comparar. No caso do int e da string, o que se compara são seus valores.

Como podemos mudar esse comportamento padrão do ==, então? Afinal, comparar o id dos objetos não é o que queremos! Precisamos, de alguma forma, basear nossa comparação em algum atributo do Filme.

Quem vem de outras linguagens de programação, como Java, já deve conhecer métodos como o equals[], que pode ser sobrescrito para ter o comportamento alterado. Como isso funciona no Python?

Conhecendo a rich comparison

No Python temos como implementar algo similar ao equals[], mas ainda mais poderoso - a comparação rica, ou, como é tecnicamente conhecida, rich comparison . Com ela, podemos definir os seguintes métodos de comparação em uma classe:

  • __eq__[], chamado pelo operador ==
  • __ne__[], chamado pelo operador !=
  • __gt__[], chamado pelo operador >
  • __lt__[], chamado pelo operador =
  • __le__[], chamado pelo operador b não precisa, necessariamente, nos devolver um boolean, mas pode devolver qualquer coisa que o desenvolvedor implementar.

    Em geral, optamos por retornar um boolean, mas há grandes e importantes projetos que alteram esse comportamento, como o SQLAlchemy, que usa essa feature para facilitar a criação de queries SQL, e até a biblioteca numpy, inspiração para a criação da rich comparison.

    Conclusão

    Nesse post, aprendemos a implementar métodos de comparação para nossas classes no Python utilizando a técnica de comparação rica. Agora entendemos como funcionam os operadores ==, !=, >, =,

Bài mới nhất

Chủ Đề