编程简介
Kaggle官网的课程链接:Arithmetic and Variables
Arithmetic and Variables(算术和变量)
欢迎来到编程入门课程!如果你从未写过一行代码,并且对学习数据科学和机器学习感兴趣,那么这门课程适合你。(如果你确实有编程经验,并且刚刚接触Python语言,那么Python课程更适合开始学习。)
在本课程中,您将学习如何使用代码让计算机为您执行某些任务。Python是数据科学领域最流行的编程语言之一,也是您将在本课程中学习的语言。完成本课程后,您将为学习Python课程做好充分准备,然后学习机器学习入门课程。
在本教程中,您将看到几个Python代码示例。在练习中,你将有机会编写自己的代码。(如果您想预览该练习,请随时查看。我们还在本教程末尾提供了该练习的链接。)
Printing¶
你可以让电脑做的最简单(也是最重要的!)的任务之一就是打印一条消息。
在Python中,我们通过编写print()并将消息放在括号内并用引号括起来,让计算机为我们打印一条消息。下面,我们要求计算机打印消息Hello,world!。
print("Hello,world!")
Hello,world!
代码位于框内(称为代码块),计算机的响应(称为代码输出)显示在框下方。正如你所看到的,电脑打印出了我们想要的信息。
Arithmetic
我们还可以打印一些算术运算(如加法、减法、乘法或除法)的值。
例如,在下一个代码单元中,计算机将2加1,然后打印结果,即3。请注意,与我们只是打印文本时不同,我们不使用任何引号。
print(1 + 2)
3
我们也可以在python中做减法。下一个代码单元从9中减去5并打印结果,即4。
print(9 - 5)
4
你实际上可以用python做很多计算!请参阅下表中的一些示例。
| Operation | Symbol | Example |
|---|---|---|
| Addition | + | 1 + 2 = 3 |
| Subtraction | - | 5 - 4 = 1 |
| Multiplication | * | 2 * 4 = 8 |
| Division | / | 6 / 3 = 2 |
| Exponent | ** | 3 ** 2 = 9 |
您可以使用括号控制长计算中的操作顺序。
print(((1 + 3) * (9 - 2) / 2) ** 2)
196.0
一般来说,Python在决定操作顺序时遵循PEMDAS规则。
Comments
我们使用注释来注释代码正在做什么。它们可以帮助其他人理解你的代码,如果你有一段时间没有查看自己的代码,它们也会有所帮助。到目前为止,我们编写的代码很短,但当你编写了大量代码时,注释变得更加重要。
例如,在下一个代码单元中,我们将3乘以2。我们还在代码上方添加了一个注释(#Multiply 3 by 2)来描述代码正在做什么。
# Multiply 3 by 2
print(3 * 2)
6
为了向Python表明一行是注释(而不是Python代码),你需要在第一个字符中写一个井号(#)。
一旦Python看到注释符号并识别出该行是注释,它就会被计算机完全忽略。这很重要,因为就像英语或印地语(或任何其他语言!)一样,Python是一种需要遵循非常严格规则的语言。不过,Python比人类监听器更严格,如果它无法理解代码,就会出错。
我们可以在下面的代码单元格中看到一个例子。如果我们删除注释符号,Python会出错,因为注释中的文本不是有效的Python代码,因此无法正确解释。
Multiply 3 by 2
File "/tmp/ipykernel_18/3750420471.py", line 1
Multiply 3 by 2
^
SyntaxError: invalid syntax
Variables
到目前为止,您已经使用代码进行了计算并打印了结果,结果并没有保存在任何地方。但是,您可以想象,您可能希望保存结果以便以后使用。为此,您需要使用变量。
Creating variables
下一个代码单元创建了一个名为test_var的变量,并将我们将5加4时得到的值赋给它。
然后,我们打印分配给变量的值,即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
一般来说,要使用变量,您需要首先选择要使用的名称。变量名最好简短且具有描述性。他们还需要满足几个要求:
1.它们不能有空格(例如,不允许使用test var)
2.它们只能包含字母、数字和下划线(例如,不允许使用test_var!)
3.它们必须以字母或下划线开头(例如,不允许使用1_var)
4.然后,要创建变量,您需要使用=来分配您希望它具有的值。
您始终可以通过使用print()并将变量名称放在括号中来查看分配给变量的值。
随着时间的推移,您将学习如何为Python变量选择好的名称。现在感觉不舒服是完全可以的,最好的学习方法就是查看大量的Python代码!
Manipulating variables
您始终可以通过覆盖前一个值来更改分配给变量的值。
在下面的代码单元格中,我们将my_var的值从3更改为100。
# Set the value of a new variable to 3
my_var = 3
# Print the value assigned to my_var
print(my_var)
# Change the value of the variable to 100
my_var = 100
# Print the new value assigned to my_var
print(my_var)
3
100
请注意,一般来说,无论何时在代码单元格中定义变量,后面的所有代码单元格都可以访问该变量。例如,我们使用下一个代码单元来访问my_var(来自上面的代码单元)和test_var(来源于本教程前面的部分)的值。
print(my_var)
print(test_var)
100
9
下一个代码单元告诉Python将my_var的当前值增加3。
为此,我们仍然需要像以前一样使用my_var=。与之前一样,我们要分配给变量的新值位于=符号的右侧。
# Increase the value by 3
my_var = my_var + 3
# Print the value assigned to my_var
print(my_var)
103
Using multiple variables
代码使用多个变量是很常见的。当我们必须使用多个输入进行长时间计算时,这尤其有用。
在下一个代码单元中,我们计算四年中的秒数。此计算使用五个输入。
# Create variables
num_years = 4
days_per_year = 365
hours_per_day = 24
mins_per_hour = 60
secs_per_min = 60
# Calculate number of seconds in four years
total_secs = secs_per_min * mins_per_hour * hours_per_day * days_per_year * num_years
print(total_secs)
126144000
如上所述,四年有126144000秒。
请注意,可以在没有变量的情况下进行此计算,因为只有60*60*24*365*4,但很难检查没有变量的计算是否有错误,因为它不太可读。当我们使用变量(如num_years、days_per-year等)时,我们可以更好地跟踪计算的每个部分,更容易地检查和纠正任何错误。
请注意,当输入值可能发生变化时,使用变量特别有用。例如,假设我们想通过将一年中的天数从365更新为365.25来略微改进我们的估计,以考虑闰年。然后,我们可以在不更改任何其他变量的情况下更改分配给days_per-year的值,并重新进行计算。
# Update to include leap years
days_per_year = 365.25
# Calculate number of seconds in four years
total_secs = secs_per_min * mins_per_hour * hours_per_day * days_per_year * num_years
print(total_secs)
126230400.0
注意:您可能已经注意到在数字末尾添加了.0,这可能看起来没有必要。这是由于在第二次计算中,我们使用了一个有小数部分的数字(365.25),而第一次计算只使用了没有小数部分的数的倍数。当我们介绍数据类型时,您将在第3课中了解更多信息。
Debugging
使用变量时的一个常见错误是意外引入拼写错误。例如,如果我们将hours_per_day拼写为hours_par_dy,Python将出错,并显示消息NameError:未定义名称“hours_pur_dy”。
print(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
当你看到这样的NameError时,这表明你应该检查它引用为“未定义”的变量的拼写方式。然后,要修复错误,您只需更正拼写即可。
print(hours_per_day)
24
What's next?
现在轮到你练习用算术操纵变量了。
Functions(功能)
Introduction
在本课中,您将学习如何使用函数组织代码。函数是为执行特定任务而设计的代码块。正如您将看到的,函数将允许您多次执行大致相同的计算,而无需复制任何代码。
Intro to functions: a simple example
我们从一个函数的简单示例开始。下面的add_three()函数接受任何数字,将其加三,然后返回结果。
# Define the function
def add_three(input_var):
output_var = input_var + 3
return output_var
每个函数都由两部分组成:头部和主体。
Header
函数头定义了函数的名称及其参数。
1.每个函数头都以def开头,这告诉Python我们即将定义一个函数。
2.在该示例中,函数名为add_three。
3.在这个例子中,参数是input_var。参数是将用作函数输入的变量的名称。它总是被括在函数名称后面的括号中。(请注意,函数也可以没有参数,也可以有多个参数。您将在本课稍后看到一些示例。)
4.对于每个函数,包含函数参数的括号后面必须跟一个冒号:。
Body
函数体指定了函数所做的工作。
1.函数体中的每一行代码都必须缩进四个空格。您可以通过按四次空格键或按一次键盘上的“Tab”按钮来完成此操作。(随着您对Python的了解越来越多,您可能需要将代码缩进四个以上的空格,但您将在本课程稍后了解更多信息。)
2.该函数通过从上到下运行所有缩进行来完成其工作。
3.它将参数作为输入,在示例中为input_var。
4.该函数创建了一个新的变量output_var,其计算结果为output_var=input_var+3。
5.然后,最后一行代码,称为return语句,只返回output_var中的值作为函数的输出。
上面的代码单元只是定义了函数,但并没有运行它。在下一个代码单元之后,当我们实际运行函数时,函数体的细节将更有意义。
How to run (or "call") a function
当我们运行一个函数时,它也可以被称为“调用”该函数。
在下面的代码单元格中,我们以10作为输入值运行函数。我们定义了一个新的变量new_number,它被设置为函数的输出。
# Run the function with 10 as input
new_number = add_three(10)
# Check that the value is 13, as expected
print(new_number)
13

更详细地说,
add_three(10)是当我们为input_var提供10作为值并调用add_thre()函数时,我们得到的输出值。
当函数运行时,它会从上到下运行其主体中的所有代码:
它首先计算output_var=input_var+3,这将设置output_var=13。
最后一行代码是return语句,它返回output_var的值,即13。
通过设置new_number=add_three(10),我们设置new_nnumber=13。
注意:当我们在本教程中随意引用add_three()函数时,我们在函数名后使用空的右括号。这与人们通常编写Python代码解释的方式是一致的,空括号只是清楚地表明我们引用的是一个函数,而不是一个变量或另一个Python对象。即使函数有参数,这些括号也应始终为空。
Naming functions
在上面的示例中,为您选择了函数的名称。在命名自己的函数时,应该只使用小写字母,单词之间用下划线而不是空格分隔。
随着时间的推移,命名函数会感觉很自然,起初感到不舒服是正常的。学习的最佳方式是查看大量Python代码。
A more complex example
现在您已经了解了基础知识,我们可以继续进行更长时间的计算。
假设你正在帮助一位朋友计算他们的税后周薪。
1.他们的税率为12%(换言之,他们工资的12%用于纳税,他们只带回家88%),以及
2.他们按小时计酬,每小时15美元。
下面的函数根据工作小时数计算工资。该函数比第一个示例更复杂,因为该函数有更多的代码行和注释。与上面的示例类似,该函数只有一个参数(num hours)。在函数体中,我们:
1.使用num_hours的值指定新变量pay_pretax的值。
2.使用pay_pretax的值指定新变量pay_aftertax的值。
3.返回pay_aftertax变量的值。
def get_pay(num_hours):
# Pre-tax pay, based on receiving $15/hour
pay_pretax = num_hours * 15
# After-tax pay, based on being in 12% tax bracket
pay_aftertax = pay_pretax * (1 - .12)
return pay_aftertax
我们调用此函数的方式与调用第一个函数的方式相同。下一个代码单元格根据工作40小时计算工资。(税后为528美元。)
# Calculate pay based on working 40 hours
pay_fulltime = get_pay(40)
print(pay_fulltime)
528.0
要根据不同的工作小时数快速计算工资,您需要为函数提供不同的数字。例如,假设你的朋友工作了32个小时。(然后,他们得到422.40美元。)
pay_parttime = get_pay(32)
print(pay_parttime)
422.4
因为你写了一个函数,所以你可以计算不同时间的工资,而不必重新编写计算中的所有代码。
函数可以帮助您避免代码中的错误,并节省大量时间。一般来说,在编码时,你应该尽量少写,因为每次你输入一个计算,都是另一个意外引入拼写错误或错误的机会。
Variable "scope"
函数体内定义的变量不能在函数外访问。例如,下一个代码单元格错误,因为pay_aftertax只存在于函数内部。
print(pay_aftertax)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_19/2991332200.py in <module>
----> 1 print(pay_aftertax)
NameError: name 'pay_aftertax' is not defined
如果你尝试打印pay_pretax或num_hours,你会得到同样的错误。因此,如果你需要函数中的任何信息,你需要确保这些信息出现在函数末尾的return语句中。
我们将变量的作用域称为代码中可访问的部分。函数内定义的变量(如pay_aftertax)仅具有该函数的局部作用域。然而,正如您所看到的,在所有函数之外定义的变量(如pay_parttime)都有一个全局范围,可以在任何地方访问。
Functions with multiple arguments
到目前为止,您已经学习了如何仅用一个参数定义函数。要定义一个有多个参数的函数,您只需要在函数头的括号内添加更多参数,并用逗号分隔它们。
我们使用下面的get_py_with_more_inputs()函数来实现这一点,该函数基于三个参数计算每周工资:
1.num_hours-一周的工作小时数
2.hourly_wage-小时工资(单位:美元/小时)
3.tax_bract-扣除税款的工资百分比
def get_pay_with_more_inputs(num_hours, hourly_wage, tax_bracket):
# Pre-tax pay
pay_pretax = num_hours * hourly_wage
# After-tax pay
pay_aftertax = pay_pretax * (1 - tax_bracket)
return pay_aftertax
然后,要调用该函数,您需要为每个输入提供一个值,再次用逗号分隔。
在下面的代码单元格中,我们计算了工作40小时、每小时赚24美元、税率为22%的人的税后工资。
higher_pay_aftertax = get_pay_with_more_inputs(40, 24, .22)
print(higher_pay_aftertax)
748.8000000000001
下面的代码单元给出了与我们运行get_py(40)时相同的结果,因为hourly_wage设置为15,tax_braft设置为12%,这与我们设计get_py的方式一致。
same_pay_fulltime = get_pay_with_more_inputs(40, 15, .12)
print(same_pay_fulltime)
528.0
根据我们计划如何使用这个新函数get_py_with_more_inputs(),它可能比原始函数get_py()更有用,因为它解决了更多的情况。新功能允许用户指定正确的值,而不是可能错误地假设小时工资和税级。但是,如果你确定小时工资和税级不需要改变,那么新功能只是比必要的更复杂。一般来说,在定义函数时,你需要根据你的用例考虑你需要多大的灵活性。
Functions with no arguments
请注意,可以定义没有参数的函数,并且没有return语句。下面代码单元中的print_hello()函数就是一个示例。
# Define the function with no arguments and with no return
def print_hello():
print("Hello, you!")
print("Good morning!")
# Call the function
print_hello()
Hello, you! Good morning!
本课程很短,旨在介绍编程,因此我们不会在本教程中涵盖您需要了解的关于函数的所有内容。在Python课程中,您将学习更多关于函数的知识。
Your turn
是时候用Python编写自己的函数了。
1万+

被折叠的 条评论
为什么被折叠?



