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

paffou59 -  
 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

georges97 Messages postés 13758 Date d'inscription   Statut Contributeur Dernière intervention   2 646
 
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
2
paffou59
 
G modifié:

n=int(eval(input()))

et çà a fonctionné...pourquoi?...je ne sais pas
0
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
Et tu peux avantageusement remplacer la fonction ligneCar par
n * car

exemple:
>>> 3 *"AbC"
'AbCAbCAbC'
>>> 0 *"AbC"
''
'
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention  
 
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.
0
paffou59 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
Merci pour le conseil, c'est compris;)
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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).
0