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

Fermé
paffou59 - Modifié par crapoulou le 27/04/2016 à 18:46
 paffou59 - 6 mai 2016 à 14:13
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 11842 Date d'inscription lundi 31 janvier 2011 Statut Contributeur Dernière intervention 25 avril 2024 2 251
27 avril 2016 à 19:15
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
G modifié:

n=int(eval(input()))

et çà a fonctionné...pourquoi?...je ne sais pas
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
Modifié par jisisv le 4/05/2016 à 20:52
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017
5 mai 2016 à 00:44
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
6 mai 2016 à 14:13
Merci pour le conseil, c'est compris;)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 5/05/2016 à 00:43
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