web-dev-qa-db-fra.com

Vérification pour voir si une chaîne est un entier ou un float

Donc, je crée un programme pour montrer les systèmes de numération, mais j'ai rencontré des problèmes dès le premier obstacle. Le programme prendra un numéro de l'utilisateur puis l'utilisera tout au long du programme afin d'expliquer plusieurs concepts informatiques.

En expliquant ma première section, les systèmes de numération, le programme dira de quel type de numéro il s'agit. Je fais cela en convertissant la chaîne en un nombre flottant. Si le nombre à virgule flottante n'a que '.0' après, il le convertit en un entier.

J'utilise actuellement ce code

while CorrectNumber == False:
try:
    Number = float(NumberString) - 0
    print (Number)
except:
    print ("Error! Not a number!")

Ceci est utile car il indique si l'utilisateur a entré un numéro ou non. Cependant, je ne sais pas comment vérifier maintenant la valeur après la décimale pour vérifier si je devrais la convertir en entier ou non. Des conseils?

Si la chaîne est convertible en entier, il doit s'agir uniquement de chiffres. Il convient de noter que cette approche, comme @cwallenpoole l'a dit, ne fonctionne PAS avec des entrées négatives en raison du caractère '-'. Vous pourriez faire:

if NumberString.isdigit():
    Number = int(NumberString)
else:
    Number = float(NumberString)

Si vous avez déjà confirmé le numéro en tant que float, vous pouvez toujours utiliser is_integer (fonctionne avec les négatifs):

if Number.is_integer():
    Number = int(Number)
5

Je ne suis pas sûr de suivre la question mais voici une idée:

test = ['1.1', '2.1', '3.0', '4', '5', '6.12']

for number in test:
    try:
        print(int(number))
    except ValueError:
        print(float(number))

Résultats:

1.1
2.1
3.0
4
5
6.12
3
kbball

Ceci vérifie si la fraction décimale a des chiffres non nuls.

def is_int(n):
    try:
        float_n = float(n)
        int_n = int(float_n)
    except ValueError:
        return False
    else:
        return float_n == int_n

def is_float(n):
    try:
        float_n = float(n)
    except ValueError:
        return False
    else:
        return True

Tester les fonctions:

nums = ['12', '12.3', '12.0', '123.002']

for num in nums:
    if is_int(num):
        print(num, 'can be safely converted to an integer.')
    Elif is_float(num):
        print(num, 'is a float with non-zero digit(s) in the fractional-part.')

Il imprime:

12 can be safely converted to an integer.
12.3 is a float with non-zero digit(s) in the fractional-part.
12.0 can be safely converted to an integer.
123.002 is a float with non-zero digit(s) in the fractional-part.
0
Srisaila