Python >> Tutoriel Python >  >> Python

Comment réparer TypeError :impossible de multiplier la séquence par un non-int de type 'float' en Python ?

✯ Présentation

Problème : Correction de TypeError: Can’t Multiply Sequence by non-int of Type ‘float’ en Python.

Exemple : Considérez que vous voulez calculer la circonférence d'un cercle en utilisant le rayon saisi par l'utilisateur, comme indiqué ci-dessous.

Comme vous pouvez le voir ci-dessus, nous avons rencontré un TypeError lors de l'exécution de notre code.

Des bogues comme ceux-ci peuvent être vraiment frustrants ! ? Mais, après avoir fini de lire cet article, ces bogues stupides ne seront plus un sujet de préoccupation pour vous. Par conséquent, pour comprendre ce qui cause de telles erreurs et comment les éviter, il est important de répondre à quelques questions :

  • Qu'est-ce qu'un TypeError ? en Python ?
  • Pourquoi Python lève-t-il TypeError: Can’t Multiply Sequence by non-int of Type ‘float’ ? ?
  • Comment corrige-t-on TypeError: Can’t Multiply Sequence by non-int of Type ‘float’ ?

Plongeons dans chaque question une par une.

✯ Qu'est-ce que TypeError en Python ?

Python lève un TypeError lorsque vous essayez d'utiliser une fonction ou d'appeler un opérateur sur quelque chose dont le type est incorrect.

Exemple :

print('Python'+3.8)

Sortie :

Traceback (most recent call last):
  File "D:/PycharmProjects/PythonErrors/TypeError Can’t Multiply Sequence by non-int of Type ‘float’ In Python.py", line 1, in <module>
    print('Python'+3.8)
TypeError: can only concatenate str (not "float") to str

⮞ Nous avons rencontré l'erreur ci-dessus car Python attend le + opérateur entre deux types numériques. Cependant, dans l'exemple ci-dessus, nous avons essayé d'ajouter un string et un float évaluer. Ainsi, Python lance un TypeError , nous indiquant qu'un des paramètres était de type incorrect.

Cela nous amène à la question suivante !

✯ Pourquoi Python lève-t-il – 'TypeError :can only concatenate str (not "float") to str' ?

Python permet la multiplication d'une chaîne et d'une valeur flottante. Cela signifie qu'il génère une séquence répétitive de la chaîne de sorte que la valeur de chaîne donnée soit répétée autant de fois que mentionné comme valeur entière.

Exemple :

print('Finxter '*5)

Sortie :

Finxter Finxter Finxter Finxter Finxter

 ? Mais, pouvez-vous multiplier une valeur flottante et une valeur de chaîne en Python ?

Réponse :Non, vous ne pouvez pas multiplier une valeur de chaîne et une valeur flottante en Python . Vous obtiendrez TypeError: can't multiply sequence by non-int of type 'float' si vous essayez de le faire.

Exemple :

radius = input("Enter the radius: ")  # string input
print('Circumference = ', 2 * 3.14 * radius)

Sortie :

Enter the radius: 5
Traceback (most recent call last):
  File "D:/PycharmProjects/PythonErrors/TypeError Can’t Multiply Sequence by non-int of Type ‘float’ In Python.py", line 2, in <module>
    print('Circumference = ',2*3.14*radius)
TypeError: can't multiply sequence by non-int of type 'float'

Solution : Veuillez ne suivre cette solution qu'après avoir parcouru les scénarios mentionnés ci-dessous .

radius = float(input("Enter the radius: "))
print('Circumference = ', 2 * 3.14 * radius)
# OUTPUT:
 # Enter the radius: 5
 # Circumference =  31.400000000000002

➥ De même, chaque fois que vous essayez de multiplier une valeur flottante et un type de données séquentiel (chaîne/tuple/listes), Python lèvera une TypeError :can'tmultipliate sequence by non-int of type 'float'.

Exemple :

my_list = [100, 200, 300, 400]  # list
my_tup = (9, 99, 999, 9999, 99999)  # tuple
print(2.0 * my_list)
print(2.0 * my_tup)

# DESIRED OUTPUT:
# [100, 200, 300, 400, 100, 200, 300, 400]
# (9, 99, 999, 9999, 99999, 9, 99, 999, 9999, 99999)

Sortie :

