NealO
@NealO
Jr.Dev

Задачка на питон, хочу понять как это работает на питоне, можете помочь?

Задача:
Напишите функцию фильтрации студентов по средней оценке (так чтобы
функция возвращала всех студентов выше заданного в параметрах
функции среднего балла). Примерная схема работы функции: создание
пустого массива, куда будут добавляться все студенты, прошедшие
фильтрацию; запуск цикла, в каждой итерации которого необходимо
считать среднюю оценку текущего студента и сравнивать с тем
значением, что передано в качестве параметра.


Питон не изучал, прошу помочь, не понимаю в чем ошибка в 29 строке. Версия питона 3. Пробую решить эту задачу на руби, что бы потом как нибудь перенести на питон.

Изначальный сырой код с ошибкой:

groupmates = [
	{
		"name": "StudentOne",
		"group": "111",
		"age": 21,
		"marks": [4, 3, 5, 5, 4]
	},
	{
		"name": "StudenTwo",
		"group": "111",
		"age": 22,
		"marks": [3, 2, 3, 4, 3]
	},
	{
		"name": "StudentThree",
		"group": "111",
		"age": 23,
		"marks": [3, 5, 4, 3, 5]
	},
	{
		"name": "StudentFour",
		"group": "111",
		"age": 24,
		"marks": [5, 5, 5, 4, 5]
	}
]

def print_students(students):
	print "name".ljust(15), "group".ljust(8), "age".ljust(8), "marks".ljust(20)
	for student in students:
		print student["name"].ljust(15), student["group"].ljust(8), str(student["age"]).ljust(8), str(student["marks"]).ljust(20)
	print
		filter(lambda x: sum(x.get("marks"))/len(x.get("marks")) > 4, groupmates)

print_students(groupmates)
  • Вопрос задан
  • 4008 просмотров
Пригласить эксперта
Ответы на вопрос 3
zelsky
@zelsky
Код ниже отработал на ура
43c2d4a4bd1a4f078fd10bd527c8249c.png
groupmates = [
  {
    "name": "StudentOne",
    "group": "111",
    "age": 21,
    "marks": [4, 3, 5, 5, 4]
  },
  {
    "name": "StudenTwo",
    "group": "111",
    "age": 22,
    "marks": [3, 2, 3, 4, 3]
  },
  {
    "name": "StudentThree",
    "group": "111",
    "age": 23,
    "marks": [3, 5, 4, 3, 5]
  },
  {
    "name": "StudentFour",
    "group": "111",
    "age": 24,
    "marks": [5, 5, 5, 4, 5]
  },
  {
    "name": "StudentFive",
    "group": "111",
    "age": 29,
    "marks": [5, 5, 5, 5, 5]
  }
]

def count_mark(students,mark):
    print ("name".ljust(15), "group".ljust(8), "age".ljust(8), "marks".ljust(20))
    for student in students:
        marks_list = student['marks']
        result =  (sum(marks_list)/len(marks_list))
        if result >= need:
            print(student["name"].ljust(15), student["group"].ljust(8), str(student["age"]).ljust(8), str(student["marks"]).ljust(20))

need = int(input('Input :'))

count_mark(groupmates,need)
Ответ написан
@iegor
Вообще стоило бы показать ошибку, но то, что бросается в глаза - в python3 print это функция, все что вы хотите вывести на экран необходимо передать как аргумент этой функции
Ответ написан
Комментировать
NealO
@NealO Автор вопроса
Jr.Dev
Решение:
def print_studs(students):
    t = '{:<16}{:<8}{:<8}{}'
    print(t.format('name', 'group', 'age', 'marks'))
    print('\n'.join([t.format(s['name'], s['group'], s['age'], s['marks']) for s in students]))
  
def all_students(students):
    return students
    
def students_avg(students, n):
    return [s for s in students if sum(s['marks'])/len(s['marks']) > n]

print_studs(all_students(groupmates))
print()
print_studs(students_avg(groupmates, 4))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы