go to index

Hello Python

read time 13 min read
Kaggle Python

Hello Python

本课程涵盖了您需要的关键Python技能,以便您可以开始使用Python进行数据科学。本课程非常适合那些有一定编码经验的人,他们想要将Python添加到他们的曲目中。(如果你是第一次编程,鼓励你看看我们的编程入门课程,这是为想要开始使用Python的完全初学者设计的。)

我们将从Python语法、变量赋值和算术运算符的简要概述开始。

Hellp Python!

Python是以英国喜剧剧团Monty Python命名的,所以我们的第一个Python节目将向他们关于Spam的小品致敬。

为了好玩,试着通读下面的代码,并预测它在运行时会做什么。(如果你不知道,那也没关系!)

然后点击“输出”按钮来查看程序的结果。

python
spam_amount = 0
print(spam_amount)

# Ordering Spam, egg, Spam, Spam, bacon and Spam (4 more servings of Spam)
spam_amount = spam_amount + 4

if spam_amount > 0:
    print("But I don't want ANY spam!")

viking_song = "Spam " * spam_amount
print(viking_song)
plaintext
0
But I don't want ANY spam!
Spam Spam Spam Spam 

这里有很多东西要打开!这个愚蠢的程序演示了Python代码的许多重要方面以及它是如何工作的。让我们从上到下检查代码。

python
spam_amount = 0

变量赋值:这里我们创建了一个名为spam_amount的变量,并使用 = 将其赋值为0,这被称为赋值操作符

注意:如果你用某些其他语言(如Java或c++)编程,你可能会注意到Python在这里不需要我们做一些事情:

我们不需要在赋值之前“声明”spam_amount 我们不需要告诉Python spam_amount将指向什么类型的值。实际上,我们甚至可以继续重新分配spam_amount,以引用不同类型的东西,如字符串或布尔值。

python
print(spam_amount)
plaintext
0

函数调用:print是一个Python函数,它在屏幕上显示传递给它的值。调用函数时,可以在函数名后面加上圆括号,并将函数的输入(或参数)放在圆括号中。

python
# Ordering Spam, egg, Spam, Spam, bacon and Spam (4 more servings of Spam)
spam_amount = spam_amount + 4

上面的第一行是注释。在Python中,注释以 # 符号开始。

接下来我们看一个重赋的例子。对现有变量的值重新赋值看起来与创建变量一样——它仍然使用=赋值操作符。

在本例中,我们分配给spam_amount的值涉及对其前一个值的一些简单算术。当遇到这一行时,Python计算=(0 + 4 = 4)右侧的表达式,然后将该值赋给左侧的变量。

python
if spam_amount > 0:
    print("But I don't want ANY spam!")

viking_song = "Spam Spam Spam"
print(viking_song)
plaintext
But I don't want ANY spam!
Spam Spam Spam

我们稍后再讨论“条件语句”,但是,即使您以前从未编写过代码,您也可能猜到它的作用。Python因其可读性和简单性而备受推崇。

注意我们是如何指出哪个代码属于if的。“但是我不想要任何垃圾邮件!”只有在spam_amount为正值时才会被打印出来。但是后面的代码(比如print(viking_song))无论如何都应该执行。我们(和Python)是怎么知道的?

if行末尾的冒号(:)表示开始一个新的代码块。缩进的后续行是该代码块的一部分

注意:如果你以前写过代码,你可能知道其他一些语言使用{花括号}来标记代码块的开始和结束。Python对有意义空格的使用可能会让习惯于其他语言的程序员感到惊讶,但在实践中,它可以比不强制代码块缩进的语言产生更一致和可读的代码。

后面处理viking_song的行没有缩进额外的4个空格,所以它们不是if代码块的一部分。稍后在定义函数和使用循环时,我们将看到更多缩进代码块的示例。

这段代码也是我们在Python中第一次看到字符串:

“但我不想要任何垃圾邮件!” 字符串可以用双引号或单引号来标记。(但是因为这个特定的字符串包含一个单引号字符,我们可能会通过尝试用单引号包围它来混淆Python,除非我们非常小心。)

python
viking_song = "Spam " * spam_amount
print(viking_song)
plaintext
Spam Spam Spam Spam 

*运算符可用于将两个数字相乘(3 * 3的计算结果为9),但我们也可以将字符串乘以数字,以获得重复多次的版本。Python提供了许多类似这样的节省时间的小技巧,其中像*和+这样的操作符根据它们应用于什么类型的东西有不同的含义。(技术术语是操作符重载。)

Numbers and arithmetic in Python

我们已经看到了上面一个包含数字的变量的例子:

python
spam_amount = 0

“Number”是这类东西的一个很好的非正式名称,但如果我们想更专业,我们可以问Python它会如何描述spam_amount是什么类型的东西:

python
type(spam_amount)
plaintext
int

int是**integer(整数)**的缩写。我们在Python中经常遇到另一种类型的数字:

python
type(19.95)
plaintext
float

**float(浮点数)**是一个带小数点的数字——在表示权重或比例等东西时非常有用。

