想学习 Python 吗?这里有我们提供的免费 4 小时互动课程。
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
Python 是一种流行、功能全面且易于学习的语言。它是人工智能、机器学习和数据科学领域的首选语言。有人甚至认为它是最容易入门的编程语言。
如果你觉得Python是你想学习的编程语言,那就继续往下读吧!接下来的几段,我将带你了解我们今天推出的免费4小时互动式Python课程。本课程旨在为你打下扎实的Python基础,并涵盖编程基础知识。对于想要以互动且引人入胜的方式学习编程的初学者来说,这门课程非常合适。
本课程由我们才华横溢的教师奥洛夫·保尔森 (Olof Paulson) 创建,他是瑞典可汗学院的倡导者之一。奥洛夫拥有金融背景,精通算法编写,并且热衷于开放且易于获取的教育。
现在让我们来看看课程是如何安排的!
1. 课程介绍
本课程涵盖从 Python 初学者到中级开发人员所需的所有主题,包括:
- 输出数据和程序流程
- 字符串、变量
- 算术运算和比较
- 列表、元组、集合和字典
- 条件语句,if 和 elif
- while 循环和 for 循环
- 函数/返回语句
- 对象、类和继承
- 列表/字典推导式和 Lambda 函数
- 模块
2. 使用 Brython 在 Scrimba 上运行 Python
为了让像 Python 这样的后端语言在像 Scrimba 这样的前端平台上运行,我们在文件中使用 Brython 插件index.html将 Python 代码重新编译成 Javascript。
通常情况下,我们会使用最小的 JSbrython.min.js版本(),但要获得更多功能,只需取消注释标准库版本(brython_stdlib.js)。
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.0/brython.min.js"></script>
<!--<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.0/brython_stdlib.js"></script>-->
</head>
值得注意的是,Scrimba 中也存在一些布莱顿人的怪异之处:
- 该
input()框是 JS 提示符,在渲染中看不到,但在运行本地代码时会起作用。 - 在某些教程中,Scrimba 迷你浏览器有时会悬浮在角落里——您不必担心。
3. 打印语句和程序流程
编写 Python 代码时,我们经常需要测试代码是否按预期运行。为此,我们使用命令print()将数据输出到控制台。
print('Welcome to Python 101!')
注意:计算机从上到下读取代码,因此它会先执行靠近顶部的命令。
4. 变量
变量用于保存数据以供后续使用。我们使用小写变量名加上赋值运算符 ( =) 来声明变量。请注意,如果变量名包含多个单词,则应使用下划线 ( _) 分隔。
failed_subjects="6"
我们在代码中使用变量时,会在变量前面加上加号(+)。
print('Your son Eric is failing' + failed_subjects + ' subjects.')
5. 数据类型和类型转换
Python 的基本数据类型有:
- 字符串——用两个引号括起来(可以是双引号或单引号)。
- 整数= 这些是正整数。
- 浮点数= 带小数点的数字。
- 布尔值——取值为“
true或false”。
要了解您正在使用的数据类型,请使用type()
print(type('hello'))
注意:如果要在字符串中使用引号或撇号,请用双引号将整个字符串括起来。或者,您可以使用 Python 的转义字符,即反斜杠 ( \)。
a="it's"
b='it\'s'
混合使用数据类型是有规则的,例如,你不能在字符串中放入数字。Typecasting更改数据类型可以解决这个问题。
str()将数据转换为字符串。int()将数据转换为整数。float()将数据转换为浮点数。
print('Your son ' + name + ' is failing ' + str(failed_subjects) + ' subjects.')
6. 变量和数据类型 - 练习
是时候迎接你的第一个 Scrimba Python 挑战了!在这个挑战中,你可以运用新学的变量和数据类型知识来检验你的理解。尝试自己解决这个挑战,然后看看 Olof 的解答,看看你的思路是否正确。
7. 算术运算
在这里,我们了解到 Python 中的基本算术运算包括加法、减法、乘法、浮点数除法(返回一个浮点数)、向下取整除法(将结果向下舍入到最接近的整数)、取模(返回计算的余数)和指数运算(将一个数乘以另一个数的幂)。
a=10
b=3
print('Addition : ', a + b)
print('Subtraction : ', a - b)
print('Multiplication : ', a * b)
print('Division (float) : ', a / b)
print('Division (floor) : ', a // b)
print('Modulus : ', a % b)
print('Exponent : ', a ** b)
8. 字符串 - 基础知识 / 切片
在本集中,我们将学习一些关于使用字符串的基本概念。
- 字符串相乘允许我们将同一个字符串多次打印出来。有三种方法可以实现这一点(最后一种方法会在字符串之间插入空格):
print(msg+msg)
print(msg*2)
print(msg,msg)
我们可以通过多种方式改变字符串的大小写:
upper()将字符串转换为大写。lower()将字符串转换为小写。capitalize()将字符串的第一个单词首字母大写。title()将字符串中的每个单词首字母大写。
print(msg.upper())
print(msg.lower())
print(msg.capitalize())
print(msg.title())
我们可以使用以下函数来查找有关字符串的信息:
print(len(msg))告诉我们字符串有多少个字符(在本例中为msg.print(msg.count('Python'))统计单词或字母出现的次数 - 请注意区分大小写。
我们用方括号 ( []) 访问字符串。
print(msg[0])
注意: Python 字符串的索引从 0 开始,也就是说,第一个字符被计为 0 而不是 1。使用负索引会从字符串的末尾开始计数。
返回字符串的片段称为切片。Olof 通过一些示例向我们展示了如何进行切片:
print(msg[a:])返回指定位置字符之后的所有内容。print(msg[a:b])返回指定位置之间的所有内容,不包括结束位置。print(msg[:b])返回指定位置之前的所有内容,但不包括结束位置。
9. 练习 - 弦乐 - 基础/切片
是时候练习弦乐了。除了让我们练习之前演出中学到的技巧外,这项挑战还能让我们思考奥洛夫没有明确告诉我们的一项技能:
这是了解真正程序员生活的绝佳入门指南——别忘了谷歌是你的好朋友!看看其他演员是如何做到的吧。
10. 字符串-2 查找/替换、字符串格式化
这个角色让我们对弦乐的使用有了更深入的了解。
- 我们可以使用三引号创建多行字符串:
msg="""Dear Terry,,
You must cut down the mightiest
tree in the forest with…
a herring! <3"""
Olof 为我们演示了一些处理字符串的例子:
-
print(msg.find('Python'))返回我们搜索的单词或字符的位置(在本例中为“Python”)。 -
print(msg.replace('Python','Java'))允许我们替换字符串中的单词或字符。请注意,Python 中的字符串是不可变的,因此要使用此函数的结果,需要将其保存到一个变量中。
msg1=msg.replace('Python','C')
-
print('Python' in msg)true通过返回 true或 false来告诉我们字符串中是否存在某个单词或字符false。 -
msg1 = f'[{name}] loves the color {color}!'允许我们格式化字符串,使其更易于阅读。
11. 用户输入
在Python中,我们获取用户输入并像这样打印它:
name= input('What is your name?: ')
print(name)
这将弹出一个用户输入框,如下所示:
12. 用户输入 - 练习
是时候通过用户输入练习来锻炼我们的编程技能了!在本期节目中,你将根据以下提示构建一个距离转换器:
和往常一样,先自己尝试解答一下,然后再查看Olof 的解答,看看你是否做对了。
13. 列表 - 基础知识
变量保存一条数据,而列表保存多条数据。
friends = ['John','Michael','Terry','Eric','Graham']
列表也从零开始索引,并且可以像字符串一样用方括号访问:
print(friends[1])
我们还可以使用与处理字符串相同的命令来查找字符串的长度、查找字符串中的特定数据等等。
print(friends[1],friends[4])
print(len(friends))
print(friends.coun('Eric'))
14. 列表(续)
本教程将带我们了解使用列表的一些基本技能,例如排序(sort())、求和(print(sum())、追加新数据(append(''))、将两个列表相加(.extend())、删除项目(.remove(''))、弹出项目(删除一个项目但仍允许返回它)(.pop())和清除列表(.clear())。
15. 列表练习
在这个练习中,我们将尝试操作列表。
先自己尝试一下,然后再查看 Olof 的解决方案,看看结果如何。
16. 拆分和合并
本演示探讨了如何分割和连接弦的各个部分。
print(msg.split())
print('-'.join(friends_list))
17. 分裂与合并 - 练习
在这里,你将运用你现在所了解的关于拆分和合并的知识,从字符串中创建一个朋友列表。
像往常一样,先自己尝试解答,然后再查看 Olof 的解答来检验你的答案。
18. 元组
元组是不可更改的列表。它们看起来与列表相同,但用圆括号而不是方括号括起来。
friends_tuple = ('John','Michael','Terry','Eric','Graham')
当你想确保数据在程序运行过程中不会发生变化时,应该使用元组而不是列表。
19. 套装
集合类似于列表和元组,但它是无序的,并且可以移除自身内部的重复元素。此外,集合的运算速度非常快。集合用花括号括起来。
friends_set = {'John','Michael','Terry','Eric','Graham','Eric'}
在本期节目中,Olof 将带我们了解一些使用列表的技巧和窍门。注意:创建空集与创建空列表或空元组的方式不同:
#empty Lists
empty_list = []
empyt_list = list()
#empty Tuple
empty_tuple = ()
empty_tuple = tuple()
#empty Set
empty_set = {} # this is wrong, this is a dictionary
empty_set = set()
20. 组数-练习
接下来,我们将运用新学的集合知识进行检验。请查看表达式的末尾以核对答案。
21. 评论
注释是 Python 代码中会被忽略的文本。它们主要用于人与人之间的交流,例如代码注释、调试或测试以及代码文档。注释以井号 ( ##) 开头:
#Hiding in the comments
22. 函数 - 调用、参数、实参、默认值
在本期节目中,奥洛夫向我们介绍了函数——我们可以在以后重用的代码包。
def函数是通过函数名加上括号来创建(定义)和调用的():
def greeting():
print("Hello Friend!")
greeting()
我们还会再次研究格式化字符串,以及如何使用它们使代码更易读、更高效。
def greeting(name,age=28):
print("Hello " + name + ", you are " + str(age) + "!")
print(f"Hello {name}, you are {age}!")
23. 函数 - 练习
在这里,奥洛夫给我们布置的任务是修改和扩展现有函数的功能。不妨试一试,然后看看其他演员的演示,看看你的思路是否正确。
24. 函数 - 命名表示法
命名表示法是指在调用函数时给参数命名,以便函数定义能够理解哪个参数是哪个,即使它们以不同的顺序出现。
Profile(yob=1995,weight=83.5,height=192,eye_color="blue")
25. 退货声明
本节将介绍 return 语句。return 语句允许我们在执行函数后获取数据。
def value_added_tax(amount):
tax = amount * 0.25
return tax
Olof 还向我们介绍了一些使用返回数据进行操作的便捷方法,包括用它创建字符串、集合和元组。
26. 比较和布尔运算
本教程快速浏览了一些比较数据的方法,包括等于(==)、不等于(!=)、大于(>)、大于等于(>=)、小于(<)、小于等于( <=)、在(in)、不在(not in)、是(is)和不是(is not)。
我们还会了解一些布尔属性,并了解到false`false` 的值为 0,true`1` 的值为 1。空对象和零的值为 false,其他所有值(字符串、除 0 以外的数字等)的值为 true。
27. 条件语句:If、Else、Elif
条件语句允许我们根据不同的情况运行不同的代码。if如果函数返回 true,则执行语句;elif如果函数在另一个语句返回 false 之后返回 true,则执行 (else if) 语句;else如果前面的语句都没有返回 true,即在所有其他情况下,则执行语句。
is_raining = False
is_cold = False
print("Good Morning")
if is_raining and is_cold:
print("Bring Umbrella and jacket")
elif is_raining and not(is_cold):
print("Bring Umbrella")
elif not(is_raining) and is_cold:
print("Bring Jacket")
else:
print("Shirt is fine!")
28. If/Elif/Else - 练习
是时候通过练习来锻炼我们的体能了。我们还能借此机会体验一下温度转换器的扩展功能。
和往常一样,请尝试自己解决这道题,然后将你的答案与Olof 的解答进行比较。
29. 条件句 - 练习提高
这次演示让我们有机会尝试一些优化方法,例如缩短代码和减少条件语句的数量。有很多不同的方法可以实现这一点,所以不妨自己尝试一下,然后将你的答案与 Olof 在演示最后给出的解决方案进行比较。
30. While 循环
while 循环是一种会重复执行直到满足特定条件才停止的代码。要创建循环,首先要问自己以下问题:
-
我想重复什么?
-
我每次想改变什么?
-
应该重复多久?
在下面的例子中,我们希望重复加一的操作,我们希望改变数字,i并且我们希望这个过程重复进行,直到达到数字五:
i=0
while i < 5:
i+=1
print(f"{i}."+ "*"*i + "Loops are awesome" + "*"*i)
31. While 循环 - 练习
是时候练习循环了。在这个挑战中,我们将制作一个有趣的猜谜游戏。开始之前,别忘了回顾上一章中关于循环的三个问题,然后在最后查看答案,看看你的答案是否正确。
32. for 循环和嵌套
for 循环允许我们对字符串、列表、元组或集合中的每个元素执行语句。例如,以下代码会打印出 2 到 8 之间的所有数字:
for number in range(2,8):
print(number)
也可以在循环中嵌套循环。下面的代码会为每个朋友打印出数字 1、2 和 3(John 1、John 2、John 3、Terry 1、Terry 2、Terry 3 等)。
friends = ['John','Terry','Eric']
for friend in friends:
for number in [1,2,3]:
print(friend, number)
在本期节目中,我们还学习了一些方便的 for 循环关键字,例如break和continue。
33. for 循环 - 练习
是时候通过练习来检验我们所学的关于 for 循环的知识了。这次,我们将制作个性化的派对邀请函。我们还有一个小挑战:正确使用大小写。
和往常一样,先自己尝试解答,然后再对照答案进行比较。
34. 字典
本期节目将向我们介绍字典。字典在 Python 中用于存储键值对,其工作方式与实体字典类似。您可以查找一个单词(键),并获得其定义或翻译(值)。
movie = {
'title' : 'Life of Brian',
'year' : 1979,
'cast' : ['John','Eric','Michael','George','Terry']
}
Olof 还向我们讲解了如何更改字典中的条目和添加新条目,以及如何处理用户查找不存在的条目时产生的错误消息,以及如何对字典数据运行 for 循环。
for key, value in movie.items():
print(key, value)
35. Sort() 和 Sorted()
sort()在这里,我们将了解`sort` 和 `sort`之间的区别sorted()。虽然这两个函数都会对列表内容进行排序,但 `sort` 只sorted()返回结果。
我们还会观察字典、元组和字符串在排序时的行为,并简要介绍lambda 函数——一种方便的单行一次性函数,我们将在后续教程中详细介绍。下面的 lambda 示例根据列表的前几个条目对列表进行排序:
my_list=[['car',4,65],['dog',2,30],['add',3,10],['bee',1,24]]
print(sorted(my_list, key = lambda item :item[0]))
36. 异常处理:Try/Except、Raise
在本期节目中,Olof 将为我们讲解一些处理错误的技巧。我们使用try-except代码块来实现这一点,代码块如下所示:
#try:
#code you want to run
#except:
#executed if error occurs
#else:
#executed if no error
#finally:
#always executed
37. 类和对象
接下来,奥洛夫向我们讲解了类和对象。要理解类,需要掌握四个主要概念:类、对象、属性和方法。
类是蓝图,它向我们展示了所需数据的结构。对象包含我们使用的实际数据。属性是类中的变量,方法是类中的函数。
我们使用初始化语句初始化一个类init:
class Movie:
def __init__(self,title,year,imdb_score,have_seen):
self.title = title
self.year = year
self.imdb_score = imdb_score
self.have_seen = have_seen
注意:按照惯例,我们在命名属性时使用self关键字。
完成上述步骤后,我们现在可以创建该类的实例,如下所示:
film_1 = Movie("Life of Brian",1979,8.1,True)
film_2 = Movie("The Holy Grail",1975,8.2,True)
方法在类中定义如下:
def nice_print(self):
print("Title: ", self.title)
print("Year of production: ", self.year)
调用方法有两种方式(输出结果相同):
film_2.nice_print()
Movie.nice_print(film_2)
38. 继承
在本期节目中,奥洛夫向我们讲解了继承的概念。继承允许我们在一个类中使用另一个类的方法,而无需重复编写所有代码。之后,我们还可以添加更多方法来区分不同的类。
class Person:
def move(self):
print("Moves 4 paces")
def rest(self):
print("Gains 4 health points")
class Doctor(Person):
def heal(self):
print("Heals 10 health points")
一个类可以继承自多个其他类。如果这些类对同一个方法有不同的输出,则该类会选择先声明的继承方法。在下面的示例中,Wizard 类会继承 Doctor 类的所有共享方法,而不是 Fighter 类的。
class Wizard(Doctor,Fighter):
def cast_spell(self):
print("Turns invisble")
def heal(self):
print("Heals 15 health points")
39. 模块
现在是时候了解模块了。模块是代码片段,你可以导入并在代码中使用它们。Python 提供了一些常用的模块,例如 `modules`、`modules` datetime、random` modules` string、os`modules`math和browser`modules` 。platform
要使用模块,我们首先需要导入 Brython 的标准库版本:
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.7.0/brython.min.js"></script>
<script
type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.7.0/brython_stdlib.js"
></script>
-->
</head>
模块使用关键字导入import,并可使用以下方式为其指定一个更易于使用的别名as:
import platform as pl
print(pl.python_version())
40. 压缩/解压缩
在本期节目中,Olof 向我们展示了如何对对象进行压缩和解压缩。压缩操作允许我们将两个或多个可迭代对象(字符串、元组、列表等)组合在一起。
nums = [1,2,3,4]
letters = ['a','b','c','d']
combo = list(zip(nums,letters))
print(combo)
上面的例子将合并后的可迭代对象转换为列表,但我们也可以将其转换为元组、集合或字典。注意:当合并两个以上的对象时,字典并不适用。
解压缩允许我们将结果分配到单独的变量中,在本例中为和num。letnam
num,let,nam =zip(*combo)
41 Lambda 函数(第一部分)
接下来,我们将深入探讨 lambda 表达式,也称为匿名函数。它允许你编写单行、一次性的函数定义,这些函数可能只使用一次。请比较以下示例:
标准功能:
def square(x):
return x*x
print(square(3))
Lambda:
square1 = lambda x: x*x
注意: lambda 函数的返回值是隐式的。
42. Lambda 函数(第二部分)
在本期节目中,我们将更深入地探讨 lambda 表达式。虽然我们总能用标准函数实现 lambda 表达式的功能,但在某些情况下,lambda 表达式的性能要好得多。
在这个例子中,lambda 函数的返回值是一个函数,这使得我们可以将该 lambda 函数复用于多个不同的任务。在下面的代码中,我们使用同一个 lambda 函数分别乘以 2 和 5:
def func(n):
return lambda a: a*n
# a*2
doubler = func(2)
print(doubler(3))
quintipler = func(5)
print(quintipler(3))
print(type(func(3)))
该演员还解释说,我们可以在创建 lambda 函数后立即调用它们。
print((lambda a,b,c: a+b+c)(2,3,4))
43 λ 函数 - 练习
现在是时候练习创建我们自己的 lambda 函数了。
看看你的进展如何,并随时对照Olof 的解答检查你的答案。
44. 阅读理解 - 列表
Python 列表推导式允许我们用更少的代码创建列表、元组、集合和字典。注意:任何可以用列表推导式创建的对象都可以用 for 循环创建,但是 for 循环需要更多的代码。
Olof 还提供了一张方便的幻灯片,以直观的方式比较了 for 循环和列表推导式在两种不同情况下的表现。
45. 阅读理解 - 词典
Olof 现在向我们展示如何使用列表推导式创建一个新字典。如果使用 for 循环,代码将如下所示:
new_dict = dict()
for movie, yr in zip(movies,year):
new_dict[movie] = yr
print(new_dict)
对比之下,结果如下:
new_dict = {movie:yr for movie,yr in zip(movies,year)}
print(new_dict)
更加简洁易读!
46. 随机性
本教程将带我们了解该random模块,并教我们如何生成伪随机事件。要使用该模块,我们首先需要导入它:
import random
然后我们可以使用该模块生成伪随机数:
for i in range(5):
print(random.random()*6)
Olof 还向我们展示了我们可以与 . 一起使用的各种功能random。
不过,`is`的用法random并不局限于数字。我们也可以将其用于可迭代对象:
friends_list = ['John', 'Eric', 'Michael', 'Terry', 'Graham']
print(random.choice(friends_list))
最后,奥洛夫向我们展示了各个string模块,我们学习了如何生成伪随机词。
import random, string
smallcaps = 'abcdefghijklmnopqrstuvwxyz'
largecaps = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
digits = '0123456789'
letters_numbers = string.ascii_letters + string.digits
word = ''
for i in range(7):
word += random.choice(letters_numbers)
word1 = ''.join(random.sample(letters_numbers,7))
word = random.choices(letter_numbers, k=7)
print(word)
print(word1)
注意:这些词语并非真正随机生成,因此不应用于生成密码。
47. 项目 - 密码机
课程即将结束,奥洛夫给我们布置了一个大项目,让我们好好挑战一下。请仔细阅读说明,按照步骤尝试独立完成,然后再查看奥洛夫的解答。
48. 项目 - 数学辅导
我们的第二个项目是创建一个数学辅导程序,用来辅导我们背乘法表。请查看下面的说明,尝试一下这个项目,然后看看奥洛夫是怎么做的。
49. 课程总结
恭喜你顺利完成 Python 101 课程!我们学习了数据输出和程序流程、字符串、变量、算术运算、比较、列表、元组、集合、字典、条件语句、循环语句、函数、对象、类、继承、列表推导式、lambda 表达式和模块——你应该为自己感到骄傲!
别忘了,如果需要,你可以随时回顾课程内容,或者重做任何你不确定(或者特别喜欢!)的练习。
当您准备好继续学习时,Scrimba提供一系列课程来教您下一个编程技能,快去看看吧!
祝您编程愉快!:)








