Python-Project-10-学习笔记

[TOC]

练习 1

  1. 创建一个空列表ages来存储艺术家年龄数据。

  2. 使用循环遍历moma中的行。

  3. 在每次迭代中,将索引6的艺术家创作艺术品时的年份指定为变量date,将索引3的艺术家出生年份指定为变量birth

    • 如果出生日期是int类型的,则计算艺术家在创作艺术品时的年龄,并将其分配给变量age
    • 如果birth不是int类型,则将0赋给变量age
    • age附加到ages列表。
  4. 创建一个空列表final_ages,以存储艺术家的最高年龄。

  5. 使用循环遍历每个年龄段。在每次迭代中:

    • 如果EndDate值减去BeginDate值大于20,则将年龄分配给变量final_age。
    • 如果EndDate值减去BeginDate值不大于20,则将”Unknown”分配给变量final_age。
    • final_age添加到final_ages列表中。
from csv import reader

opened_file = open('dataset/artworks_clean.csv', encoding='utf-8')
read_file = reader(opened_file)
moma = list(read_file)

ages = []
for row in moma[1:]:
date = int(row[6])
try:
birth = int(row[3])
age = date-birth
except ValueError:
age = 0
ages.append(age)
final_ages = []
for row in moma[1:]:
final_age = ''
try:
diff = int(row[4])-int(row[3])
if diff > 20:
final_age = int(row[6])-int(row[3])
else:
final_age = "Unknown"
except ValueError:
final_age = "Unknown"
final_ages.append(final_age)

练习 2

  1. 创建一个空列表decades来存储所有的decade数据。
  2. 遍历final_ages的值进行循环,并且在每次循环中:
    • 如果age"Unknown",则将其分配给变量decade
    • 如果age不是"Unknown"
      • 将整数值转换为字符串,并将其分配给变量decade
      • 使用列表切片删除decade的最后一个字符。
      • 使用+运算符将子字符串"0s"添加到字符串decade的末尾。
    • decades列表中添加decade
from csv import reader

opened_file = open('dataset/artworks_clean.csv', encoding='utf-8')
read_file = reader(opened_file)
moma = list(read_file)

ages = []
for row in moma[1:]:
date = int(row[6])
try:
birth = int(row[3])
age = date-birth
except ValueError:
age = 0
ages.append(age)
final_ages = []
for row in moma[1:]:
final_age = ''
try:
diff = int(row[4])-int(row[3])
if diff > 20:
final_age = int(row[6])-int(row[3])
else:
final_age = "Unknown"
except ValueError:
final_age = "Unknown"
final_ages.append(final_age)

decades = []
for age in final_ages:
if age == "Unknown":
decade = age
else:
decade = str(age)[:-1]+"0s"
decades.append(decade)

练习 3

  1. 创建一个空字典,artist_freq
  2. 遍历moma列表中的每一行,在每个循环中你需要做如下操作:
    • 将艺术家的名称(索引1)分配给变量artist
    • 如果artist还不是artist_freq中的键,请将artist添加到artist_freq中的键,并将值赋值为1
    • 如果artistartist_freq中的键,请将该键对应的值加1。
from csv import reader

opened_file = open('dataset/artworks_clean.csv', encoding='utf-8')
read_file = reader(opened_file)
moma = list(read_file)

artist_freq = {}
for row in moma[1:]:
artist = row[1]
artist_freq[artist] = artist_freq.get(artist, 0)+1

练习 4

  1. 创建一个函数artist_summary(),该函数接受一个参数,即艺术家的姓名。
  2. 函数应以下步骤打印艺术家的摘要:
    • artist_freq字典中检索艺术品的数量,并将其分配给变量。
    • 使用上面图表中的格式,创建一个使用大括号({})将名称和变量插入字符串的模板字符串。
    • 使用str.format()方法将艺术家的姓名和艺术品数量插入字符串模板。
    • 使用print()函数显示最终字符串。
  3. 使用函数显示艺术家"Henri Matisse"的摘要。
from csv import reader

opened_file = open('dataset/artworks_clean.csv', encoding='utf-8')
read_file = reader(opened_file)
moma = list(read_file)

artist_freq = {}
for row in moma[1:]:
artist = row[1]
artist_freq[artist] = artist_freq.get(artist, 0)+1


def artist_summary(who):
return "艺术家 {name} 在数据集中有 {num} 件作品".format(
name=who, num=artist_freq.get(who, 0))


print(artist_summary("Henri Matisse"))

总结

恭喜,你已经掌握了:

  • 创建逻辑来分析艺术家年龄数据。
  • 创建频率表字典。
  • 轻松地将值插入字符串以总结我们的分析结果。

我们一起回顾刚刚遇到的困难和总结出来的经验:

语法

  1. 按顺序将值插入字符串:
continents = "France is in {} and China is in {}".format("Europe", "Asia")
  1. 按位置将值插入字符串:
squares = "{0} times {0} equals {1}".format(3,9)
  1. 按名称将值插入字符串:
population = "{name}'s population is {pop} million".format(name="Brazil", pop=209)

概念

  • str.format()是一个强大的工具,它帮助我们编写易于阅读的代码,同时将字符串与其他变量结合起来。