Hello,Python

简介

这个课程覆盖了python的核心技能,因此你可以使用python开始你的数据科学学习之旅。这个课程非常适合有编程经验的人,他们希望将Python添加到自己的技能库中,或者提高自己基本的Python技能(如果你之前没接触过编程,你可能需要查看这些”Python for Non-Programmers“学习资源。)

我们将从Python语法的简要概述,变量赋值以及算法运算符开始讲起。如果你有Python的基础,你可以直接跳过去着手练习

你好,Python!

Python是以英国喜剧剧团”巨蟒剧团“命名的,因此我们使用第一次Python程序向他们表示敬意。

为了好玩,你阅读一下下面的代码并预测一下运行时会发生什么。(如果你想不出来,没关系!)

点击输出按钮查看程序输出结果。

In [1]

  1. spam_amount = 0
  2. print(spam_amount)
  3. # Ordering Spam, egg, Spam, Spam, bacon and Spam (4 more servings of Spam)
  4. spam_amount = spam_amount + 4
  5. if spam_amount > 0:
  6. print("But I don't want ANY spam!")
  7. viking_song = "Spam " * spam_amount
  8. print(viking_song)

这个程序演示了Python许多重要的东西,以及它是怎样工作的。让我们从上到下来检查代码。

In [2]

  1. spam_amount = 0

变量赋值:我们创建一个变量spam_amout并用=将其赋值为0,这个过程叫做赋值运算。

旁白:如果你使用其它编程语言(java或C++),你可能需要注意一些Python不需要在这里做的东西:

  • 在给变量赋值之前不需要声明变量
  • 你不需要告诉Python将要引进的是哪种类型的值spam_amout。事实,我们甚至可以重回分配spam_amount来引用其它类型,比如字符串或布尔值。

In [3]

  1. print(spam_amount)

Out [3]

  1. 0

函数调用print是一个Python函数,它在屏幕上显示传递给它的值。我们通过在函数名后面加上括号来调用该函数,把输入(参数)放在括号里。

In [4]

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

上面第一行是注释,注释以#开始。

接下来我们看一个重新分配的例子。重新分配现有变量的值和创建变量看起来是一样的,它也是用=作为赋值运算符。

在这种情况下,我们分配给spam_amount的值涉及到对其先前值的一些简单算数。当运行到这一行,Python计算=(0+4=4)右边的表达式,然后赋值给左边变量。

In [5]

  1. if spam_amount > 0:
  2. print("But I don't want ANY spam!")
  3. viking_song = "Spam Spam Spam"
  4. print(viking_song)

Out [5]

  1. But I don't want ANY spam!
  2. Spam Spam Spam

我们将在稍后讨论’条件语句’,即使你以前没有写过条件语句,但是很可能猜到是怎样回事。Python因其可读性和简单性而被赞誉。

注意,我们如何指出哪些代码属于ifBut I don't want ANY spam!仅在span_amount为正数的条件下被输出。但是后面的代码(像print(viking_song))在任何条件下都会被输出。我们(和Python)是怎样知道的?

if后面的:表示一个’新的代码块’正在运行。后面缩进的行也是代码的一部分。一些其它语言用{}标记代码块的开始和结束。对于习惯于其它语言的程序员来说,Python使用有意义的空格可能使他们感到惊讶。实际上,与不强制代码缩进的语言相比,它可以更加一致、可读性更强。

后来对待viking_song不需要缩进4个空格,因此它不属于if的代码块。当我们定义函数并使用循环时,代码缩进是很常见的。

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

  1. "But I don't want ANY spam!"

字符串可以用双引号或单引号表示。但是这是一个特别的字符串,因为它包含了一个单引号符号,如果我们不小心,我们会用单引号包围Python,因此而混淆。

In [6]

  1. viking_song = "Spam " * spam_amount
  2. print(viking_song)

Out [6]

  1. Spam Spam Spam Spam

这个*运算符表示两个数字相乘(3*3等于9),但是有趣的是,我们也可以用一个数字乘以字符串,得到很多重复次的字符串。Python提供了一些节省时间的小技巧,就像*+根据它们应用于什么类型的对象而有不同含义。(术语为操作符重载)

Python中数字和算数

我们在上面已经看到了包含数字变量的例子。

