0
votes

TypeError: Tous les arguments ne sont pas convertis lors de la mise en forme de chaîne (Python 3) (chaînes)

Je reçois cette erreur sur Python 3, TypeError: Pas tous les arguments convertis lors de la mise en forme de chaîne CODE>, je sais que cela est dû à la chaîne commençant par " [ code>" mais Le problème que je résolvant a ceci comme la chaîne d'entrée ' [1, 2, 3, 4, 5, 6, 7, 8, 9] code>' et la tâche consiste à trouver les nombres pairs sur Python 3. Toute aide serait très appréciée.

y = "[[1,2,3,4],[4,5,6,7]]"
result = [[0,0],
 [0,0],
 [0,0],
 [0,0]]

#iterate through rows
for i in range(len(X)):
# iterate through columns
    for j in range(len(X[0])):
        result[j][i] = X[i][j]
for r in result:
  print(r)

 IndexError: list index out of range ` I am getting this same type of problem again, the matrix has been input as a STRING.


1 commentaires

Parce que vous passez une chaîne ... pas une liste ... Votre fonction tel qu'il est nécessaire de répondre à une liste de chiffres, pas une chaîne qui est la représentation imprimée d'une liste ...


4 Réponses :


0
votes

Vous transmettez vos arguments en tant que chaînes:

[2, 4, 6, 8]


1 commentaires

Je ne peux pas faire cela, l'entrée doit être comme celle-ci '[1, 2, 3, 4, 5, 6, 7, 8, 9]'



0
votes

Vous n'abandonnez pas une liste à votre fonction, mais une chaîne forte>. Donc, l'énumération de votre boucle va énumérer les caractères de votre liste, c'est-à-dire '[' code> alors '1' code>, puis ',' code> " etc.

Ce n'est probablement pas ce que vous voulez. p>

Utilisez à la place: P>

print(is_even_num([1, 2, 3, 4, 5, 6, 7, 8, 9]))


2 commentaires

Mais la question a la chaîne comme entrée, ne peut pas changer cela! Je prends en fait l'entrée de l'utilisateur!


Vous devez transformer cela dans une liste d'entiers. L'utilisation peut utiliser Eval () qui est dangereuse, ou vous pouvez analyser cette chaîne. Utilisez des méthodes de chaîne telles que la bande () pour éliminer les espaces indésirables, vérifier que les premier et les derniers caractères sont «['et']» et supprimez-les, utilisez la méthode Split pour fragmenter les virgules et convertir les sous-chaînes en INTS. Devrait être assez facile.



2
votes

Supprimer [ code> et ] code> et divisez la chaîne: xxx pré>

sortie: p>

[1, 4]
[2, 5]
[3, 6]
[4, 7]


1 commentaires

Merci beaucoup à nouveau @codepope j'ai mis à jour ma question avec deux autres problèmes que je suis confronté en raison des chaînes étant passées en entrée! L'entrée ne peut pas être modifiée et elle doit être fournie au code comme chaînes



0
votes

Vous ne pouvez pas utiliser l'opérateur "%" avec des chaînes. Supprimez ces caractères de votre chaîne qui ne peuvent pas être converties en int ou float.

def is_even_num(l):
    l = l.replace('[','').replace(']','').split(",")
    return [x for x in l if int(x)%2 ==0]
print(is_even_num('[1, 2, 3, 4, 5, 6, 7, 8, 9]'))


0 commentaires