【课程笔记】《Udacity数据分析(入门)》「纳米学位」——第 2部分:Python入门——By Tensor麻麻麻

第2部分:Python入门

Python入门总共分为:

  • 编程入门 - Turtle
  • 为何要学习 Python 编程
  • 数据类型和运算符
  • 数据结构
  • 控制流
  • 函数
  • 脚本编写
  • NumPy
  • Pandas

一、编程入门 - Turtle

1、变量
变量就是将代码中的名称与计算机中的数据关联

amy = turtle.Turtle() 

⬆️这一个行为叫做赋值,‘=’称为赋值运算符
案例:

import turtle
amy = turtle.Turtle()    #命名turtle为‘amy’,amy就是变量名称。注意,Python 区分大小写。例如,在 turtle.Turtle() 中,Turtle() 中的 T 大写了。因此 turtle 与 Turtle 含义不一样。我们说 Python 是一个区分大小写的编程语言。
amy.color("red")
amy.forward(100)
amy.right(135)
amy.forward(140)
amy.right(135)
amy.forward(100)


2、字符串
上边案例中的单词 "yellow" 和 "green" 称为字符串。字符串需要用“”扩起来

3、列表
在 Python 中,列表放入方括号里,并且用逗号分隔各项。
[1, 2, 3, 4, 5] 和 [7, 2, 1, 0, 9] 属于列表,也可以将字符串放入列表里:["hello", "yellow", "stuff", "things"]

每一句命令的作用

4、画图常用到的命令

import turtle
amy = turtle.Turtle()
pretty_color="yellow"
amy.color(pretty_color)  #线的颜色是黄色,我们还可以定义很多别的变量,都要放在指令运行前。
amy.width(10)  #宽度是10
amy.speed(8) #画图速度是8,最快画完是speed(0)
amy.penup() #停止绘制
amy.pendown()开始绘制
  • 注释代码:#
    需要对多行代码进行注释(取消注释),只需选中要注释掉(取消注释)的代码行,然后按下快捷键【⌘/】即可。

5、循环

import turtle
amy = turtle.Turtle()
amy.color("yellow")
for side in [1, 2, 3, 4, 5]:   #1、中括号后必须加冒号;2、循环次数取决于中括号中有几项
    amy.forward(100)  #循环内容要向右移动四个空格
    amy.right(72)  #循环内容要向右移动四个空格

6、列表和循环

import turtle
lengths = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100,110,120,130,140]  #做了赋值以后,lengths在后边就会被用到了
amy = turtle.Turtle()
amy.color("yellow")
amy.width(2)
for length in lengths:  #这句话就相当于for length in [10, 20, 30, 40, 50, 60, 70, 80, 90, 100,110,120,130,140]:
    amy.forward(length) 
    amy.right(90)

上边代码画出的形状.png

7、嵌套循环

import turtle

amy = turtle.Turtle()

# Make the width thicker so that the line will be easier to see
# 使线条宽度加粗,以便更容易看到线条
amy.width(5)

# Move back without drawing anything
# 向后移动且不画任何东西
amy.penup()
amy.forward(-140)
amy.pendown()

# Draw three shapes of different colors, with space in between
#绘制三种不同颜色的形状,形状间用空格间隔
for prettycolor in ["red", "orange", "yellow"]:
    amy.color(prettycolor)
    for side in [1, 2, 3, 4]:
        amy.forward(50)
        amy.right(90)
    amy.penup()
    amy.forward(100)
    amy.pendown()

8、错误bug
编程中会出现三大类型的错误:语法错误、用法错误和逻辑错误。

9、other
其他 turtle 的使用方法:

  • amy.hideturtle() 将使 turtle 本身消失。
  • amy.showturtle() 将使其再次出现。
    和下边的很相像⬇️
  • amy.penup() 将使其“抬笔”并且在移动时不绘制线条。
  • amy.pendown() 将使其再次移动时开始绘制图形。

二、为何要学习 Python 编程

这一部分没什么有用的内容,小姐姐主要就是想说,Python很有用。


ALL

几个注意事项:

  • Python 区分大小写;

  • 空格很重要;

  • 通过报错 Error Message 了解错误信息;


三、数据类型和运算符

Python的构建基石:数据类型和运算符

➡️算数运算符
+  加(addition)
- 减(subtraction)
* 乘(multiplication)
/ 除(division)
% 取模(相除后的余数)(mo du lo)
** 取幂(exponentiation)
//相除后向下取整到最接近的整数(integer division)
#注意:取模运算和取余运算是一个非常容易混淆的概念

