difference between python2 and python3 - int() and input()

坚强是说给别人听的谎言 提交于 2019-12-01 18:01:26

The issue is intput() converts the value to an number for python2 and a string for python 3.

int() of a non int string returns an error, while int() of a float does not.

Convert the input value to a float using either:

value=float(input())

or, better (safer) yet

position=int(float(value))

EDIT: And best of all, avoid using input since it uses an eval and is unsafe. As Tadhg suggested, the best solution is:

#At the top:
try:
    #in python 2 raw_input exists, so use that
    input = raw_input
except NameError:
    #in python 3 we hit this case and input is already raw_input
    pass

...
    try:
        #then inside your try block, convert the string input to an number(float) before going to an int
        position = int(float(value))

From the Python Docs:

PEP 3111: raw_input() was renamed to input(). That is, the new input() function reads a line from sys.stdin and returns it with the trailing newline stripped. It raises EOFError if the input is terminated prematurely. To get the old behavior of input(), use eval(input()).

Please check the Python 3 release notes. In particular, the input() function (which is considered dangerous) was removed. In its stead, the safer raw_input() function was renamed to input().

In order to write code for both versions, only rely on raw_input(). Add the following to the top of your file:

try:
    # replace unsafe input() function
    input = raw_input
except NameError:
    # raw_input doesn't exist, the code is probably
    # running on Python 3 where input() is safe
    pass

BTW: Your example code isn't minimal. If you had further reduced the code, you would have found that in one case int() operates on a float and in the other on a str which would then have brought you to the different things that input() returns. A look at the docs would then have given you the final hint.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!