入门篇
1.算术和变量
Printing
在Python中,通过编写print(),将消息放在括号内并用引号括起来。下面,我们要求电脑打印消息。
print("Hello,world")
代码位于框内(称为代码单元),计算机的响应(称为代码输出)显示在框下方。如下,计算机打印了我们想要的消息。
Hello,world
还可以打印一些算术运算的值(如加法、减法、乘法或除法)。
例如,在下一个代码单元中,计算机将 2 比 1 相加,然后打印结果,即 3。请注意,与仅打印文本时不同,我们不使用任何引号。
print(1+8)
结果
9
你实际上可以用python做很多计算!有关一些示例,请参阅下表。
可以使用括号控制长计算中的运算顺序。
print(((1 + 3) * (9 - 2) / 2) ** 2)
结果
196.0
通常,Python在决定操作顺序时遵循PEMDAS规则。即括号,指数,乘,除,加,减
我们使用注释来注释代码正在执行的操作。它们可以帮助其他人理解你的代码,如果你已经有一段时间没有看过自己的代码了,它们也会很有帮助。到目前为止,我们编写的代码非常短,但是当编写了大量代码时,注释变得更加重要。
例如,在下一个代码单元中,我们将 3 乘以 2。我们还在代码上方添加一个注释(# 乘以 3 乘以 2)来描述代码正在执行的操作。
# Multiply 3 by 2
print(3 * 2)
结果
6
为了向Python指出某一行是注释(而不是Python代码),我们需要编写一个井号(#)作为第一个字符。一旦Python看到井号并识别出该行是注释,计算机就会完全忽略它。
我们可以在下面的代码单元格中看到一个示例。,当我们删除井号,因为注释中的文本不是有效的Python代码,因此无法正确解释。
Multiply 3 by 2
File "/tmp/ipykernel_18/3750420471.py", line 1
Multiply 3 by 2
^
SyntaxError: invalid syntax
到目前为止,我们已经使用代码进行了计算并打印了结果,然而结果不会保存在任何位置。但是,当我们使用变量时,就可以将结果保存下来。
下一个代码单元创建一个名为 test_var 的变量,并将4+5的值赋给它。
然后,我们打印分配给变量的值,即 9。
# Create a variable called test_var and give it a value of 4+5
test_var = 4 + 5
# Print the value of test_var
print(test_var)
结果
9
通常,我们会给变量取一个短的且有描述性的的名字,而且它还要满足下面几个要求。
不能有空格
由字母,数字,下划线组成
必须以字母或下划线开头
然后,要创建变量,需要使用 = 来分配我们希望它具有的值。
我们可以通过使用 print() 并将变量的名称放在括号中来查看分配给变量的值。
我们可以通过覆盖以前的值来更改分配给变量的值。
在下面的代码单元格中,我们将my_var的值从 3 更改为 100。
# 将3分配给变量
my_var = 3
# 打印变量的值
print(my_var)
# 将变量的值更改为100
my_var = 100
#打印变量的值
print(my_var)
通常,每当在代码单元中定义变量时,后面的所有代码单元也有权访问该变量。例如,我们使用下一个代码单元来访问my_var(来自上面的代码单元格)和test_var(来自本教程前面的内容)的值。
print(my_var)
print(test_var)
结果
100
9
下一个代码单元格告诉 Python 将 my_var 的当前值增加 3。
为此,我们仍然需要像以前一样使用my_var =。也像以前一样,我们要分配给变量的新值位于 = 符号的右侧。
如图
my_var = my_var + 3
print(my_var)
结果
103
在写代码时,我们经常使用多个变量。当我们必须使用多个输入进行长计算时,这尤其有用。
在下一个代码单元中,我们计算四年的秒数。此计算使用五个输入。
num_years = 4
days_per_year = 365
hours_per_day = 24
mins_per_hour = 60
secs_per_min = 60
total_secs = num_years*days_per_year*hours_per_day*mins_per_hour*secs_per_min
print(total_secs)
结果
126144000
请注意,当输入的值可以更改时,使用变量特别有用。例如,假设我们希望通过将一年中的天数值从 365 更新到 365.25 来稍微改进我们的估计值,以考虑闰年。然后,我们可以更改分配给days_per_year的值,而无需更改任何其他变量并重做计算。
使用变量时的一个常见错误是意外引入拼写错误。例如,如果我们hours_per_day拼写为hours_per_dy,Python将错误显示消息NameError:未定义名称“hours_per_dy”。
NameError Traceback (most recent call last)
/tmp/ipykernel_18/142450907.py in <module>
----> 1 print(hours_per_dy)
NameError: name 'hours_per_dy' is not defined
2.函数
这一章讲的是如何用函数组织代码。函数是一段用于执行特定任务的代码。函数允许多次执行大致相同的计算,而不会重复任何代码。
我们从一个简单的函数例子开始。下面的add_three()函数接受任意数字,将其加3,然后返回结果。
# Define the fiction
def add_three(input_var):
output_var = input_var + 3
return output_var
每个函数都由两部分组成:头部和主体。
头部
函数头文件定义了函数名及其参数。
每个函数头文件都以def开头,它告诉Python我们将要定义一个函数。
在本例中,函数名为add_three。
在本例中,参数为input_var。参数是将被用作函数输入的变量的名称。它总是括在紧跟在函数名之后的圆括号中。(注意,函数也可以没有参数,也可以有多个参数。稍后你会看到一些例子。)
对于每个函数,包含函数参数的圆括号后面必须有一个冒号:
主体
函数体指定了函数所做的工作。
函数体中的每一行代码必须精确地缩进四个空格。你可以按四次空格键,或者按一次键盘上的“Tab”键。
该函数的工作方式是从上到下运行所有缩进的行。
它接受参数作为输入,在本例中为input_var。
该函数使用计算方法output_var = input_var + 3创建一个新变量output_var。
然后,最后一行代码(称为return语句)将output_var中的值作为函数的输出返回。
上面的代码单元格只定义了函数,但没有运行它。在下一个代码单元格之后,当我们实际运行函数时,函数体的细节将变得更有意义。
当我们运行一个函数时,它也可以被称为“调用”函数。
在下面的代码单元格中,我们以10作为输入值运行函数。我们定义了一个新变量new_number,它被设置为函数的输出。
def add_three(input_var):
output_var = input_var + 3
return output_var
# 将10作为函数的输入
new_number = add_three(10)
# 检验输出值是不是预期的13
print(new_number)
解释
add_three()是我们为input_var提供10并调用add_three()
当函数运行时,它会从上到下运行函数体中的所有代码:
它首先计算output_var = input_var + 3,这将设置output_var = 13。
最后一行代码是return语句,它返回output_var的值,即13。
通过设置new_number = add_three(10),我们设置new_number = 13。
注意:当我们随意引用add_three()函数时,我们在函数名后面使用空的右括号。这与人们通常编写Python代码解释的方式是一致的,空括号只是表明我们引用的是一个函数,而不是变量或另一个Python对象。这些圆括号应该总是空的,即使函数有参数。
函数命名
在为自己的函数命名时,应该只使用小写字母,单词之间由下划线分隔,而不是空格。
一个更复杂的示例
现在您已经理解了基础知识,我们可以继续看一个具有更长的计算的示例。
假设你正在帮一个朋友计算税后的周薪。
他们的纳税等级为12%(换句话说,他们工资的12%用于缴税,而他们只拿回家88%)
他们的工资是每小时15美元。
下面的函数根据工作小时数计算工资。该函数比第一个示例更复杂,因为该函数有更多的代码行和注释。与上面的例子类似,该函数只有一个参数(num hours)。在函数体中:
使用num_hours的值来指定新变量pay_pretax的值。
使用pay_pretax的值来指定新变量pay_aftertax的值。
返回pay_aftertax变量的值。
def get_pay(num_hours):
pay_pretax = num_hours * 15
pay_aftertax = pay_pretax * (1 - .12)
return pay_aftertax
pay_fulltime = get_pay(40)
print(pay_fulltime)
为了根据不同的工作小时数快速计算工资,您需要为该函数提供不同的数字。例如,假设你的朋友工作32小时。(然后,他们得到422.40美元。)
def get_pay(num_hours):
pay_pretax = num_hours * 15
pay_aftertax = pay_pretax * (1 - .12)
return pay_aftertax
pay_parttime = get_pay(32)
print(pay_parttime)
结果
422.40
因为我们编写了一个函数,所以可以计算不同小时的工资,而不必重新编写计算中的所有代码。
函数可以帮助我们避免代码中的错误,并节省大量时间。一般来说,在编写代码时,应该尽量少写,因为每次输入计算时,都有可能不小心出现拼写错误或错误。
变量范围
在函数体中定义的变量不能在函数外部访问。例如,下一个代码单元格会出错,因为pay_aftertax只存在于函数内部。
print(pay_aftertax)
Traceback (most recent call last):
File "D:\python项目\practice.py", line 23, in <module>
print(pay_aftertax)
NameError: name 'pay_aftertax' is not defined
如果我们试图打印pay_pretax或num_hours,将会得到相同的错误。因此,如果我们需要函数中的任何信息,我们需要确保它出现在函数末尾的return语句中。
我们将变量的作用域称为代码中可访问变量的部分。函数内部定义的变量(如pay_aftertax)仅具有该函数的局部作用域。但是,正如您所看到的,在所有函数(如pay_parttime)之外定义的变量具有全局作用域,可以在任何地方访问。
到目前为止,我们已经学习了如何定义只有一个参数的函数。要定义具有多个参数的函数,只需要在函数头的圆括号内添加更多参数,并用逗号分隔它们。
我们使用下面的get_pay_with_more_inputs()函数来完成此操作,它基于三个参数来计算每周的薪水:
Num_hours—一周工作的小时数
Hourly_wage—每小时的工资(以$/hour为单位)
税级-你的工资中扣除税款的百分比
def get_pay_with_more_inputs(num_hours,hourly_wage,tax_bracket):
pay_pretax = num_hours * hourly_wage
pay_aftertax = pay_pretax * (1 - tax_bracket)
return pay_aftertax
higher_pay_aftertax = get_pay_with_more_inputs(40,24,.22)
print(higher_pay_aftertax)
结果
748.8000000000001
然后,要调用该函数,需要为每个输入提供一个值,同样用逗号分隔。
在下面的代码单元格中,我们计算了工作40小时、每小时挣24美元、纳税等级为22%的人的税后收入。
下面的代码单元格给出了与运行get_pay(40)时相同的结果,因为hourly_wage设置为15,tax_bracket设置为12%,这与我们设计get_pay的方式一致。
same_pay_fulltime = get_pay_with_more_inputs(40, 15, .12)
print(same_pay_fulltime)
结果
528.0
取决于我们计划如何使用这个新函数get_pay_with_more_inputs(),它可能比原始函数get_pay()更有用,因为它可以处理更多情况。新函数允许用户指定正确的值,而不是错误地假设小时工资和税收等级。但是,如果你确定小时工资和税收等级不需要改变,新函数只是比必要的更复杂。通常,在定义函数时,需要根据用例考虑需要多大的灵活性。
无参数函数
注意,可以不带参数定义函数,也可以不带返回语句。下面代码单元中的print_hello()函数就是一个例子。
def print_hello():
print("Hello, you!")
print("Good morning!")
print_hello()数据类型
3.数据类型
无论何时在Python中创建一个变量,它都有一个具有相应数据类型的值。有许多不同的数据类型,如整数、浮点数、布尔值和字符串,我们将在本课中讨论所有这些。(这只是可用数据类型的一小部分——还有字典、集合、列表、元组等。)
数据类型很重要,因为它们决定了您可以使用它们执行何种类型的操作。例如,可以分割两个浮点数,但不能分割两个字符串。例如,12.0/2.0有意义,但“猫”/“狗”就没有意义。为了避免错误,我们需要确保操作与我们拥有的数据类型匹配。
整数
整数是没有小数部分的数字,可以是正的(1、2、3、…)、负的(-1、-2、-3、…)或零的(0)。在下面的代码单元格中,我们将变量x设置为整数。然后,我们使用type()验证数据类型,只需要将变量名传递到圆括号中。
x = 14
print(x)
print(type(x))
结果
14
<class 'int'>
<class 'int'>代表整数类型
浮点数
浮点数是带有小数部分的数字。小数之后可以有很多数字。
nearly_pi = 3.141592653589793238462643383279502884197169399375105820974944
print(nearly_pi)
print(type(nearly_pi))
结果
3.141592653589793
<class 'float'>
我们也可以指定一个带有分数的浮点数。
almost_pi = 22/7
print(almost_pi)
print(type(almost_pi))
结果
3.142857142857143
<class 'float'>
一个对分数特别有用的函数是round()函数。它允许您将数字四舍五入到指定的小数点后数位。
round_pi = round(22/7,5)
print(round_pi)
print(type(round_pi))
结果
3.14286
<class 'float'>
当你写一个带有小数点的数字时,Python会将其识别为浮点数据类型。
例如,1。(或1.0、1.00等)将被识别为浮点数。即使这些数字在技术上没有小数部分,情况也是如此!
y_float = 1.
print(y_float)
print(type(y_float))
结果
1.0
<class 'float'>
布尔值
布尔值代表两个值之一:True或False。在下面的代码单元格中,z_one被设置为一个带值的布尔值
z_one = True
print(z_one)
print(type(z_one))
结果
True
<class 'bool'>
接下来,将z_two设置为布尔值False
z_two = False
print(z_two)
print(type(z_two))
结果
False
<class 'bool'>
布尔值用于表示表达式的真值。因为1 < 2是一个true语句,所以z_three的值为true。
z_three = (1 < 2)
print(z_three)
print(type(z_three))
结果
True
<class 'bool'>
反过来也可以表达1>2是一个flase语句,这里就不作赘诉。
我们可以使用not来切换布尔值。因此,not True等价于False, not False变成True。
z_three = not z_three
print(z_three)
print(type(z_three))
字符串
字符串数据类型是包含在引号中的字符(如字母、标点、数字或符号)的集合。字符串通常用于表示文本。
w = "Hello, Python!"
print(w)
print(type(w))
结果
Hello, Python!
<class 'str'>
你可以用len()获取字符串的长度。“Hello, Python!”的长度为14,因为它有14个字符,包括空格、逗号和感叹号。注意,在计算长度时不包括引号。
print(len(w))
结果
14
一种特殊的字符串类型是空字符串,其长度为0。
shortest_string = ""
print(type(shortest_string))
print(len(shortest_string))
结果
<class 'str'>
0
如果将数字放在引号中,则它将具有字符串数据类型。
my_number = "1.12321"
print(my_number)
print(type(my_number))
结果
1.12321
<class 'str'>
如果有一个可转换为浮点数的字符串,可以使用float()。
这并不总是有效的!例如,我们可以将"10.43430"和"3"转换为浮点数,但不能将"Hello, Python!"转换为浮点数。
also_my_number = float(my_number)
print(also_my_number)
print(type(also_my_number))
结果
1.12321
<class 'float'>
就像可以将两个数字(浮点数或整数)相加一样,也可以将两个字符串相加。它将产生一个较长的字符串,将两个原始字符串连接在一起。
new_string = "abc" + "def"
print(new_string)
print(type(new_string))
结果
abcdef
<class 'str'>
注意,不能用两个字符串做减法或除法。你也不能将两个字符串相乘,但你可以将一个字符串乘以一个整数。这再次得到一个字符串,它只是原始字符串与自身连接指定次数的字符串。
newest_string = "abc" * 3
print(newest_string)
print(type(newest_string))
结果
abcabcabc
<class 'str'>
注意,不能将字符串与浮点数相乘!尝试这样做将返回一个错误。
条件和条件语句
我们可以使用条件来比较变量的值。在下一个代码单元格中,var_one的值为1,var_two的值为2。在条件中,我们检查var_one是否小于1(为False),并检查var_two是否大于或等于var_one(为True)。
var_one = 1
var_two = 2
print(var_one < 1)
print(var_two >= var_one)
结果
False
True
有关可用于构造条件的常用符号列表,请查看下面的图表。
重要提示:当您检查两个值相等时,请确保使用的是==号,而不是=号。
Var_one ==1检查Var_one的值是否为1,但是
Var_one =1将Var_one的值设置为1。
条件语句使用条件来修改函数的运行方式。它们检查一个条件的值,如果条件的计算结果为True,则执行某个代码块。(否则,如果条件为False,则代码不运行。)
在下面的小节中,您将看到几个这样的例子。“如果”语句
最简单的条件语句是“if”语句。在下面的evaluate_temp()函数中可以看到这样的示例。该函数接受体温(摄氏)作为输入。
最初,消息设置为“正常温度”。
然后,如果temp > 38为True(例如,体温大于38°C),则消息将更新为“Fever!”。否则,如果temp > 38为False,则消息不更新。最后,函数返回message。
def evaluate_temp(temp):
message = "Normal temperature."
if temp > 38:
message = "Fever!"
return message
print(evaluate_temp(37))
结果
Normal temperature.
注意有两层缩进:
第一级缩进是因为我们总是需要缩进函数内部的代码块。
第二级缩进是因为我们还需要缩进属于“if”语句的代码块。(正如您将看到的,我们还需要缩进“elif”和“else”语句的代码块。)
注意,因为return语句在"if"语句下没有缩进,所以无论temp > 38是True还是False,它都会被执行。
if...else...语句
如果语句为False,可以使用“else”语句来运行代码。如果语句为True,则运行“if”语句下的代码,如果语句为False,则运行“else”语句下的代码。
def evaluate_temp_with_else(temp):
if temp > 38:
message = "Fever!"
else:
message = "Normal temperature."
return message
print(evaluate_temp_with_else(40))
结果
Fever!
if...elif...else...
我们可以使用“elif”(是“else if”的缩写)来检查多个条件是否为真。下面的函数:
首先检查是否temp > 38。如果这是真的,那么消息将设置为“Fever!”
只要消息还没有设置,该函数就会检查是否为temp > 35。如果这是真的,那么消息设置为“正常温度。”
然后,如果仍然没有设置消息,则“else”语句确保打印消息被设置为“Low temperature.”消息。
你可以把“elif”想象成……"好的,之前的条件(例如,temp > 38)为假,所以让我们检查这个新条件(例如,temp > 35)是否可能为真!"
def evaluate_temp_with_elif(temp):
if temp > 38:
message = "Fever!"
elif temp > 35:
message = "Normal temperature."
else:
message = "Low temperature."
return message
evaluate_temp_with_elif(36)
结果
'Normal temperature.'
例子——计算
在到目前为止的示例中,使用条件语句来决定如何设置变量的值。但是你也可以使用条件语句来执行不同的计算。
在下一个例子中,假设你生活在一个只有两个税级的国家。收入低于12,000美元的人要缴纳25%的税,收入不低于12,000美元的人要缴纳30%的税。下面的函数计算应该缴纳多少税。
def get_taxes(earnings):
if earnings < 12000:
tax_owed = .25 * earnings
else:
tax_owed = .30 * earnings
return tax_owed
接下来的代码块,使用功能
ana_taxes = get_taxes(9000)
bob_taxes = get_taxes(15000)
print(ana_taxes)
print(bob_taxes)
结果
2250.0
4500.0
多条“elif”语句
到目前为止,您只看到“elif”在函数中使用过一次。但是可以使用的“elif”语句的数量是没有限制的。例如,下一个代码块根据体重(公斤)计算给孩子的药物剂量(以毫升为单位)。
注:此功能不应作为医嘱使用,代表假药。
def get_dose(weight):
# Dosage is 1.25 ml for anyone under 5.2 kg
if weight < 5.2:
dose = 1.25
elif weight < 7.9:
dose = 2.5
elif weight < 10.4:
dose = 3.75
elif weight < 15.9:
dose = 5
elif weight < 21.2:
dose = 7.5
# Dosage is 10 ml for anyone 21.2 kg or over
else:
dose = 10
return dose
print(get_dose(12))
在本例中,“if”语句为False,而所有“elif”语句的值都为False,直到权重< 15.9为True,剂量设置为5。
一旦“elif”语句的计算结果为True并且代码块运行,该函数将跳过所有剩余的“elif”和“else”语句。跳过这些之后,剩下的就是返回语句,它返回剂量的值。
elif语句的顺序在这里很重要!重新排序语句将返回非常不同的结果。
介绍列表
在进行数据科学时,您需要一种组织数据的方法,以便能够有效地使用它。Python有许多数据结构可用于保存数据,如列表、集合、字典和元组。接下来,您将学习如何使用Python列表。
要创建列表,需要使用方括号([,]),并用逗号分隔每一项。列表中的每一项都是Python字符串,所以每一项都用引号括起来
flowers_list = ["pink primrose", "hard-leaved pocket orchid", "canterbury bells", "sweet pea", "english marigold", "tiger lily", "moon orchid", "bird of paradise", "monkshood", "globe thistle"]
print(type(flowers_list))
print(flowers_list)
结果
<class 'list'>
['pink primrose', 'hard-leaved pocket orchid', 'canterbury bells', 'sweet pea', 'english marigold', 'tiger lily', 'moon orchid', 'bird of paradise', 'monkshood', 'globe thistle']
乍一看,无论用Python字符串还是列表表示信息,都没有太大区别。但正如你将看到的,有了列表,你可以更容易地完成很多任务。例如,列表将使它更容易:
在指定位置(第一、第二、第三等)取得元素。
检查元素数量。
添加和删除元素。
我们可以用len()计算任意列表中的条目数,len()是"length"的缩写。您只需要提供括号中列表的名称。
print (len (flowers_list))
结果
10
我们可以根据列表中的任何一项在列表中的位置(第一,第二,第三,等等)来引用列表中的任何一项。这叫做索引。
注意,Python使用从零开始的索引,这意味着:
要提取列表中的第一个元素,你用0,
要提取列表中的第二个条目,需要使用1和
要提取列表中的最后一个条目,需要使用小于列表长度的条目。
print(type(flowers_list))
print(flowers_list)
print("First entry:", flowers_list[0])
print("Second entry:", flowers_list[1])
print("Last entry:", flowers_list[9])
结果
<class 'list'>
['pink primrose', 'hard-leaved pocket orchid', 'canterbury bells', 'sweet pea', 'english marigold', 'tiger lily', 'moon orchid', 'bird of paradise', 'monkshood', 'globe thistle']
First entry: pink primrose
Second entry: hard-leaved pocket orchid
Last entry: globe thistle
在上面的代码单元格中,我们使用单个print()打印多个条目(包括Python字符串(如"First entry:")和列表中的值(如flowers_list[0])。要在Python中使用一个命令输出多个内容,我们只需要用逗号分隔它们。
您还可以提取列表的一个片段(例如,前三个条目或后两个条目)。这叫做切片。例如:
要提取前x个元素,可以使用[:x]和
要提取最后的y项,可以使用[-y:]。
print("First three entries:", flowers_list[:3])
print("Final two entries:", flowers_list[-2:])
结果
First three entries: ['pink primrose', 'hard-leaved pocket orchid', 'canterbury bells']
Final two entries: ['monkshood', 'globe thistle']
使用. Remove()从列表中删除一个元素,并将要删除的元素放在括号中。
flowers_list.remove("globe thistle")
print(flowers_list)
结果
['pink primrose', 'hard-leaved pocket orchid', 'canterbury bells', 'sweet pea', 'english marigold', 'tiger lily', 'moon orchid', 'bird of paradise', 'monkshood']
使用.append()向列表中添加一元素,并将要添加的元素放在括号中。
flowers_list.append("snapdragon")
print(flowers_list)
结果
['pink primrose', 'hard-leaved pocket orchid', 'canterbury bells', 'sweet pea', 'english marigold', 'tiger lily', 'moon orchid', 'bird of paradise', 'monkshood', 'snapdragon']
列表不仅仅用于字符串到目前为止,我们只处理过列表中每一项都是字符串的列表。但是列表可以包含任何数据类型的项,包括布尔值、整数和浮点数。
例如,考虑2000年4月第一周一家零售店的精装书销售情况。
hardcover_sales = [139, 128, 172, 139, 191, 168, 170]
这里,hardcover_sales是一个整数列表。与处理字符串类似,您仍然可以执行诸如获取长度、提取单个条目和扩展列表等操作。
print("Length of the list:", len(hardcover_sales))
print("Entry at index 2:", hardcover_sales[2])
结果
Length of the list: 7
Entry at index 2: 172
你也可以用min()得到最小值,用max()得到最大值。
print("Minimum:", min(hardcover_sales))
print("Maximum:", max(hardcover_sales))
结果
Minimum: 128
Maximum: 191
使用sum()求和列表中的每一项
print(“一周总销量:”,sum(hardcover_sales))
结果
一周总销量1107
我们也可以对列表的切片进行类似的计算。在下一个代码单元格中,我们取前5天的总和(sum(hardcover_sales[:5])),然后除以5得到前5天售出的平均图书数。
print("Average books sold in first five days:", sum(hardcover_sales[:5])/5)
结果
Average books sold in first five days: 153.8
这一次的内容到此就结束了,谢谢大家的浏览。#头条周刑##python##python自学##怎样学好python##头条创作挑战赛#