算数运算符更多信息:https://wiki.python.org/moin/BitwiseOperators

➡️变量和赋值运算符

变量

1、变量名称中,只能使用常规字母、数字和下划线。不能包含空格,并且需要以字母或下划线开头。
2、不能使用保留字和内置标识符(下图是保留字的简单表格)保留字
3、变量名称的命名方式是全部使用小写字母,并用下划线区分单词

保留字

赋值运算符
赋值运算符的使用方式

X=2 ➡️ X=2
X+=2 ➡️ X=X+2
X-=2 ➡️ X=X-2

赋值运算符

练习:赋值和修改变量:

# The current volume of a water reservoir (in cubic metres)
reservoir_volume = 4.445e8
# The amount of rainfall from a storm (in cubic metres)
rainfall = 5e6

# decrease the rainfall variable by 10% to account for runoff
rainfall *= (1-0.1)
# add the rainfall variable to the reservoir_volume variable
reservoir_volume=rainfall+reservoir_volume
# increase reservoir_volume by 5% to account for stormwater that flows
# into the reservoir in the days following the storm
reservoir_volume *= (1+0.05)
# decrease reservoir_volume by 5% to account for evaporation
reservoir_volume *= (1-0.05)
# subtract 2.5e5 cubic metres from reservoir_volume to account for water
# that's piped to arid regions.
reservoir_volume -= 2.5e5
# print the new value of the reservoir_volume variable
print(reservoir_volume)

代码如上,做这道题我出现了两个小错误。1⃣️:括号没有用英文的;2⃣️忘记不能用%了,比如5%,在Python里就用0.05。

还有一个没搞太明白的就是这一步,感觉很奇怪。。。。

注释:add the rainfall variable to the reservoir_volume variable
reservoir_volume=rainfall+reservoir_volume

答案:447627500.0




更改变量

print(int(mv_density))

int的意思是整数




➡️整数和浮点数

int - 表示整数值(integer)
float - 表示小数或浮点数值

整数和浮点数
>>> print(.1 + .1 + .1 == .3)
False

0.1+0.1+0.1会大于0.3是因为进制不同https://docs.python.org/3/tutorial/floatingpoint.html

➡️布尔运算符、比较运算符、逻辑运算符

1、布尔运算:
布尔运算的发明者:George Boole
bool是boolean的缩写,是专门处理ture/false的变量
布尔数据类型存储的是值 True 或 False,通常分别表示为 1 或 0。
通常有 6 个比较运算符会获得布尔值:也就是下边的比较运算

2、比较运算:

<  小于
<=  小于等于
>  大于
>=  大于等于
==  等于
!=  不等于

3、逻辑运算符
and:比较两边是否都是true
or:是否至少一侧为true
not:颠倒布尔类型

➡️字符串

字符串的变量类型为“str”
使用双引号或者单引号定义字符串

>>> this_string = 'Simon\'s skateboard is in the garage.'
>>> print(this_string)

字符串也可以进行➕和✖️,不可以➖和➗

first_word='hello'
second_word='baby'
print(first_word+second_word)

结果会是:hellobaby,中间没有空格,如果我们需要有空格,则需要

print(first_word+“ ”+second_word)

内置函数len:
len 仅适用于“序列(例如字符串、字节、元组、列表或范围)或集合(例如字典、集合或冻结集合)”。

>>> first_word = 'Hello'
>>> second_word = 'There'
>>> print(first_word + second_word)

HelloThere

>>> print(first_word + ' ' + second_word)

Hello There

>>> print(first_word * 5)

HelloHelloHelloHelloHello

>>> print(len(first_word))

5
➡️数据类型:

四种数据类型:

整型_int【5】
浮点型_float【5.4】
布尔型_bool【true】
字符串_str【'hello'】

可以用“type”来查看数据类型

print(type(55))
<class 'int'>


➡️字符串方法

方法就像某些你已经见过的函数:

len("this")
type(12)
print("Hello world")
上述三项都是函数。
方法:
像:title(题目首字母大写)、islower(检查是否都是小写)、

print("jizhi julebu".title())
Jizhi Julebu
#title的方法使用⬆️
name="hannah"
print(name.islower())
true
方法

count 和 find 方法都接受另一个参数。但是,islower 方法不接受参数

>>>my_string="sebastion thrun"
>>> my_string.islower()
True
>>> my_string.count('a')
2
>>> my_string.find('a')
3

所有记不住的方法,来这里调用:https://docs.python.org/3/library/stdtypes.html#string-methods