Type()是我们看到的第二个内置函数(在print()之后),也是一个值得记住的内置函数。能够询问Python“这是什么类型的东西?”是非常有用的。

对数字进行运算是一件很自然的事情。我们已经学过加法运算符+,乘法运算符*。Python还为我们介绍了计算器上的其他基本按钮:

OperatorNameDescription
a + bAdditionSum of a and b
a - bSubtractionDifference of a and b
a * bMultiplicationProduct of a and b
a / bTrue divisionQuotient of a and b
a // bFloor divisionQuotient of a and b, removing fractional parts
a % bModulusInteger remainder after division of a by b
a ** bExponentiationa raised to the power of b
-aNegationThe negative of a

一个有趣的观察是,你的计算器可能只有一个除法按钮,而Python可以做两种。“真除法”基本上就是你的计算器所做的:

python
print(5 / 2)
print(6 / 2)
plaintext
2.5
3.0

它总是给我们一个浮点数。

//运算符为我们提供一个四舍五入到下一个整数的结果。

python
print(5 // 2)
print(6 // 2)
plaintext
2
3

你能想到这有什么用吗?您将很快在编码挑战中看到一个示例。

Order of operations

我们在小学学过的算术有关于运算求值顺序的约定。有些人通过一些助记符来记住这些,比如PEMDAS ——Parentheses, Exponents, Multiplication/Division, Addition/Subtraction.(优先级-> 括号、指数、乘法/除法、加法/减法)

Python也遵循类似的规则来决定先执行哪个计算。它们大多是非常直观的。

python
8 - 3 + 2
plaintext
7
python
-3 + 4 * 2
plaintext
5

有时操作的默认顺序不是我们想要的:

python
hat_height_cm = 25
my_height_cm = 190
# How tall am I, in meters, when wearing my hat?
total_height_meters = hat_height_cm + my_height_cm / 100
print("Height in meters =", total_height_meters, "?")
plaintext
Height in meters = 26.9 ?

括号在这里很有用。你可以添加它们来强制Python按照你想要的顺序计算子表达式。

python
total_height_meters = (hat_height_cm + my_height_cm) / 100
print("Height in meters =", total_height_meters)
plaintext
Height in meters = 2.15

Builtin functions for working with numbers

minmax 分别返回其参数的最小值和最大值…

python
print(min(1, 2, 3))
print(max(1, 2, 3))
plaintext
1
3

abs返回参数的绝对值:

python
print(abs(32))
print(abs(-32))
plaintext
32
32

除了作为Python的两种主要数值类型的名称外,int和float也可以作为函数调用,将它们的参数转换为相应的类型:

python
print(float(10))
print(int(3.33))
# They can even be called on strings!
print(int('807') + 1)
plaintext
10.0
3
808

Exercise

Question 0

这是一个愚蠢的问题,旨在介绍我们在所有Kaggle课程中使用的实践练习格式。

*你最喜欢的颜色是什么?*

要完成这个问题,请在下面的单元格中创建一个名为color的变量,并设置适当的值。函数调用q0.check()(我们已经在下面的单元格中提供了它)将检查您的答案。

python
# create a variable called color with an appropriate value on the line below
# (Remember, strings in Python must be enclosed in 'single' or "double" quotes)
color = 'blue'

# Check your answer
q0.check()

Question 1

python
pi = 3.14159 # approximate
diameter = 3

# Create a variable called 'radius' equal to half the diameter
radius = diameter/2

# Create a variable called 'area', using the formula for the area of a circle: pi times the radius squared
area = pi * radius * radius

# Check your answer
q1.check()

Question 2

在下面的单元格中添加代码以交换变量a和b(以便a引用先前由b引用的对象,反之亦然)。

python
########### Setup code - don't touch this part ######################
# If you're curious, these are examples of lists. We'll talk about 
# them in depth a few lessons from now. For now, just know that they're
# yet another type of Python object, like int or float.
a = [1, 2, 3]
b = [3, 2, 1]
q2.store_original_ids()
######################################################################

# Your code goes here. Swap the values to which a and b refer.
# If you get stuck, you can always uncomment one or both of the lines in
# the next cell for a hint, or to peek at the solution.
c = a
a = b 
b = c
######################################################################

# Check your answer
q2.check()

Question 3A

在下面的表达式中添加括号,使其计算结果为1。

python
(5 - 3) // 2

Question 3B

在下面的表达式中添加括号,使其计算结果为0。

python
8 - (3 * 2) - (1 + 1)

Question 4

Alice、Bob 和Carol同意把他们的万圣节糖果放在一起平分。为了他们的友谊,剩下的糖果都会被砸碎(给我吃不好吗???)。例如,如果他们一起带回家91个糖果,他们将每人拿走30个,然后打碎1个。

在下面写一个算术表达式来计算他们必须粉碎多少糖果。

python
# Variables representing the number of candies collected by alice, bob, and carol
alice_candies = 121
bob_candies = 77
carol_candies = 109

# Your code goes here! Replace the right-hand side of this assignment with an expression
# involving alice_candies, bob_candies, and carol_candies
to_smash = (alice_candies + bob_candies + carol_candies)%3

# Check your answer
q4.check()