python programming help

rafaellasav at gmail.com rafaellasav at gmail.com
Sun Dec 8 14:06:55 EST 2013


On Sunday, December 8, 2013 6:52:12 PM UTC, Benjamin Kaplan wrote:
> On Sun, Dec 8, 2013 at 10:32 AM, <rafaellasav at gmail.com> wrote:
> 
> >
> 
> > On Sunday, December 8, 2013 6:27:34 PM UTC, bob gailer wrote:
> 
> > > On 12/8/2013 12:59 PM, rafaellasav at gmail.com wrote:
> 
> > >
> 
> > > > i have a dictionary with names and ages for each name. I want to write a function that takes in an age and returns the names of all the people who are that age.
> 
> > >
> 
> > > > please help
> 
> > >
> 
> > > Welcome to the python list. Thanks for posting a question.
> 
> > >
> 
> > >
> 
> > >
> 
> > > If you were hoping for one of us to write the program for you ... well
> 
> > >
> 
> > > that's not what we do on this list.
> 
> > >
> 
> > >
> 
> > >
> 
> > > Please post the code you have so far and tell us exactly where you need
> 
> > >
> 
> > > help.
> 
> > >
> 
> > >
> 
> > >
> 
> > > Also tell us what version of Python, what OS, and what you use to write
> 
> > >
> 
> > > and run Python programs.
> 
> >
> 
> > name = ['Alice', 'Bob', 'Cathy', 'Dan', 'Ed', 'Frank', 'Gary', 'Helen', 'Irene', 'Jack', 'Kelly', 'Larry']
> 
> > age = [20, 21, 18, 18, 19, 20, 20, 19, 19, 19, 22, 19]
> 
> > dic={}
> 
> > def combine_lists(name,age):
> 
> >     for i in range(len(name)):
> 
> >         dic[name[i]]= age[i]
> 
> > combine_lists(name,age)
> 
> > print dic
> 
> >
> 
> > def people(age):
> 
> >     people=lambda age: [name for name in dic if dic[name]==age]
> 
> >
> 
> > people(20)
> 
> >
> 
> >
> 
> >
> 
> >
> 
> > this is the code i have so far(with the help of the first post ;p). i understand how a function and a dictionary works and what I'm asked to find. but i don't get the lambda age part. and this code doesn't give me any result
> 
> >
> 
> >
> 
> 
> 
> To return a value from a function, you need to use the "return"
> 
> statement with the value you want to pass back out. You're not doing
> 
> that here. Also, you're using a lot of shorthand stuff that you should
> 
> probably avoid until you're more comfortable with the language
> 
> 
> 
> * Lambda is shorthand for a function. foo = lambda bar : bar + 2 is
> 
> the same thing as the function
> 
> def foo(bar) :
> 
>     return bar + 2
> 
> 
> 
> * a list comprehension is short-hand for a loop. spam = [foo for foo
> 
> in bar if baz(foo)]  is the same thing as
> 
> spam = []
> 
> for foo in bar :
> 
>     if baz(foo) :
> 
>         spam.append(foo)
> 
> 
> 
> You don't need a lambda here- just call the code that you need to call directly.

i get it, thanks a lot i wrote a different one and it works

def people(age):
    people=[name for name in dic if dic[name]==age]
    print(people)

people(20)

i have one last question

it asks me to test my program function by running these lines:
print ’Dan’ in people(18) and ’Cathy’ in people(18)
print ’Ed’ in people(19) and ’Helen’ in people(19) and\
’Irene’ in people(19) and ’Jack’ in people(19) and ’Larry’in
people(19)
print ’Alice’ in people(20) and ’Frank’ in people(20) and ’Gary’ in
people(20)
print people(21) == [’Bob’]
print people(22) == [’Kelly’]
print people(23) == []

but when i wrote these lines it returns me an error 
Traceback (most recent call last):
  File "/Users/rafaellasavva/Desktop/people.py", line 19, in <module>
    print 'Dan' in people(18) and 'Cathy' in people(18)
TypeError: argument of type 'NoneType' is not utterable

do you know what it might be wrong?



More information about the Python-list mailing list