Ik probeer elementen van een invoerreeks te herhalen en ze uit een woordenboek te halen. Wat doe ik verkeerd?
number_map = { 1: -3, 2: -2, 3: -1, 4: 1, 5: 2, 6: 3 }
input_str = raw_input("Enter something: ")
strikes = [number_map(int(x)) for x in input_str.split()]
strikes = [number_map(int(x)) for x in input_str.split()]
TypeError: 'dict' object is not callable
Antwoord 1, autoriteit 100%
De syntaxis voor toegang tot een dictaat met een sleutel is number_map[int(x)]
. number_map(int(x))
zou eigenlijk een functieaanroep zijn, maar aangezien number_map
niet kan worden aangeroepen, wordt er een uitzondering gemaakt.
Antwoord 2, autoriteit 46%
Toegang tot het woordenboek met vierkante haken.
strikes = [number_map[int(x)] for x in input_str.split()]
Antwoord 3, autoriteit 36%
Je moet []
gebruiken om toegang te krijgen tot elementen van een woordenboek. Niet ()
number_map = { 1: -3, 2: -2, 3: -1, 4: 1, 5: 2, 6: 3 }
input_str = raw_input("Enter something: ")
strikes = [number_map[int(x)] for x in input_str ]
Antwoord 4, autoriteit 15%
strikes = [number_map[int(x)] voor x in input_str.split()]
Je krijgt een element uit een dict met deze []
haakjes, niet deze ()
.
Antwoord 5, autoriteit 15%
strikes = [number_map[int(x)] for x in input_str.split()]
Gebruik vierkante haken om woordenboeken te verkennen.
Antwoord 6, autoriteit 8%
U moet gebruiken:
number_map[int(x)]
Let op de vierkante haken!
Antwoord 7, autoriteit 3%
Een meer functionele benadering zou zijn door gebruik te maken van dict.get
input_nums = [int(in_str) for in_str in input_str.split())
strikes = list(map(number_map.get, input_nums.split()))
Je kunt zien dat de conversie een beetje onhandig is, het zou beter zijn om de abstractie van functiecompositie te gebruiken :
def compose2(f, g):
return lambda x: f(g(x))
strikes = list(map(compose2(number_map.get, int), input_str.split()))
Example:
list(map(compose2(number_map.get, int), ["1", "2", "7"]))
Out[29]: [-3, -2, None]
Natuurlijk zou je in Python 3 de expliciete conversie naar een list
vermijden. Een meer algemene benadering voor het samenstellen van functies in Python is hier te vinden.
(Opmerking: ik kwam hier vanuit het Ontwerp van computerprogramma’s Udacity-klasse, om te schrijven:)
def word_score(word):
"The sum of the individual letter point scores for this word."
return sum(map(POINTS.get, word))
Antwoord 8, autoriteit 2%
het is number_map[int(x)]
, je hebt geprobeerd de kaart daadwerkelijk aan te roepen met één argument