Le code suivant génère une erreur de lecture des valeurs en dehors de la classe lors de l'appel. Je ne peux pas y arriver!
if __name__ == '__main__': s = Solution() print (s.twoSum([2,7,11,15], 9))
Error: nums = [2,7,11,15], target = 9 ^ SyntaxError: cannot assign to literal
Comment lire les valeurs de nums et target en dehors de la classe? S'il vous plaît, expliquez. Je suis incapable de le comprendre.
Cela ne fonctionne que lorsque je fais cela.
nums = [2,7,11,15], target = 9 class Solution(object): def twoSum(self, nums, target): d = {} for i, n in enumerate(nums): m = target - n if m in d: return [d[m], i] else: d[n] = i
Pourquoi pas l'inverse -> nums = [2,7,11,15], target = 9
3 Réponses :
Ce n'est rien de compliqué mais une grammaire de base.
nums, target = [2,7,11,15], 9
Vous devez simplement attribuer des valeurs sur des lignes séparées. nums = [2,7,11,15], target = 9
essaie d'attribuer 9 à nums ET essaie d'attribuer 9 à votre liste et à votre cible. Le "impossible d'affecter au littéral" est dû au fait qu'il essaie d'attribuer la valeur 9 à la liste. Si vous substituiez une variable à la place de la liste, elle échouerait alors car la valeur unique 9 ne pouvait pas être décompressée en deux variables.
Puisque la partie syntaxique a été traitée par d'autres, si vous voulez utiliser nums et target dans votre classe, supprimez les arguments nums et target de la définition de votre méthode de classe comme ceci:
nums = [2,7,11,15] target = 9 class Solution(object): def twoSum(self): # here is the change d = {} for i, n in enumerate(nums): m = target - n if m in d: return [d[m], i] else: d[n] = i if __name__ == '__main__': s = Solution() print (s.twoSum())
Vous devez utiliser un point-virgule au lieu d'une virgule, ou placer les 2 affectations sur des lignes séparées.