Je débute:"commande n=int(input()) [Fermé]

Signaler
-
 paffou59 -
Bonjour,

En exécutant le script suivant:

def ligneCar(n,ca):
    ch=" "
    i=0
    while i<n:
        ch=ch+ca
        i=i+1
    return ch
print("entrer un nombre:",end=" ")
n=int(input())
print("entrer un caractère",end=" ")
ca=input()
print(ligneCar(n,ca))


Celui-ci fonctionne mais quand je rentre un nombre à virgule, j'obtiens le message d'erreur suivant:

line 9, in <module>
n=int(input())
ValueError: invalid literal for int() with base 10: '5.8'


La fonction int devrait me convertir mon nombre en un entier???

Merci d'avance pour votre aide,

Roman





1 réponse

Messages postés
4927
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
31 juillet 2020
1 179
Bonjour,

La fonction int ne convertit pas les nombres réels en entiers. Elle attend que la valeur entrée soit un entier sinon elle renvoie le message d'erreur que vous signalez. Omettez int dans la fonction et il prendra les nombres entiers ou réels, les opérateurs utilisant les deux types et donnant un résultat en réel.

Ci-après un lien précisant les détails de cette question :

https://python.developpez.com/cours/TutoSwinnen/?page=page_7

Cordialement
G modifié:

n=int(eval(input()))

et çà a fonctionné...pourquoi?...je ne sais pas
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
888
Et tu peux avantageusement remplacer la fonction ligneCar par
n * car

exemple:
>>> 3 *"AbC"
'AbCAbCAbC'
>>> 0 *"AbC"
''
'
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688 >
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017

paffou59,

input() renvoie en pyhon3 un string (pour des raisons de sécurité).
En effectuant int(input()), tu tentes donc de récupérer la partie entière d'une chaîne de caractère. D'où le message obtenu.
Lorsque tu fais eval(input()), tu demandes à Python d'interpréter la chaîne. Si tu rentres une chaîne sous forme de nombre, ça va le convertir en nombre. Tu pourras donc récupérer sa partie entière.
Note : ce n'est absolument pas la bonne façon de faire. C'est très dangereux.

Je te conseille plutôt : int(float(input()).
Le float() te permettra de convertir la chaîne en flottant. Et le int() récupérera la partie entière.
>
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016

Merci pour le conseil, c'est compris;)
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
La fonction int ne convertit pas les nombres réels en entiers. Elle attend que la valeur entrée soit un entier sinon elle renvoie le message d'erreur que vous signalez.
Pas exactement... int() a plusieurs usages selon le type de l'argument.
int sert à renvoyer la partie entière des nombres (cas du float)
Et ça sert également à savoir si la chaîne est un entier (cas du string).