Convert strings to int or float in Python 3?

2019-02-21 15:04发布

问题:

 integer = input("Number: ")
 rslt = int(integer)+2
 print('2 + ' + integer + ' = ' + rslt)
 double = input("Point Number: ")
 print('2.5 + ' +double+' = ' +(float(double)+2.5))

Gives me

Traceback (most recent call last):
  File "C:\...", line 13, in <module>
    print('2 + ' + integer + ' = ' + rslt)
TypeError: Can't convert 'int' object to str implicitly

I'm fairly new to programming and my background is mostly just the basics of C# so far. I wanted to try to learn Python through doing all my C# school projects on Python. I'm used to the simple syntax of C# which would look something like this:

int integer = Convert.ToInt32(Console.ReadLine())

or

double double = Convert.ToDouble(Console.ReadLine())

Which takes a user input string and converts it to what I specified.

I think I read py2.x has a command called raw_input that works a bit better than the input command of py3.x in this regard.

I was trying to find myself a similar format as the one I'm used to in C# to use in Python, but it's proving surprisingly hard just to find a method to convert the user input string into an integer after all this googling and trying everything I could think of (and that I found on google) I decided it was time to ask. Can you help?

回答1:

You have to convert the integer into a string:

print('2 + ' + str(integer) + ' = ' + str(rslt))

Or pass it as an argument to print and print will do it for you:

print('2 +', integer, '=', rslt)

I would do it using string formatting:

print('2 + {} = {}'.format(integer, rslt))


回答2:

Your problem is not with converting the input to an integer. The problem is that when you write ' = ' + rslt you are trying to add an integer to a string, and you can't do that.

You have a few options. You can convert integer and rslt back into strings to add them to the rest of your string:

print('2 + ' + str(integer) + ' = ' + str(rslt))

Or you could just print multiple things:

print('2 + ', integer, ' = ', rslt)

Or use string formatting:

print('2 + {0} = {1}'.format(integer, rslt))


回答3:

In Python 3.x - input is the equivalent of Python 2.x's raw_input...

You should be using string formatting for this - and perform some error checking:

try:
    integer = int(input('something: '))
    print('2 + {} = {}'.format(integer, integer + 2))
except ValueError as e:
    print("ooops - you didn't enter something I could make an int of...")

Another option - that looks a bit convoluted is to allow the interpreter to take its best guess at the value, then raise something that isn't int or float:

from ast import literal_eval

try:
    value = literal_eval(input('test: '))
    if not isinstance(value, (int, float)):
        raise ValueError
    print value + 2
except ValueError as e:
    print('oooops - not int or float')

This allows a bit more flexibility if you wanted complex numbers or lists or tuples as input for instance...



回答4:

If you want to convert a value to an integer, use the int built in function, and to convert a value to a floating point number, use the float built in function. Then you can use the str built in function to convert those values back to strings. The built in function input returns strings, so you would use these functions in code like this:

integer = input("Number: ")
rslt = int(integer)+2
print('2 + ' + integer + ' = ' + str(rslt))
double = input("Point Number: ")
print('2.5 + ' +str(double)+' = ' +str(float(double)+2.5)


回答5:

integer = int(input("Number: "))
print('2 + %d = %d' % (integer, integer + 2))

double = float(input("Point Number: "))
print('2.5 + %.2f = %.2f' % (double, double + 2.5))