web-dev-qa-db-fra.com

TypeError: type (s) d'opérande non pris en charge pour -: 'str' et 'int'

Nouveau sur python et programmation, comment puis-je avoir cette erreur?

def cat_n_times(s, n):
    while s != 0:
        print(n)
        s = s - 1

text = input("What would you like the computer to repeat back to you: ")
num = input("How many times: ")

cat_n_times(num, text)
43
user285896
  1. La raison pour laquelle cela échoue est parce que (Python 3) input renvoie une chaîne. Pour le convertir en entier, utilisez int(some_string).

  2. En règle générale, vous ne suivez pas les index manuellement en Python. Un meilleur moyen de mettre en œuvre une telle fonction serait

    def cat_n_times(s, n):
        for i in range(n):
            print(s) 
    
    text = input("What would you like the computer to repeat back to you: ")
    num = int(input("How many times: ")) # Convert to an int immediately.
    
    cat_n_times(text, num)
    
  3. J'ai changé votre API ci-dessus un peu. Il me semble que n devrait être le nombre de fois et s devrait être le chaîne.

50
Mike Graham

Pour référence ultérieure Python est fortement typé . Contrairement aux autres langages dynamiques, il ne convertira pas automatiquement les objets d'un type ou de l'autre (par exemple, à partir de str à int), vous devez donc le faire vous-même, vous l’aimerez à long terme, croyez-moi!

26
jathanism