web-dev-qa-db-fra.com

Convertir des chaînes en int ou float dans Python 3?

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

Donne moi

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

Je suis assez nouveau dans le domaine de la programmation et je ne connais pour l’instant que les bases de C #. Je voulais essayer d'apprendre Python en réalisant tous mes projets d'école C # sur Python. Je suis habitué à la syntaxe simple de C # qui ressemblerait à ceci:

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

ou

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

Ce qui prend une chaîne d'entrée utilisateur et la convertit en ce que j'ai spécifié.

Je pense avoir lu que py2.x a une commande appelée raw_input qui fonctionne un peu mieux que la commande d'entrée de py3.x à cet égard.

J'essayais de me trouver un format similaire à celui auquel je suis habitué en C # à utiliser en Python, mais il s'avère étonnamment difficile de trouver une méthode pour convertir la chaîne de saisie de l'utilisateur en entier après avoir googlé et tout essayé. Je pouvais penser à (et que j'ai trouvé sur Google) j'ai décidé qu'il était temps de demander. Pouvez vous aider?

9
Rabcor

Vous devez convertir l'entier en chaîne:

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

Ou passez-le comme argument à print et print le fera pour vous:

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

Je le ferais en utilisant le formatage de chaîne:

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

Votre problème ne concerne pas la conversion de l'entrée en un entier. Le problème est que lorsque vous écrivez ' = ' + rslt, vous essayez d'ajouter un entier à une chaîne et vous ne pouvez pas le faire.

Vous avez quelques options. Vous pouvez reconvertir integer et rslt en chaînes pour les ajouter au reste de votre chaîne:

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

Ou vous pouvez simplement imprimer plusieurs choses:

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

Ou utilisez le formatage de chaîne:

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

En Python 3.x - input est l'équivalent du raw_input... de Python 2.x.

Vous devriez utiliser un formatage de chaîne pour cela - et effectuer une vérification des erreurs:

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...")

Une autre option - qui semble un peu compliquée est de permettre à l'interprète de deviner sa valeur, puis de relever un élément qui n'est pas int ou 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')

Cela donne un peu plus de flexibilité si vous voulez par exemple des nombres complexes, des listes ou des n-uplets ... 

6
Jon Clements

Si vous souhaitez convertir une valeur en entier, utilisez la fonction intégrée int , et pour convertir une valeur en nombre à virgule flottante, utilisez la fonction intégrée float . Vous pouvez ensuite utiliser la fonction intégrée str pour reconvertir ces valeurs en chaînes. La fonction intégrée input renvoie des chaînes, vous utiliserez donc ces fonctions dans le code comme ceci:

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)
0
murgatroid99
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))
0
jurgenreza