Por que são x
e y
strings em vez de ints no código abaixo?
(Nota: no Python 2.x use raw_input()
. No Python 3.x use input()
. raw_input()
Foi renomeado para input()
no Python 3.x)
play = True
while play:
x = input("Enter a number: ")
y = input("Enter a number: ")
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x % y)
if input("Play again? ") == "no":
play = False
python
python-3.x
python-2.7
input
int
smci
fonte
fonte
Respostas:
TLDR
input
função, mas ainput
função do Python 2 faz (leia a próxima seção para entender a implicação).input
é araw_input
função.Python 2.x
Havia duas funções para obter a entrada do usuário, chamadas
input
eraw_input
. A diferença entre eles éraw_input
que não avalia os dados e retorna como são, na forma de sequência. Porém,input
avaliará o que você inseriu e o resultado da avaliação será retornado. Por exemplo,Os dados
5 + 17
são avaliados e o resultado é22
. Ao avaliar a expressão5 + 17
, ele detecta que você está adicionando dois números e, portanto, o resultado também será do mesmoint
tipo. Portanto, a conversão do tipo é feita gratuitamente e22
é retornada como resultadoinput
e armazenada nadata
variável Você pode considerarinput
oraw_input
composto com umaeval
chamada.Nota: você deve ter cuidado ao usar
input
no Python 2.x. Expliquei por que devemos ter cuidado ao usá-lo, nesta resposta .Mas,
raw_input
não avalia a entrada e retorna como é, como uma string.Python 3.x
O Python 3.x
input
e o Python 2.xraw_input
são semelhantes eraw_input
não estão disponíveis no Python 3.x.Solução
Para responder à sua pergunta, como o Python 3.x não avalia e converte o tipo de dados, você deve converter explicitamente para
int
s, comint
, desta formaVocê pode aceitar números de qualquer base e convertê-los diretamente na base 10 com a
int
funçãoO segundo parâmetro informa qual é a base dos números inseridos e, em seguida, ele entende e converte internamente. Se os dados inseridos estiverem errados, será gerado a
ValueError
.Para valores que podem ter um componente fracionário, o tipo seria, em
float
vez deint
:Além disso, seu programa pode ser alterado um pouco, como este
Você pode se livrar da
play
variável usandobreak
ewhile True
.fonte
eval
funcionaria, mas não faça isso a menos que você tenha razões urgentes.ast.literal_eval
para isso. Ele não tem as preocupações de segurança deeval
.int(input()
... no topo? Python 2 está chegando ao fim dele é a vida e a informação python 3 está também enterrado IMONo Python 3.x,
raw_input
foi renomeado parainput
e o Python 2.xinput
foi removido.Isto significa que, assim como
raw_input
,input
em Python 3.x sempre retorna um objeto String.Para corrigir o problema, é necessário transformar explicitamente essas entradas em números inteiros, colocando-as em
int
:fonte
Para vários números inteiros em uma única linha,
map
pode ser melhor.Se o número já for conhecido (como 2 inteiros), você poderá usar
fonte
input()
(Python 3) eraw_input()
(Python 2) sempre retornam strings. Converta o resultado em inteiro explicitamente comint()
.fonte
Várias perguntas requerem entrada para vários números inteiros em uma única linha. A melhor maneira é inserir toda a sequência de números em uma linha e depois dividi-los em números inteiros. Aqui está uma versão do Python 3:
Também pode ser usada uma compreensão da lista
E para converter todas as entradas de string para int, fazemos o seguinte
imprimirá os elementos da lista em uma linha reta.
fonte
Converter em números inteiros:
Da mesma forma para números de ponto flutuante:
fonte
o loop for deve executar 'n' número de vezes. o segundo 'n' é o comprimento da matriz. a última instrução mapeia os números inteiros para uma lista e recebe entrada em formato separado por espaço. você também pode retornar a matriz no final do loop for.
fonte
Eu encontrei um problema ao receber entrada inteira enquanto resolvia um problema no CodeChef , onde dois números inteiros - separados pelo espaço - deveriam ser lidos de uma linha.
Embora
int(input())
seja suficiente para um único número inteiro, não encontrei uma maneira direta de inserir dois números inteiros. Eu tentei isso:Agora eu uso num1 e num2 como números inteiros. Espero que isto ajude.
fonte
i
destruído quando ofor
loop é encerrado?@hosch250
Quando um loop é encerrado, o valor da variável de índice (aquii
) permanece. Eu tentei esta peça e funciona corretamente.num1, num2 = map(int, input().split())
se você souber quantos números inteiros encontrará ounums = list(map(int, input().split()))
se não.fonte
Enquanto no seu exemplo,
int(input(...))
faz o truque em qualquer caso,python-future
'sbuiltins.input
é digno de consideração, uma vez que torna-se seu código funciona tanto para Python 2 e 3 e comportamento padrão do desativa python2 deinput
tentar ser 'inteligente' sobre o tipo de dados de entrada (builtins.input
basicamente apenas comporta-se comoraw_input
).fonte