find('hannah')
hannah第一次出现的位置
rfind('hannah')
hannah最后一次出现的位置




四、数据结构

数据结构类型:

  • 列表
  • 元组
  • 字典
  • 复合数据结构
➡️1、列表 [ ]

list是 Python 中最常见和最基本的数据结构之一。
列表可排序,你可以使用 .append 向列表中添加项目,列表项的索引始终以 0 开始。'

lst_of_random_things = [1, 3.4, 'a string', True]    #整数、浮点数、字符串、布尔
print(lst_of_random_things[4])
True
print(lst_of_random_things[-3])
a string
➡️列表切片
lst_of_random_things = [1, 3.4, 'a string', True]    #整数、浮点数、字符串、布尔
print(lst_of_random_things[1:2])
[3.4]
print(lst_of_random_things[:4])
[3.4, 'a string', True]

起始索引包含在内,终止索引排除在外。

字符串和列表的区别是:
字符串有一系列字母组成;
列表可以由任何元素组成;

mutability=可变性

➡️在列表中的列表方法:

len()表示元素数量
max()表示最大元素
min()表示最小元素
sorted()表示从小到大排序,加reverse则相反

Join,是一个字符串方法,它将字符串列表作为参数,并返回由分隔符字符串连接的列表元素组成的字符串。

new_str = "\n".join(["fore", "aft", "starboard", "port"])
print(new_str)
⬇️
fore
aft
starboard
port

append的方法非常有用,它将一个元素添加到列表的末尾。

letters = ['a', 'b', 'c', 'd']
letters.append('z')
print(letters)
⬇️
['a', 'b', 'c', 'd', 'z']

数据结构&数据类型??
数据类型只是一种对数据进行分类的类型。 这可以包括原始(基本)数据类型,如整数,布尔值和字符串,以及数据结构,如列表。
数据结构是以不同方式组织和分组数据类型的容器。 例如,列表可以包含的一些元素是整数,字符串,甚至是其他列表!

关于切片索引:记住,切片的较低索引是包括进去的,而较高索引是不包括在内的。

➡️2、元组(tuples)

元组不能像列表一样可以修改,有序但不可以排序;
元组的 小括号是可选的,也可以不要

➡️3、集合(set)

集合是一个包含唯一元素的可变无序集合数据类型。集合的一个用途是快速删除列表中的重复项。
【收集唯一元素,检查重复元素】

  • 集合是无序的,因此项目的出现顺序可能不一致,你可以使用 .add 向集合中添加项目。和字典及列表一样,集合是可变的。
numbers = [1, 2, 6, 3, 1, 1, 6]
unique_nums = set(numbers)
print(unique_nums)
⬇️
{1, 2, 3, 6}

你可以对集合执行的其他操作包括可以对数学集合执行的操作。可以对集合轻松地执行 union、intersection 和 difference 等方法,并且与其他容器相比,速度快了很多。

➡️4、字典和恒等运算符

字典是可变数据类型,其中存储的是唯一键到值的映射。

elements = {"hydrogen": 1, "helium": 2, "carbon": 6}
print(elements["helium"])  # print the value mapped to "helium"
elements["lithium"] = 3  # insert "lithium" with a value of 3 into the dictionary
print("carbon" in elements)
print(elements.get("dilithium"))
⬇️
True
None

集合可以用花括号来定义,但并不是唯一的——字典也可以用花括号来定义。但是,两者不同之处在于集合是由逗号分隔的元素序列,而字典是一系列用冒号标记的键值对,用逗号分隔.

➡️5、复合数据结构

elements = {"hydrogen": {"number": 1,
                         "weight": 1.00794,
                         "symbol": "H"},
              "helium": {"number": 2,
                         "weight": 4.002602,
                         "symbol": "He"}}

总结

总结直接截图了,其实再次重复一遍。
感觉,学数据结构最大的感受就是,多练习!!!这个最重要了,当时觉得看懂了概念,做的时候还是一脸懵逼。。。。练习才是最重要的 !!!


本章小结




五、控制流

学习这部分,一本入门书对我的作用还是蛮大的,推荐~《Python编程从入门到实践》,下载链接如下(网上很多,)
https://www.jb51.net/books/510188.html

  • 条件语句
  • 布尔表达式
  • For 和 While 循环
  • Break 和 Continue
  • Zip 和 Enumerate
  • 列表推导式
➡️1、条件语句

if 语句是是一种条件语句,根据条件为 true 还是 false 运行或执行相关代码。
注意:第一行最后加冒号(colon)下边开始锁进,循环语句