In [7]

  1. spam_amount = 0
  1. ### In [8]
  2. ``` python
  3. type(spam_amount)

Out [8]

  1. int

int是整形的缩写。在Python中我们经常会遇到另一种类型的数字。

In [9]

  1. type(19.25)

Out [9]

  1. float

浮点数带有小数点,对于表示权重或比例之类的东西非常有用。

  1. 数字常做的事就是参与算数。我们已经学过```+```运算符和```*```乘法运算符。Python也提供了其它可以在计算器上实现的算数的运算符。
  2. <table style="width:100%">
  3. <tr>
  4. <td>
  5. Operator
  6. </td>
  7. <td>
  8. Name
  9. </td>
  10. <td>
  11. Description
  12. </td>
  13. </tr>
  14. <tr>
  15. <td>
  16. a + b
  17. </td>
  18. <td>
  19. Addition
  20. </td>
  21. <td>
  22. Sum of a and b
  23. </td>
  24. </tr>
  25. <tr>
  26. <td>
  27. a - b
  28. </td>
  29. <td>
  30. Subtraction
  31. </td>
  32. <td>
  33. Difference of a and b
  34. </td>
  35. </tr>
  36. <tr>
  37. <td>
  38. a * b
  39. </td>
  40. <td>
  41. Multiplication
  42. </td>
  43. <td>
  44. Product of a and b
  45. </td>
  46. </tr>
  47. <tr>
  48. <td>
  49. a / b
  50. </td>
  51. <td>
  52. True division
  53. </td>
  54. <td>
  55. Quotient of a and b
  56. </td>
  57. </tr>
  58. <tr>
  59. <td>
  60. a // b
  61. </td>
  62. <td>
  63. Floor division
  64. </td>
  65. <td>
  66. Quotient of a and b, removing fractional parts
  67. </td>
  68. </tr>
  69. <tr>
  70. <td>
  71. a % b
  72. </td>
  73. <td>
  74. Modulus
  75. </td>
  76. <td>
  77. Integer remainder after division of a by b
  78. </td>
  79. </tr>
  80. <tr>
  81. <td>
  82. a ** b
  83. </td>
  84. <td>
  85. Exponentiation
  86. </td>
  87. <td>
  88. a raised to the power of b
  89. </td>
  90. </tr>
  91. <tr>
  92. <td>
  93. -a
  94. </td>
  95. <td>
  96. Negation
  97. </td>
  98. <td>
  99. The negative of a
  100. </td>
  101. </tr>
  102. </table>
  103. 这里有一个有趣的发现,虽然计算器可能只有一个除法按钮,但Python可以做两种。“真正的除法”基本上就是你的计算器所做的。
  104. ### In [10]
  105. ``` python
  106. print(5 / 2)
  107. print(6 / 2)

Out [10]

  1. 2.5
  2. 3.0

总是得到浮点数。

//运算符得到不大于结果的一个整数。

In [11]

  1. print(5 // 2)
  2. print(6 // 2)

Out [11]

  1. 2
  2. 3

你能想到它的用处在哪吗?你很快将会在编程挑战中看到一个实例。

运算顺序

我们在小学学的算术有计算运算顺序的惯例。有些人用彭达斯(PEMDAS)——括号、指数、乘法/除法、加法/减法等助记符来记住这些。

Python也遵循类似的规则,即先执行哪些计算。大多很直观。

In [12]

  1. 8 - 3 + 2

Out [12]

  1. 7

In [13]

  1. -3 + 4 * 2

Out [13]

  1. 5

有时运算顺序不是我们想象中的那样。

In [14]

  1. hat_height_cm = 25
  2. my_height_cm = 190
  3. # How tall am I, in meters, when wearing my hat?
  4. total_height_meters = hat_height_cm + my_height_cm / 100
  5. print("Height in meters =", total_height_meters, "?")

Out [14]

  1. Height in meters = 26.9 ?

圆括号在这里有很多用处。您可以将它们添加到强制Python以您想要的任何顺序计算子表达式。

In [15]

  1. total_height_meters = (hat_height_cm + my_height_cm) / 100
  2. print("Height in meters =", total_height_meters)

Out [15]

  1. Height in meters = 2.15

有关处理数字的内置函数

min和max分别返回它们的参数的最小值和最大值。

In [16]

  1. print(min(1, 2, 3))
  2. print(max(1, 2, 3))

Out [16]

  1. 1
  2. 3
  1. ### In [17]
  2. ``` python
  3. print(abs(32))
  4. print(abs(-32))

Out [17]

  1. 32
  2. 32

除了是Python的两种主要数值类型的名称之外,intfloat作为函数用于把参数转化为对应的类型。

In [18]

  1. print(float(10))
  2. print(int(3.33))
  3. # They can even be called on strings!
  4. print(int('807') + 1)

Out [18]

  1. 10.0
  2. 3
  3. 808

You Turn

现在机会交给你。开始你的第一个Python编程练习