Python-Project-6-学习笔记

[TOC]

练习

  1. 练习 sum(),在不使用 sum() 的情况下计算list列表中的元素和。
    • 初始化变量 sum_manual0
    • 遍历 list, 每一次迭代将现有的值加在 sum_manual上。
  2. 遍历完成后,打印 sum_manualsum(list) ,看看这两个值是否一致。
def get_sum_manual(input_list):
sum_manual = 0
for item in input_list:
sum_manual += item
return sum_manual


list_1 = [1, 8, 10, 9, 7, 5]
list_2 = [678, 685, 870, 927, 176]
list_3 = [4444, 8897, 6340, 9896]

print("*********************************************************")
print("sum = %d\tsum_manual = %d\n" % (sum(list_1), get_sum_manual(list_1)))
print("*********************************************************")
print("sum = %d\tsum_manual = %d\n" % (sum(list_2), get_sum_manual(list_2)))
print("*********************************************************")
print("sum = %d\tsum_manual = %d\n" % (sum(list_3), get_sum_manual(list_3)))

练习

使用刚刚创建好的 square() 函数,用它来计算10和16的平方。

  • 将10的平方分配给变量squared_10
  • 将16的平方分配给变量squared_16
def square(a_number):
return a_number * a_number


squared_10 = square(10)
squared_16 = square(16)
print(squared_10)
print(squared_16)

练习

让我们根据上述代码来修改为第一个函数extract(),用于提取我们想要的任何列的值。

from csv import reader


def extract(col):
app_data_set = list(reader(open('assets/dataset/AppleStore.csv')))
content_ratings = []
for line in app_data_set[1:]:
content_rating = line[col]
content_ratings.append(content_rating)
return content_ratings


content_ratings = extract(2)
print(content_ratings)

练习

编写一个名为freq_table()的函数,该函数为任何列表生成频率表:

  • 该函数应将列表作为输入。
  • 在函数主体内,编写代码,为该列表生成频率表并将该表存储在字典中。
  • 将频率表作为字典返回。
from csv import reader


def extract(col):
app_data_set = list(reader(open('assets/dataset/AppleStore.csv')))
content_ratings = []
for line in app_data_set[1:]:
content_rating = line[col]
content_ratings.append(content_rating)
return content_ratings


def freq_table(body):
out = {}
for key in body:
out[key] = out.get(key, 0)+1
return out


content_ratings = freq_table(extract(10))
print(content_ratings)

练习

更新当前的 freq_table() 函数以增加可复用性。

  • 这次函数应该接受两个输入:一个数据集和一个列的索引。
  • 在函数内:
    • 使用数据集(包含列表的列表)参数循环访问数据集,对于每次迭代,使用参数即索引号来选择所需的值。
    • 将频率表构建为字典。
  • 该函数应将频率表作为字典返回。
from csv import reader


def freq_table(body, index):
out = {}
for line in body:
out[line[index]] = out.get(line[index], 0)+1
return out


answer = freq_table(
list(reader(open('assets/dataset/AppleStore.csv')))[1:], 10)
print(answer)

练习

使用 freq_table() 函数为cont_ratinguser_ratingprime_genre列生成频率表。

  • cont_rating列生成表时,请使用位置实参,将表分配给一个名为content_ratings_ft的变量。
  • 按照顺序(数据集,索引)对 user_rating 列使用关键字参数,将表分配给一个名为ratings_ft的变量。
  • 按照顺序(索引,数据集)对prime_genre列使用关键字参数,将表分配给名为genres_ft的变量。
from csv import reader


def freq_table(body, index):
out = {}
for line in body:
out[line[index]] = out.get(line[index], 0)+1
return out


content_ratings_ft = freq_table(
list(reader(open('assets/dataset/AppleStore.csv')))[1:], 10)
ratings_ft = freq_table(
body=list(reader(open('assets/dataset/AppleStore.csv')))[1:], index=7)
genres_ft = freq_table(index=11, body=list(
reader(open('assets/dataset/AppleStore.csv')))[1:])
print(content_ratings_ft)
print(ratings_ft)
print(genres_ft)

练习

  1. 编写一个名为 mean() 的函数,该函数计算我们想要从数据集中获取的任何列的均值。
    • 该函数应接受两个输入:数据集和索引值。
    • mean() 函数的内部,使用 extract() 函数将列的值提取到单独的列表中,然后使用 find_sum()find_length() 计算该列表中的值的平均值。
    • mean() 函数应返回列的均值。
  2. 使用 mean() 函数计算 price 列的平均值,将结果分配给名为 avg_price 的变量。
from csv import reader


def extract(body, index):
out = []
for line in body:
content_rating = line[index]
out.append(content_rating)
return out


def find_sum(a_list):
a_sum = 0
for element in a_list:
a_sum += float(element)
return a_sum


def find_length(a_list):
length = 0
for element in a_list:
length += 1
return length


def mean(body, index):
list_x = extract(body, index)
return find_sum(list_x)/find_length(list_x)


avf_price = mean(list(reader(open('assets/dataset/AppleStore.csv')))[1:], 4)
print(avf_price)

语法

  1. 使用单个参数创建函数:
def square(number):
return number**2
  1. 创建具有多个参数的函数:
def add(x, y):
return x + y
  1. 在另一个函数的定义内重复使用一个函数:
def add_to_square(x):
return square(x) + 1000 # 假设我们已经定义了square()

概念

  • 通常,函数会包含:
    • 它接受输入。
    • 它对该输入进行处理。
    • 它返回一个输出。
  • 从结构上讲,函数由 def 语句,主体和 return 语句组成。
  • 输入变量称为形参,参数采用的各种值称为实参。在square(number=6)中,number变量是形参。6是传递给形参number的实参。
  • 通过名称传递的参数称为关键字参数,当我们使用多个关键字参数时,形参顺序不重要。
  • 通过位置传递的参数称为位置参数。当我们使用多个位置参数时,必须按照函数定义的形参顺序输入实参。
  • 调试更复杂的功能可能会更具挑战性,但是我们可以通过阅读报错中的traceback来发现错误。