if phone_balance < 5:   #条件用布尔表达式指定,结果为 True 或 False。
    phone_balance += 10
    bank_balance -= 10
  • If、Elif、Else
    elif=if else
    if开头,elif中间,else最后
if season == 'spring':   #用==,意思是等于,而不是=,=是赋值的意思
    print('plant the garden!')
elif season == 'summer':
    print('water the garden!')
elif season == 'fall':
    print('harvest the garden!')
elif season == 'winter':
    print('stay indoors!')
else:
    print('unrecognized season')

  • 缩进
    在 Python 中,缩进通常是四个空格一组

**注意⚠️:if 设置完最后,一定别忘记加冒号:,等于号用==。=是赋值

➡️2、布尔表达式
  • 请勿使用 True 或 False 作为条件
  • 在使用逻辑运算符编写表达式时,要谨慎(逻辑运算符 and、or 和 not 具有特定的含义)
# Bad example
if weather == "snow" or "rain":
    print("Wear boots!")

  • 请勿使用 == True 或 == False 比较布尔变量
➡️3、For和While循环
  • Python 有两种类型的循环:for 循环和 while 循环。for 循环用来遍历可迭代对象。
# iterable of cities
cities = ['new york city', 'mountain view', 'chicago', 'los angeles']

# for loop that iterates over the cities list
for city in cities:
    print(city.title())
# Creating a new list
cities = ['new york city', 'mountain view', 'chicago', 'los angeles']
capitalized_cities = []

for city in cities:
    capitalized_cities.append(city.title())

range() 是一个内置函数,用于创建不可变的数字序列。它有三个参数,必须都为整数。9i
range(start=0, stop, step=1)
Start是该序列的第一个数字,stop比该序列的最后一个数字大 1,step是该序列中每个数字之间的差。
将 range 封装在列表中。

创建和修改:
# Creating a new list
cities = ['new york city', 'mountain view', 'chicago', 'los angeles']
capitalized_cities = []

for city in cities:
    capitalized_cities.append(city.title())

cities = ['new york city', 'mountain view', 'chicago', 'los angeles']

for index in range(len(cities)):
    cities[index] = cities[index].title()
for i in range(3):
    print("Hello!")

标记计数器:
可以使用字符串索引判断每个令牌是否以尖括号开始和结束。

tokens = ['<greeting>', 'Hello World!', '</greeting>']
count = 0
for i in tokens:
    if i[0]=='<' and i[-1]=='>':
        count+=1 #x+=1➡️x=x+1
# write your for loop here

print(count)