Traceback (most recent call last):
  File "D:/PycharmProjects/PythonErrors/TypeError Can’t Multiply Sequence by non-int of Type ‘float’ In Python.py", line 3, in <module>
    print(2.0 * my_list)
TypeError: can't multiply sequence by non-int of type 'float'

✯ Comment réparer - TypeError :impossible de multiplier la séquence par un non-int de type 'float' ?

? Pour éviter l'apparition de TypeError: Can’t Multiply Sequence by non-int of Type ‘float’ vous devez vous assurer que l'entrée de l'utilisateur est un flottant --point valeur en transtypant l'entrée de chaîne en float .

Examinons les solutions à cette erreur à l'aide de nombreux scénarios.

⮞ Type 1 :Convertir la température Fahrenheit en Celsius

Problème : température donnée en Fahrenheit ; comment le convertir en Celsius ?

Notre code :

Celsius = input("Enter the temperature: ")
print(Celsius, "°C = ", Celsius * 1.8 + 32, "°F")

Sortie :

Traceback (most recent call last):
  File "D:/PycharmProjects/PythonErrors/TypeError Can’t Multiply Sequence by non-int of Type ‘float’ In Python.py", line 2, in <module>
    print(Celsius, "°C = ", Celsius * 1.8 + 32, "°F")
TypeError: can't multiply sequence by non-int of type 'float'

Solution :

Celsius = float(input("Enter the temperature: "))
print(Celsius, "°C = ", Celsius * 1.8 + 32, "°F")

Sortie :

Enter the temperature: 37
37.0 °C =  98.60000000000001 °F

Voila ! nous avons résolu notre problème avec succès. ?

⮞ Type 2 :Multiplier n'importe quel type de données séquentiel (chaîne, tuple ou listes) et une valeur à virgule flottante

Python lève TypeError: can't multiply sequence by non-int of type 'float' chaque fois qu'une donnée séquentielle est multipliée par une valeur à virgule flottante.

Exemple 1 :

li = ['a', 'b', 'c']  # list
tup = (100, 200, 300)  # tuple
print(2.0 * li)
print(2.0 * tup)

# DESIRED OUTPUT:
# ['a', 'b', 'c', 'a', 'b', 'c']
# (100, 200, 300,100, 200, 300)

Sortie :

C:\Users\DELL\AppData\Local\Programs\Python\Python38\python.exe "D:/PycharmProjects/PythonErrors/TypeError Can’t Multiply Sequence by non-int of Type ‘float’ In Python.py"
Traceback (most recent call last):
  File "D:/PycharmProjects/PythonErrors/TypeError Can’t Multiply Sequence by non-int of Type ‘float’ In Python.py", line 3, in <module>
    print(2.0 * li)
TypeError: can't multiply sequence by non-int of type 'float'

Solution : L'erreur peut être évitée en transtypant la valeur flottante, c'est-à-dire 2.0 à une valeur entière, c'est-à-dire 2 .

li = ['a', 'b', 'c']  # list
tup = (100, 200, 300)  # tuple
print(int(2.0) * li)
print(int(2.0) * tup)

Sortie :

['a', 'b', 'c', 'a', 'b', 'c']
(100, 200, 300, 100, 200, 300)

Exemple 2 : Essayons de calculer la taxe totale à 10 % à partir d'une liste de prix donnée.

price = [100, 200, 300]
print('Tax = $%.2f' % sum(price) * 0.1)

# DESIRED OUTPUT:
# Tax = $60.00

Sortie :

Traceback (most recent call last):
  File "D:/PycharmProjects/PythonErrors/TypeError Can’t Multiply Sequence by non-int of Type ‘float’ In Python.py", line 2, in <module>
    print('Tax = $%f' % sum(price) * 0.1)
TypeError: can't multiply sequence by non-int of type 'float'

Solution :

Puisque vous avez le % opérateur dans votre expression, l'appel à sum() est lié à la chaîne, et effectivement vous avez :

<string_value> * tax

La solution consiste à ajouter des parenthèses appropriées pour forcer la priorité souhaitée, comme indiqué ci-dessous.

price = [100, 200, 300]
print('Tax = $%.2f' % (sum(price) * 0.1))

Sortie :

Tax = $60.00

Conclusion

J'espère que vous avez trouvé cet article utile. Veuillez vous abonner et restez à l'écoute pour des articles plus intéressants à l'avenir. Bon apprentissage! ?