首页 > 解决方案 > 带有参数列表和标准差的函数

问题描述

编写一个名为 Person 的类,它有两个数据成员——人名和年龄。它应该有一个 init 方法,它接受两个值并使用它们来初始化数据成员。编写一个名为 std_dev 的单独函数(不是 Person 类的一部分),它将 Person 对象列表作为参数并返回所有年龄的标准差(使用 N 分母的总体标准差,而不是样本标准差,它使用不同的分母)。

必须在python中

类人:

def __init__(self, name, age):
    """doc string 1"""
    self.name = name
    self.age = age

def show_person(person_list):
    """doc string 2"""
    for person in person_list:
        print("Name:", person.name, "\t Age:", person.age)

def std_dev(person_list, length):
    """doc string 3"""
    total, mean, sd = 0.0, 0.0, 0.0

for person in person_list:
    total += person.age

mean = total / length

for person in person_list:
    sd += math.pow(person.age - mean, 2)
    return math.sqrt(sd / length)

测试失败:无法导入测试模块:测试回溯(最近一次调用最后一次):文件“/usr/lib/python3.6/unittest/loader.py”,第 428 行,在 _find_test_path 模块 = self._get_module_from_name(name) 文件中“/usr/lib/python3.6/unittest/loader.py”,第 369 行,在 _get_module_from_name 导入(名称)文件“/autograder/source/tests/tests.py”,第 3 行,从 std_dev 导入 std_dev,Person文件“/autograder/source/std_dev.py”,第 28 行 return math.sqrt(sd / length) ^ SyntaxError: 'return' outside function

标签: pythonlistrecursion

解决方案


首先,你必须import math

import math

class Person:

  def __init__(self, name, age):
    """doc string 1"""
    self.name = name
    self.age = age

我认为不show_person应该在你的 person 类中缩进

def show_person(person_list):
    """doc string 2"""
    for person in person_list:
      print("Name:", person.name, "\t Age:", person.age)

您的std_dev功能也是如此。另一件事是您不必将列表长度作为函数中的参数。我们可以很容易地找到它,len(person_list)如下所示:

def std_dev(person_list):
  """doc string 3"""
  total, mean, sd = 0.0, 0.0, 0.0
  # No reason to take length of list as argument
  # We can just get it this way
  length = len(person_list)
  for person in person_list:
    total += person.age

  mean = total / length

  for person in person_list:
    sd += math.pow(person.age - mean, 2)
  return math.sqrt(sd / length)

运行示例:

p1 = Person("Alex", 36)
p2 = Person("Billie", 34)
p3 = Person("Carol", 32)
persons = [p1, p2, p3]
show_person(persons)
print(std_dev(persons))

输出:

Name: Alex   Age: 36
Name: Billie   Age: 34
Name: Carol    Age: 32

1.632993161855452

希望这可以帮助 :)


推荐阅读