[Tutor] Help with return results statement.

Alan Gauld alan.gauld at btinternet.com
Thu Oct 22 05:14:49 EDT 2015


On 22/10/15 10:03, Vusa Moyo wrote:
> Hi Guys. Thanks for the responses and assistance.
>
> I came right after-all. The last 2 blocks read the following.

Glad you are happy but there is still something you could improve:

> def get_class_average(students):
>     results = []
>     for a in students:
>         b = float(get_average(a))

You really don't need the float() here. get_average() is guaranteed
to return a float.

>         results.append(b)
>     return average(results)
>
>
> students = [lloyd, alice, tyler]
> print(get_class_average(students))
> bother = get_class_average([lloyd, alice, tyler])
> print(get_letter_grade(bother))
>
> Worked like a charm.
>
> Thanks for the assistance.
>
> Regards
>
> Vusa
>
>
> On Tue, Oct 20, 2015 at 2:38 PM, Alan Gauld <alan.gauld at btinternet.com 
> <mailto:alan.gauld at btinternet.com>> wrote:
>
>     On 20/10/15 12:29, Vusa Moyo wrote:
>
>         Hi there. My script is as follows,
>
>
>         alice = {
>              "name": "Alice",
>              "homework": [100.0, 92.0, 98.0, 100.0],
>              "quizzes": [82.0, 83.0, 91.0],
>              "tests": [89.0, 97.0]
>         }
>
>
>         # Add your function below!
>         def average(numbers):
>
>     >    total = sum(numbers)
>     >    total = float(total)
>
>     That line isn't necessary since the inputs are floats already.
>
>     >    total = total / len(numbers)
>     >    return total
>     >
>
>         def get_average(student):
>              homework = average(student["homework"])
>              quizzes = average(student["quizzes"])
>              tests = average(student["tests"])
>              return 0.1 * homework + 0.3 * quizzes + 0.6 * tests
>
>         def get_letter_grade(score):
>              if score >= 90:
>                  return "A"
>              elif score >= 80:
>                  return "B"
>
>
>         print get_average(lloyd)
>
>         def get_class_average(students):
>              results = []
>              for a in students:
>                  b = int(get_average(a))
>                  results.append([b])
>                  return results
>
>
>         get_class_average(alice)
>
>         I receive a zero value for results, which doesnt quite make
>         sense to me.
>
>
>     Nor to me. Are you sure its a zero result? It should be a list of
>     some kind not a number. Or do you mean you get an empty list back?
>
>     Notice that get_class_average() expects your students value to be
>     some kind of sequence or collection. The for loop will iterate
>     over that. If you pass Alice as a single student it will iterate
>     over the keys, trying first of all to get the average of "Alice"
>     which should fail with an error. Did you get any errors? If so
>     please let us see them.
>
>     Please show us the actual code you execute, the actual output
>     and the full text of any errors.
>
>     One other thing that seems weird to me is that you go to great
>     pains to produce a float as a result of get_average() but then you
>     immediately convert it to an int. Why not leave it as a float?
>
>
>     -- 
>     Alan G
>     Author of the Learn to Program web site
>     http://www.alan-g.me.uk/
>     http://www.amazon.com/author/alan_gauld
>     Follow my photo-blog on Flickr at:
>     http://www.flickr.com/photos/alangauldphotos
>
>
>
>     _______________________________________________
>     Tutor maillist  - Tutor at python.org <mailto:Tutor at python.org>
>     To unsubscribe or change subscription options:
>     https://mail.python.org/mailman/listinfo/tutor
>
>


-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos



More information about the Tutor mailing list