【问题标题】:functions with parameter a list and standard deviation带有参数列表和标准差的函数
【发布时间】:2019-11-01 23:58:08
【问题描述】:

编写一个名为 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)

测试失败:导入测试模块失败:测试 Traceback(大多数 最近通话最后):文件“/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 import(名称)文件“/autograder/source/tests/tests.py”,第 3 行,在 从 std_dev 导入 std_dev,个人文件“/autograder/source/std_dev.py”,第 28 行 返回 math.sqrt(sd / 长度) ^ SyntaxError: 'return' 外部函数

【问题讨论】:

  • 看起来你的 sn-p 中的最后八行代码应该是 std_dev 函数的一部分,但它们不是。它们需要缩进。
  • 除了末尾的return 语句缩进正确外,它不应该在for 循环中。
  • 顺便说一句,你可以写total = sum(person.age for person in person_list)
  • 还有sd = sum(math.pow(person.age - mean, 2) for person in person_list)

标签: python list recursion


【解决方案1】:

首先,你必须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

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2013-09-14
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多