第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)
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很有用。
几个注意事项:
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
- 关于代码格式的问题:PEP 8 -- Style Guide for Python Code
- 代码报错问题: Errors and Exceptions
](https://docs.python.org/3/tutorial/errors.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 是一个会返回元组迭代器的内置函数,这些元组包含列表的索引和值。当你需要在循环中获取可迭代对象的每个元素及其索引时,将经常用到该函数。
➡️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 表达式中的参数名称是随意的。
- 最后一部分是被评估并在该函数中返回的表达式,和你可能会在函数中看到的 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:回车