Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

conversion string en valeur numerique

2 réponses
Avatar
François Couloigner
Bonjour,
Voulant saisir une grande valeur numérique j'écris (python 3.2):
chaine = input()
n = int(chaine) # ou float(chaine)

Si je saisis 10**3 lors de l'exécution j'obtiens le message :
ValueError: invalid literal for int() with base 10: '10**3'

Pourquoi ?

En vous remerciant,

2 réponses

Avatar
Damien Wyart
* François Couloigner in fr.comp.lang.python:
Bonjour,
Voulant saisir une grande valeur numérique j'écris (python 3.2):
chaine = input()
n = int(chaine) # ou float(chaine)

Si je saisis 10**3 lors de l'exécution j'obtiens le message :
ValueError: invalid literal for int() with base 10: '10**3'
Pourquoi ?



La documentation de int(),
http://docs.python.org/py3k/library/functions.html#int, précise bien que
la chaine ne doit contenir que des "chiffres" (au sens large pour une
base > 10) et un signe optionnel.

Dans votre exemple on peut essayer de détecter que l'opérateur ** est
présent dans la chaîne et appeler eval() dessus pour la transformer en
entier par évaluation.

--
DW
Avatar
Alain Ketterlin
François Couloigner writes:

Voulant saisir une grande valeur numérique j'écris (python 3.2):
chaine = input()
n = int(chaine) # ou float(chaine)

Si je saisis 10**3 lors de l'exécution j'obtiens le message :
ValueError: invalid literal for int() with base 10: '10**3'



Parce que int() veut un litéral entier (l'écriture d'un entier), pas une
expression quelconque. Tu peux lui donner "3" mais pas "1+2".

Tu cherches sûrement eval(), mais pour le coup c'est beaucoup plus
puissant que ce que tu veux (donc plus dangereux).

-- Alain.