No Python 2.x nós temos 2 modos de entrada de dados o input() e raw_input()
Primeiro vamos entender como cada um funciona pra depois sabermos como ficou agora e porque a mudança no Python 3
raw_input()
o raw_input() captura pela entrada padrão (sys.stdin.readline) tudo o que você digita (até apertar "enter") e lhe retorna como uma string, mais simples que isso impossivel, opcionalmente você pode também colocar uma mensagem quando chama o raw_input()
ex:
Se quisermos avisar o que tipo de dado estamos esperando podemos fazer:
input()
o input por outro lado é muito mais "esperto", tão esperto que a maioria embora acha que saiba, na verdade não tem noção de como ele funciona (eu já estive nesta lista)
muitos o input() é muito parecido com o raw_input() com a diferenca dele "avaliar" os tipo de dados e retornar os tipo "certo"
ex:
Mas o buraco é mais embaixo do que você pensa
ex:
Sim amigo ele faz mais do que você pensa.
O "esperado" seria uma string "if x"
Na verdade o input() pega o que você digita, roda e da um retorno como uma expressão python, na verdade você disponibiliza um "terminal" python e pega o retorno
ex:
Enquanto isso no Python 3...
No python 3.0 isso foi mudado, o raw_input() foi renomeado para input() se tornando o input padrão
- E o input() antigo?
Foi sumariamente REMOVIDO, exterminado, jogaram ele no marmore do inferno
Mas nem tudo está perdido, se você prestou atenção deve ter percebido que existe alguém que praticamente a mesma coisa que o antigo input com um pequena diferença. Eu estou falando do eval():
O eval() recebe um string faz e o mesmo que o antigo input() (na verdade seria o contrario, o input() faz o mesmo que o eval()), ele
avalia a string no interpretador python e retorna o resultado da expressão, da mesma forma que o console python faz.
Entao para se ter o mesmo efeito do antigo input basta chamar a funcao eval() pro retorno de input
mais posts sobre Python:
1 - Vantagens do novo print do Python 3
2 - Diferencas entre o Python 3 vs Python 2.x
3 - Edje / QEdje (usando Python)4 - Receitas com Python
5 - Mini Curso PyGame - JED 2008
Primeiro vamos entender como cada um funciona pra depois sabermos como ficou agora e porque a mudança no Python 3
raw_input()
o raw_input() captura pela entrada padrão (sys.stdin.readline) tudo o que você digita (até apertar "enter") e lhe retorna como uma string, mais simples que isso impossivel, opcionalmente você pode também colocar uma mensagem quando chama o raw_input()
ex:
>>> raw_input()raw_input retornou a string "1, 2, 3"
1, 2, 3 # <-- usuario digita
'1, 2, 3'
Se quisermos avisar o que tipo de dado estamos esperando podemos fazer:
>>> raw_input("Digite seu nome: ")Simples sem misterios.
Digite seu nome: Larry # <-- usuario digita
'Larry'
input()
o input por outro lado é muito mais "esperto", tão esperto que a maioria embora acha que saiba, na verdade não tem noção de como ele funciona (eu já estive nesta lista)
muitos o input() é muito parecido com o raw_input() com a diferenca dele "avaliar" os tipo de dados e retornar os tipo "certo"
ex:
>>> x = input()Então você pensa: "esse é o kra que eu vou usar sempre"
1
>>> type(x)
#input avalia a entrada como um inteiro
>>> input()
1, 2, 3
(1, 2, 3) # input retornava uma tupla de 3 inteiros
>>> input()
1, haha, 4.8
(1, 'haha', 4.8) #input retornava uma tupla com um inteiro uma string e um float
Mas o buraco é mais embaixo do que você pensa
ex:
>>> input("usuario digita: ")WTF???
usuario digita: if x
Traceback (most recent call last):
File "", line 1, in ;
File "", line 1
if x
^
SyntaxError: invalid syntax
Sim amigo ele faz mais do que você pensa.
O "esperado" seria uma string "if x"
Na verdade o input() pega o que você digita, roda e da um retorno como uma expressão python, na verdade você disponibiliza um "terminal" python e pega o retorno
ex:
>>> x = 2Se não for bem tratado isso pode ser MUITO perigoso.
>>> input("usuario digita: ")
usuario digita: x + 3
5 #retorno de input() sera o valor da variavel x mais o int 3
>>> input("usuario digita: ")
usuario digita: x == 4 and "ola" or "NAUM e PAH"
"NAUM e PAH"
Enquanto isso no Python 3...
No python 3.0 isso foi mudado, o raw_input() foi renomeado para input() se tornando o input padrão
- E o input() antigo?
Foi sumariamente REMOVIDO, exterminado, jogaram ele no marmore do inferno
Mas nem tudo está perdido, se você prestou atenção deve ter percebido que existe alguém que praticamente a mesma coisa que o antigo input com um pequena diferença. Eu estou falando do eval():
O eval() recebe um string faz e o mesmo que o antigo input() (na verdade seria o contrario, o input() faz o mesmo que o eval()), ele
avalia a string no interpretador python e retorna o resultado da expressão, da mesma forma que o console python faz.
Entao para se ter o mesmo efeito do antigo input basta chamar a funcao eval() pro retorno de input
>>> input()Quando você for converter seus programas python 2.x para 3 bastar usar eval(input()) e você terá o mesmo efeito (mas agora você sabe o motivo ;-) )
1, 2, 3 # <-- usario digita
'1, 2, 3" # <-- string
>>> eval('1, 2, 3")
(1, 2, 3)
#portanto
>>> eval(input())
1, 2, 3 # <-- usario digita
(1, 2, 3) # <-- tupla
mais posts sobre Python:
1 - Vantagens do novo print do Python 3
2 - Diferencas entre o Python 3 vs Python 2.x
3 - Edje / QEdje (usando Python)4 - Receitas com Python
5 - Mini Curso PyGame - JED 2008
7 comentários:
muito bem explicado.
gostei.
Estudo na UFRPE e seus posts sobre as diferenças nas versões do python ajudaram bastante para a organização de um seminário aqui na faculdade.
obrigado e parabéns ;)
Muito bom, me ajudou bastante. Estou fazendo um curso online mas o material usa o Python 2.
Karaka que lindo! Parabéns excelente post.
Muito bom!!! Amei
Postar um comentário