python - How can I read inputs as integers? -


why code not input integers? on web says use raw_input(), read on stack overflow (on thread did not deal integer input) raw_input() renamed input() in python 3.x.

play = true  while play:      x = input("enter number: ")     y = input("enter number: ")      print(x + y)     print(x - y)     print(x * y)     print(x / y)     print(x % y)      if input("play again? ") == "no":         play = false 

python 2.x

there 2 functions user input, called input , raw_input. difference between them is, raw_input doesn't evaluate data , returns is, in string form. but, input evaluate whatever entered , result of evaluation returned. example,

>>> import sys >>> sys.version '2.7.6 (default, mar 22 2014, 22:59:56) \n[gcc 4.8.2]' >>> data = input("enter number: ") enter number: 5 + 17 >>> data, type(data) (22, <type 'int'>) 

the data 5 + 17 evaluated , result 22. when evaluates expression 5 + 17, detects adding 2 numbers , result of same int type. so, type conversion done free , 22 returned result of input , stored in data variable. can think of input raw_input composed eval call.

>>> data = eval(raw_input("enter number: ")) enter number: 5 + 17 >>> data, type(data) (22, <type 'int'>) 

note: should careful when using input in python 2.x. explained why 1 should careful when using it, in this answer.

but, raw_input doesn't evaluate input , returns is, string.

>>> import sys >>> sys.version '2.7.6 (default, mar 22 2014, 22:59:56) \n[gcc 4.8.2]' >>> data = raw_input("enter number: ") enter number: 5 + 17 >>> data, type(data) ('5 + 17', <type 'str'>) 

python 3.x

python 3.x's input , python 2.x's raw_input similar , raw_input not available in python 3.x.

>>> import sys >>> sys.version '3.4.0 (default, apr 11 2014, 13:05:11) \n[gcc 4.8.2]' >>> data = input("enter number: ") enter number: 5 + 17 >>> data, type(data) ('5 + 17', <class 'str'>) 

solution

to answer question, since python 3.x doesn't evaluate , convert data type, have explicitly convert ints, int, this

x = int(input("enter number: ")) y = int(input("enter number: ")) 

you can accept numbers of base , convert them directly base-10 int function, this

>>> data = int(input("enter number: "), 8) enter number: 777 >>> data 511 >>> data = int(input("enter number: "), 16) enter number: ffff >>> data 65535 >>> data = int(input("enter number: "), 2) enter number: 10101010101 >>> data 1365 

the second parameter tells base of numbers entered , internally understands , converts it. if entered data wrong throw valueerror.

>>> data = int(input("enter number: "), 2) enter number: 1234 traceback (most recent call last):   file "<input>", line 1, in <module> valueerror: invalid literal int() base 2: '1234' 

apart that, program can changed little bit, this

while true:     ...     ...     if input("play again? ") == "no":         break 

you can rid of play variable using break , while true.

ps: python doesn't expect ; @ end of line :)


Comments

Popular posts from this blog

python - pip install -U PySide error -

arrays - C++ error: a brace-enclosed initializer is not allowed here before ‘{’ token -

cytoscape.js - How to add nodes to Dagre layout with Cytoscape -