get method
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Mon Dec 29 21:02:16 EST 2008
On Mon, 29 Dec 2008 17:38:36 -0800, Ross wrote:
> On Dec 29, 8:07 pm, Scott David Daniels <Scott.Dani... at Acm.Org> wrote:
>> Ross wrote:
>> > ... Use get to write histogram more concisely. You should be able to
>> > eliminate the if statement.
>>
>> > def histogram(s):
>> > d = dict()
>> > for c in s:
>> > d[c]= d.get(c,0)
>> > return d
>>
>> > This code returns a dictionary of all the letters to any string s I
>> > give it but each corresponding value is incorrectly the default of 0.
>> > What am I doing wrong?
>>
>> How is this code supposed to count?
>>
>> --Scott David Daniels
>> Scott.Dani... at Acm.Org
>
> I realize the code isn't counting, but how am I to do this without using
> an if statement as the problem instructs?
You don't increment a value using if. This would be silly:
# increment x
if x == 0:
x = 1
elif x == 1:
x = 2
elif x == 2:
x = 3 # can I stop yet?
else:
x = "I can't count that high!"
You increment a value using + 1:
x = x + 1
or
x += 1
In the original code, the program did this:
def histogram(s):
d = dict()
for c in s:
if c not in d:
d[c] = 1
else:
d[c] += 1
* look for c in the dict
* if it isn't there, set d[c] to 1
* but if it is there, increment d[c] by 1
Your attempt was quite close:
def histogram(s):
d = dict()
for c in s:
d[c]= d.get(c,0)
return d
which is pretty much the same as:
* set d[c] to whatever d[c] already is, or 0 if it isn't already there.
So what you need is:
* set d[c] to whatever d[c] already is plus one, or 0 plus one if it
isn't already there.
It's a two character change to one line. Let us know if you still can't
see it.
--
Steven
More information about the Python-list
mailing list