创建html(添加)
写一个 for 循环,用于遍历字符串列表并创建单个字符串 html_str,它是一个 HTML 列表。例如,如果列表是 items = ['first string', 'second string],输出 html_str 应该会输出:

<ul>
<li>first string</li>
<li>second string</li>
</ul>

items = ['first string', 'second string']

html_str = "<ul>\n"
for item in items:
    html_str += "<li>{}</li>\n".format(item)
html_str += "</ul>"

print(html_str)

创建字典
方法1:使用for循环创建一组计数器

book_title =  ['great', 'expectations','the', 'adventures', 'of', 'sherlock','holmes','the','great','gasby','hamlet','adventures','of','huckleberry','fin']
word_counter = {}
for word in book_title:
    if word not in word_counter:
        word_counter[word] = 1
    else:
        word_counter[word] += 1

方法 2: 使用 get 方法

book_title =  ['great', 'expectations','the', 'adventures', 'of', 'sherlock','holmes','the','great','gasby','hamlet','adventures','of','huckleberry','fin']
word_counter = {}
for word in book_title:
    word_counter[word] = word_counter.get(word, 0) + 1

for 循环字典:

for key, value in cast.items():
    print("Actor: {}    Role: {}".format(key, value))

整数的阶乘 (**) 是该数字乘以自身与1之间的每个整数的乘积。例如,6的阶乘(写为“ 6!”)等于6 x 5 x 4 x 3 x 2 x 1 = 720,即:6! = 720。

  • 求1-100的和
i=0
result=0
while i<= 100:

    result+=i
    i+=1
print("1-100的和是%d"%result)
➡️4、Break和Continue
break&continue:
  • break 使循环终止
  • continue 跳过循环的一次迭代
    保留前140个字符:
headlines = ["Local Bear Eaten by Man",
             "Legislature Announces New Laws",
             "Peasant Discovers Violence Inherent in System",
             "Cat Rescues Fireman Stuck in Tree",
             "Brave Knight Runs Away",
             "Papperbok Review: Totally Triffic"]

news_ticker = ""
for headline in headlines:
    news_ticker += headline + " "
    if len(news_ticker) >= 140:
        news_ticker = news_ticker[:140]
        break

print(news_ticker)


➡️5、Zip 和 Enumerate
  • zip 返回一个将多个可迭代对象组合成一个元组序列的迭代器。每个元组都包含所有可迭代对象中该位置的元素。
  • enumerate 是一个会返回元组迭代器的内置函数,这些元组包含列表的索引和值。当你需要在循环中获取可迭代对象的每个元素及其索引时,将经常用到该函数。


    eg:


➡️6、列表推导式

列表推导式可以简写代码:
eg:

capitalized_cities = []
for city in cities:
    capitalized_cities.append(city.title())

相当于⬇️

capitalized_cities = [city.title() for city in cities]

作业:



nominated = {1931: ['Norman Taurog', 'Wesley Ruggles', 'Clarence Brown', 'Lewis Milestone', 'Josef Von Sternberg'], 1932: ['Frank Borzage', 'King Vidor', 'Josef Von Sternberg'], 1933: ['Frank Lloyd', 'Frank Capra', 'George Cukor'], 1934: ['Frank Capra', 'Victor Schertzinger', 'W. S. Van Dyke'], 1935: ['John Ford', 'Michael Curtiz', 'Henry Hathaway', 'Frank Lloyd'], 1936: ['Frank Capra', 'William Wyler', 'Robert Z. Leonard', 'Gregory La Cava', 'W. S. Van Dyke'], 1937: ['Leo McCarey', 'Sidney Franklin', 'William Dieterle', 'Gregory La Cava', 'William Wellman'], 1938: ['Frank Capra', 'Michael Curtiz', 'Norman Taurog', 'King Vidor', 'Michael Curtiz'], 1939: ['Sam Wood', 'Frank Capra', 'John Ford', 'William Wyler', 'Victor Fleming'], 1940: ['John Ford', 'Sam Wood', 'William Wyler', 'George Cukor', 'Alfred Hitchcock'], 1941: ['John Ford', 'Orson Welles', 'Alexander Hall', 'William Wyler', 'Howard Hawks'], 1942: ['Sam Wood', 'Mervyn LeRoy', 'John Farrow', 'Michael Curtiz', 'William Wyler'], 1943: ['Michael Curtiz', 'Ernst Lubitsch', 'Clarence Brown', 'George Stevens', 'Henry King'], 1944: ['Leo McCarey', 'Billy Wilder', 'Otto Preminger', 'Alfred Hitchcock', 'Henry King'], 1945: ['Billy Wilder', 'Leo McCarey', 'Clarence Brown', 'Jean Renoir', 'Alfred Hitchcock'], 1946: ['David Lean', 'Frank Capra', 'Robert Siodmak', 'Clarence Brown', 'William Wyler'], 1947: ['Elia Kazan', 'Henry Koster', 'Edward Dmytryk', 'George Cukor', 'David Lean'], 1948: ['John Huston', 'Laurence Olivier', 'Jean Negulesco', 'Fred Zinnemann', 'Anatole Litvak'], 1949: ['Joseph L. Mankiewicz', 'Robert Rossen', 'William A. Wellman', 'Carol Reed', 'William Wyler'], 1950: ['Joseph L. Mankiewicz', 'John Huston', 'George Cukor', 'Billy Wilder', 'Carol Reed'], 1951: ['George Stevens', 'John Huston', 'Vincente Minnelli', 'William Wyler', 'Elia Kazan'], 1952: ['John Ford', 'Joseph L. Mankiewicz', 'Cecil B. DeMille', 'Fred Zinnemann', 'John Huston'], 1953: ['Fred Zinnemann', 'Charles Walters', 'William Wyler', 'George Stevens', 'Billy Wilder'], 1954: ['Elia Kazan', 'George Seaton', 'William Wellman', 'Alfred Hitchcock', 'Billy Wilder'], 1955: ['Delbert Mann', 'John Sturges', 'Elia Kazan', 'Joshua Logan', 'David Lean'], 1956: ['George Stevens', 'Michael Anderson', 'William Wyler', 'Walter Lang', 'King Vidor'], 1957: ['David Lean', 'Mark Robson', 'Joshua Logan', 'Sidney Lumet', 'Billy Wilder'], 1958: ['Richard Brooks', 'Stanley Kramer', 'Robert Wise', 'Mark Robson', 'Vincente Minnelli'], 1959: ['George Stevens', 'Fred Zinnemann', 'Jack Clayton', 'Billy Wilder', 'William Wyler'], 1960: ['Billy Wilder', 'Jules Dassin', 'Alfred Hitchcock', 'Jack Cardiff', 'Fred Zinnemann'], 1961: ['J. Lee Thompson', 'Robert Rossen', 'Stanley Kramer', 'Federico Fellini', 'Robert Wise', 'Jerome Robbins'], 1962: ['David Lean', 'Frank Perry', 'Pietro Germi', 'Arthur Penn', 'Robert Mulligan'], 1963: ['Elia Kazan', 'Otto Preminger', 'Federico Fellini', 'Martin Ritt', 'Tony Richardson'], 1964: ['George Cukor', 'Peter Glenville', 'Stanley Kubrick', 'Robert Stevenson', 'Michael Cacoyannis'], 1965: ['William Wyler', 'John Schlesinger', 'David Lean', 'Hiroshi Teshigahara', 'Robert Wise'], 1966: ['Fred Zinnemann', 'Michelangelo Antonioni', 'Claude Lelouch', 'Richard Brooks', 'Mike Nichols'], 1967: ['Arthur Penn', 'Stanley Kramer', 'Richard Brooks', 'Norman Jewison', 'Mike Nichols'], 1968: ['Carol Reed', 'Gillo Pontecorvo', 'Anthony Harvey', 'Franco Zeffirelli', 'Stanley Kubrick'], 1969: ['John Schlesinger', 'Arthur Penn', 'George Roy Hill', 'Sydney Pollack', 'Costa-Gavras'], 1970: ['Franklin J. Schaffner', 'Federico Fellini', 'Arthur Hiller', 'Robert Altman', 'Ken Russell'], 1971: ['Stanley Kubrick', 'Norman Jewison', 'Peter Bogdanovich', 'John Schlesinger', 'William Friedkin'], 1972: ['Bob Fosse', 'John Boorman', 'Jan Troell', 'Francis Ford Coppola', 'Joseph L. Mankiewicz'], 1973: ['George Roy Hill', 'George Lucas', 'Ingmar Bergman', 'William Friedkin', 'Bernardo Bertolucci'], 1974: ['Francis Ford Coppola', 'Roman Polanski', 'Francois Truffaut', 'Bob Fosse', 'John Cassavetes'], 1975: ['Federico Fellini', 'Stanley Kubrick', 'Sidney Lumet', 'Robert Altman', 'Milos Forman'], 1976: ['Alan J. Pakula', 'Ingmar Bergman', 'Sidney Lumet', 'Lina Wertmuller', 'John G. Avildsen'], 1977: ['Steven Spielberg', 'Fred Zinnemann', 'George Lucas', 'Herbert Ross', 'Woody Allen'], 1978: ['Hal Ashby', 'Warren Beatty', 'Buck Henry', 'Woody Allen', 'Alan Parker', 'Michael Cimino'], 1979: ['Bob Fosse', 'Francis Coppola', 'Peter Yates', 'Edouard Molinaro', 'Robert Benton'], 1980: ['David Lynch', 'Martin Scorsese', 'Richard Rush', 'Roman Polanski', 'Robert Redford'], 1981: ['Louis Malle', 'Hugh Hudson', 'Mark Rydell', 'Steven Spielberg', 'Warren Beatty'], 1982: ['Wolfgang Petersen', 'Steven Spielberg', 'Sydney Pollack', 'Sidney Lumet', 'Richard Attenborough'], 1983: ['Peter Yates', 'Ingmar Bergman', 'Mike Nichols', 'Bruce Beresford', 'James L. Brooks'], 1984: ['Woody Allen', 'Roland Joffe', 'David Lean', 'Robert Benton', 'Milos Forman'], 1985: ['Hector Babenco', 'John Huston', 'Akira Kurosawa', 'Peter Weir', 'Sydney Pollack'], 1986: ['David Lynch', 'Woody Allen', 'Roland Joffe', 'James Ivory', 'Oliver Stone'], 1987: ['Bernardo Bertolucci', 'Adrian Lyne', 'John Boorman', 'Norman Jewison', 'Lasse Hallstrom'], 1988: ['Barry Levinson', 'Charles Crichton', 'Martin Scorsese', 'Alan Parker', 'Mike Nichols'], 1989: ['Woody Allen', 'Peter Weir', 'Kenneth Branagh', 'Jim Sheridan', 'Oliver Stone'], 1990: ['Francis Ford Coppola', 'Martin Scorsese', 'Stephen Frears', 'Barbet Schroeder', 'Kevin Costner'], 1991: ['John Singleton', 'Barry Levinson', 'Oliver Stone', 'Ridley Scott', 'Jonathan Demme'], 1992: ['Clint Eastwood', 'Neil Jordan', 'James Ivory', 'Robert Altman', 'Martin Brest'], 1993: ['Jim Sheridan', 'Jane Campion', 'James Ivory', 'Robert Altman', 'Steven Spielberg'], 1994: ['Woody Allen', 'Quentin Tarantino', 'Robert Redford', 'Krzysztof Kieslowski', 'Robert Zemeckis'], 1995: ['Chris Noonan', 'Tim Robbins', 'Mike Figgis', 'Michael Radford', 'Mel Gibson'], 1996: ['Anthony Minghella', 'Joel Coen', 'Milos Forman', 'Mike Leigh', 'Scott Hicks'], 1997: ['Peter Cattaneo', 'Gus Van Sant', 'Curtis Hanson', 'Atom Egoyan', 'James Cameron'], 1998: ['Roberto Benigni', 'John Madden', 'Terrence Malick', 'Peter Weir', 'Steven Spielberg'], 1999: ['Spike Jonze', 'Lasse Hallstrom', 'Michael Mann', 'M. Night Shyamalan', 'Sam Mendes'], 2000: ['Stephen Daldry', 'Ang Lee', 'Steven Soderbergh', 'Ridley Scott', 'Steven Soderbergh'], 2001: ['Ridley Scott', 'Robert Altman', 'Peter Jackson', 'David Lynch', 'Ron Howard'], 2002: ['Rob Marshall', 'Martin Scorsese', 'Stephen Daldry', 'Pedro Almodovar', 'Roman Polanski'], 2003: ['Fernando Meirelles', 'Sofia Coppola', 'Peter Weir', 'Clint Eastwood', 'Peter Jackson'], 2004: ['Martin Scorsese', 'Taylor Hackford', 'Alexander Payne', 'Mike Leigh', 'Clint Eastwood'], 2005: ['Ang Lee', 'Bennett Miller', 'Paul Haggis', 'George Clooney', 'Steven Spielberg'], 2006: ['Alejandro Gonzaalez Inarritu', 'Clint Eastwood', 'Stephen Frears', 'Paul Greengrass', 'Martin Scorsese'], 2007: ['Julian Schnabel', 'Jason Reitman', 'Tony Gilroy', 'Paul Thomas Anderson', 'Joel Coen', 'Ethan Coen'], 2008: ['David Fincher', 'Ron Howard', 'Gus Van Sant', 'Stephen Daldry', 'Danny Boyle'], 2009: ['James Cameron', 'Quentin Tarantino', 'Lee Daniels', 'Jason Reitman', 'Kathryn Bigelow'], 2010: ['Darren Aronofsky', 'David O. Russell', 'David Fincher', 'Ethan Coen', 'Joel Coen', 'Tom Hooper']}
winners = {1931: ['Norman Taurog'], 1932: ['Frank Borzage'], 1933: ['Frank Lloyd'], 1934: ['Frank Capra'], 1935: ['John Ford'], 1936: ['Frank Capra'], 1937: ['Leo McCarey'], 1938: ['Frank Capra'], 1939: ['Victor Fleming'], 1940: ['John Ford'], 1941: ['John Ford'], 1942: ['William Wyler'], 1943: ['Michael Curtiz'], 1944: ['Leo McCarey'], 1945: ['Billy Wilder'], 1946: ['William Wyler'], 1947: ['Elia Kazan'], 1948: ['John Huston'], 1949: ['Joseph L. Mankiewicz'], 1950: ['Joseph L. Mankiewicz'], 1951: ['George Stevens'], 1952: ['John Ford'], 1953: ['Fred Zinnemann'], 1954: ['Elia Kazan'], 1955: ['Delbert Mann'], 1956: ['George Stevens'], 1957: ['David Lean'], 1958: ['Vincente Minnelli'], 1959: ['William Wyler'], 1960: ['Billy Wilder'], 1961: ['Jerome Robbins', 'Robert Wise'], 1962: ['David Lean'], 1963: ['Tony Richardson'], 1964: ['George Cukor'], 1965: ['Robert Wise'], 1966: ['Fred Zinnemann'], 1967: ['Mike Nichols'], 1968: ['Carol Reed'], 1969: ['John Schlesinger'], 1970: ['Franklin J. Schaffner'], 1971: ['William Friedkin'], 1972: ['Bob Fosse'], 1973: ['George Roy Hill'], 1974: ['Francis Ford Coppola'], 1975: ['Milos Forman'], 1976: ['John G. Avildsen'], 1977: ['Woody Allen'], 1978: ['Michael Cimino'], 1979: ['Robert Benton'], 1980: ['Robert Redford'], 1981: ['Warren Beatty'], 1982: ['Richard Attenborough'], 1983: ['James L. Brooks'], 1984: ['Milos Forman'], 1985: ['Sydney Pollack'], 1986: ['Oliver Stone'], 1987: ['Bernardo Bertolucci'], 1988: ['Barry Levinson'], 1989: ['Oliver Stone'], 1990: ['Kevin Costner'], 1991: ['Jonathan Demme'], 1992: ['Clint Eastwood'], 1993: ['Steven Spielberg'], 1994: ['Robert Zemeckis'], 1995: ['Mel Gibson'], 1996: ['Anthony Minghella'], 1997: ['James Cameron'], 1998: ['Steven Spielberg'], 1999: ['Sam Mendes'], 2000: ['Steven Soderbergh'], 2001: ['Ron Howard'], 2002: ['Roman Polanski'], 2003: ['Peter Jackson'], 2004: ['Clint Eastwood'], 2005: ['Ang Lee'], 2006: ['Martin Scorsese'], 2007: ['Ethan Coen', 'Joel Coen'], 2008: ['Danny Boyle'], 2009: ['Kathryn Bigelow'], 2010: ['Tom Hooper']}

### 1A: Create dictionary with the count of Oscar nominations for each director 
nom_count_dict = {}
for year,name_list in nominated.items():
    for name in name_list:
        if name not in nom_count_dict:
            nom_count_dict[name]=1
        else:
            nom_count_dict[name] += 1
        
# Add your code here

print("nom_count_dict = {}\n".format(nom_count_dict))


### 1B: Create dictionary with the count of Oscar wins for each director
win_count_dict = {}
# Add your code here
for year,name_list in winners.items():
    for name in name_list:
        if name not in win_count_dict:
            win_count_dict[name]=1
        else:
            win_count_dict[name]+=1
            


print("win_count_dict = {}".format(win_count_dict))

六、函数

计算圆柱体的体积:

def cylinder_volume(height,radius):
        pi=3.14159
        return height * pi * radius**2
cylinder_volume(25,34)

1、函数主体是在头部行之后缩进的代码。在此例中是定义 π 和返回体积的两行代码。
2、在此主体中,我们可以引用参数并定义新的变量,这些变量只能在这些缩进代码行内使用。
3、主体将经常包括 return 语句,用于当函数被调用时返回输出值。return 语句包括关键字 return,然后是经过评估以获得函数输出值的表达式。如果没有 return 语句,函数直接返回 None(例如内置 print() 函数)。

lambda表达式:
lambda

Lambda 函数的组成部分:

  • 关键字 lambda 表示这是一个 lambda 表达式。
  • lambda 之后是该匿名函数的一个或多个参数(用英文逗号分隔),然后是一个英文冒号 :。和函数相似,lambda 表达式中的参数名称是随意的。
  • 最后一部分是被评估并在该函数中返回的表达式,和你可能会在函数中看到的 return 语句很像。
  • 鉴于这种结构,lambda 表达式不太适合复杂的函数,但是非常适合简短的函数。

七、脚本编写

导入模块技巧
  • 第三方库:
    使用 pip (软件包管理器)安装库
    另一个热门的管理器是 Anaconda,该管理器专门针对数据科学。

*requirements
大型 Python 程序可能依赖于十几个第三方软件包。为了更轻松地分享这些程序,程序员经常会在叫做 requirements.txt 的文件中列出项目的依赖项

beautifulsoup4==4.5.1
bs4==0.0.1
pytz==2016.7
requests==2.11.1

*上边的示例文件的每行包含软件包名称和版本号。版本号是可选项,但是通常都会包含。


课外学习补充

1、print不换行
#输出的内容后,不换行。
print("hannah" end" love ")

print("hannah")
2、打印九九乘法表
row = 1
while row <= 9:
    col = 1
    while col <= row:
        print("%d * %d = %d" %(row,col,row * col),end="   ")
        col +=1
    print("")
    row +=1
3、转义字符
  • \t:垂直对齐
print("1 \t 2 \t 3")
print("10 \t 20 \t 30")
  • \n:换行
  • \ ":添加引号
  • \r:回车
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容