关于python:翻译实用的Python编程0102Helloworld

38次阅读

共计 5598 个字符,预计需要花费 14 分钟才能阅读完成。

目录 | 上一节 (1.1 Python) | [下一节 (1.3 数字)]()

1.2 第一个程序

本节探讨无关如何创立一个程序、运行解释器和调试的基础知识。

运行 Python

Python 程序始终在解释器中运行。

解释器是一个“基于控制台”的应用程序,通常从命令行 shell 启动。

python3
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

幼稚的程序员以这种形式应用解释器时通常都没有问题,但对于初学者来说,这种形式并不是那么敌对。您可能会应用一个为 Python 提供不同接口的环境,然而学会如何运行 Python 终端依然是一项有必要理解的技能。

交互模式

当启动 Python 时,能够进入一种交互的模式,在这种模式下,能够进行编程试验。

如果输出代码结束,这些代码将会马上运行。没有 edit/compile/run/debug 等流程。

>>> print('hello world')
hello world
>>> 37*42
1554
>>> for i in range(5):
...     print(i)
...
0
1
2
3
4
>>>

这就是所谓的“读取 - 求值 - 输入 - 循环”(译者注:简写为 REPL,也有人译为“交互式解释器”,正像 Python 这个词一样,为了更好地了解,这里不翻译。),对于代码调试和摸索十分有用。

暂停:如果您不晓得如何与 Python 进行交互,先进行您正在做的事件,而后弄清楚如何与 Python 进行交互。如果您正在应用的是集成开发环境(IDE), 它可能暗藏在一个菜单选项或者其它窗口前面。本课程的许多局部都假设您能与解释器进行交互。

让咱们认真看看 REPL 的元素:

  • >>> 提示符用于开始一个新的语句。
  • ... 提示符用于持续一个语句,输出一个空行示意全副输出完结,并运行所输出的代码。

... 提示符可能会显示,也可能不会显示,这取决于应用的环境。对于本课程,将 ... 提示符显示为空白,以便于剪切、粘贴示例代码。

下划线 _ 保留最初的后果。

>>> 37 * 42
1554
>>> _ * 2
3108
>>> _ + 50
3158
>>>

仅在交互模式下如此(指下划线 _ 保留最初的后果),永远不要在程序中应用这种形式。

创立程序

程序写在 .py 文件中。

# hello.py
print('hello world')

你能够应用你最喜爱的文本编辑器来创立这些 .py 文件。

运行程序

要执行程序,请在终端中应用 python 命令执行它。示例,在 Unix 零碎的命令行中是这样执行一个 Python 程序的:

示例,在 Unix 零碎的命令行中执行程序:

bash % python hello.py
hello world
bash %

或者,从 Windows shell 中执行一个 Python 程序:

C:\SomeFolder>hello.py
hello world

C:\SomeFolder>c:\python36\python hello.py
hello world

留神:在 Windows 零碎上,可能须要指定 Python 解释器的残缺门路,例如 c:\python36\python。然而,如果 Python 是以通常的形式装置的,可能只须要输出程序文件名即可,例如 hello.py

示例程序

让咱们解决以下的问题:

一天早上,您走进来,在芝加哥的西尔斯大厦旁的人行道上放 1 美元钞票。从那以后的每一天,您放的钞票都是前一天的两倍。这叠钞票须要多长时间能力超过塔的高度。

这是答案:

# sears.py
bill_thickness = 0.11 * 0.001 # Meters (0.11 mm)
sears_height = 442 # Height (meters)
num_bills = 1
day = 1

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)
print('Number of bills', num_bills)
print('Final height', num_bills * bill_thickness)

当执行 sears.py 程序的时候,会失去上面的输入:

bash % python3 sears.py
1 1 0.00011
2 2 0.00022
3 4 0.00044
4 8 0.00088
5 16 0.00176
6 32 0.00352
...
21 1048576 115.34336
22 2097152 230.68672
Number of days 23 
Number of bills 4194304 
Final height 461.37344

应用此程序作为指南,您能够学到许多重要的对于 Python 的外围概念。

语句

一个 Python 程序是由一系列的语句组成。

a = 3 + 4
b = a * 2
print(b)

每个语句以换行符终止。语句会一个接一个地执行,直到控制流达到文件的开端。

正文

正文是不会被解释器执行的文本。

a = 3 + 4
# This is a comment
b = a * 2
print(b)

正文由 # 号示意,并延长到行的开端。

变量

变量是一个值的名称。能够应用从 a 到 z 的字母(小写和大写都能够)示意,也能够应用下划线 _ 符号示意。数字也能够作为变量名的一部分,但第一个字符除外。

height = 442 # valid
_height = 442 # valid
height2 = 442 # valid
2height = 442 # invalid

类型

变量不须要应用值的类型进行申明。类型与右侧的值关联,而不是变量名。

height = 442           # An integer
height = 442.0         # Floating point
height = 'Really tall' # A string

Python 是动静语言。当程序执行时,变量的感知“类型”可能会产生扭转,这取决于赋给变量的以后值。

大小写敏感

Python 语言是大小写敏感的(即辨别大小写),大写字母和小写字母被认为是不同的字母。上面这些都是不同的变量:

name = 'Jake'
Name = 'Elwood'
NAME = 'Guido'

Python 语言自带的语句总是小写:

while x < 0:   # OK
WHILE x < 0:   # ERROR

循环

while 语句执行一个循环:

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)

只有 while 之后的表达式的值是 truewhile 上面缩进的语句就会被执行。

缩进

缩进用于示意放在一起的语句组。思考后面的示例:

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)

缩进将上面的语句分组为一个反复的操作:

    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

因为在开端的 print() 语句(即 print('Number of days', day))没有缩进,所以不属于循环。空行只是为了可读性,并不影响程序的执行。

缩进的最佳实际

  • 应用空格(spaces)而不是制表符(tabs)。
  • 每级应用四个空格。
  • 应用反对 Python 的编辑器。

Python 惟一的要求就是同一代码块内的缩进必须统一。例如,上面的缩进是谬误的:

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
        day = day + 1 # ERROR
    num_bills = num_bills * 2

条件语句

if 语句用来执行一个条件:

if a > b:
    print('Computer says no')
else:
    print('Computer says yes')

为了查看多个条件,能够应用 elif来增加额定的查看。

if a > b:
    print('Computer says no')
elif a == b:
    print('Computer says yes')
else:
    print('Computer says maybe')

输入

print 函数将传入的参数值输入成一行文本。

print('Hello world!') # Prints the text 'Hello world!'

也能够将变量进行输入。输入的文本将是变量的值,而不是变量的名字。

x = 100
print(x) # Prints the text '100'

如果将两个以上的值传递给 print 函数,它们在输入的时候被空格离开。

name = 'Jake'
print('My name is', name) # Print the text 'My name is Jake'

print() 函数总是将换行符放在最初。

print('Hello')
print('My name is', 'Jake')

下面的代码会输入如下的内容:

Hello
My name is Jake

额定的换行符能够被克制:

print('Hello', end=' ')
print('My name is', 'Jake')

下面的代码将会输入如下内容:

Hello My name is Jake

用户输出

要读取一行类型化的用户输出,能够应用 input() 函数:

name = input('Enter your name:')
print('Your name is', name)

input()函数向用户输入一句提醒,并且返回他们的响应。

这对于一个简短的程序、学习练习或者简略的调试是十分有用的。

但这并未广泛应用于理论的程序中。

pass 语句

有时候须要指定一个空的代码块,那么能够应用 pass 关键字。

if a > b:
    pass
else:
    print('Computer says false')

pass 语句也称为“无操作”语句,它什么也不做。它用作语句的占位符,可能当前会被增加。

习题

这是须要创立 Python 文件并且运行这个文件的第一组练习。从当初开始,假设你正在编辑的文件位于 practical-python/Work/ 目录。为了帮您找到适合的 地位,曾经创立了许多具备适合的文件名的空的启动文件。请找到在第一个练习中应用的Work/bounce.py 文件。

习题 1.5: 弹跳球

一个橡胶球从 100 米高的中央落下来,球每次撞到高空时弹到原来高度的 3/5。编写一个程序 bounce.py,输入一张表格,显示前 10 次反弹的高度。

程序生成的表格大略像上面这样:

1 60.0
2 36.0
3 21.599999999999998
4 12.959999999999999
5 7.775999999999999
6 4.6655999999999995
7 2.7993599999999996
8 1.6796159999999998
9 1.0077695999999998
10 0.6046617599999998

留神:如果应用 round() 函数,能够使输入略微简洁一些。请尝试应用 round() 函数将输入四舍五入到 小数点后 4 位。

1 60.0
2 36.0
3 21.6
4 12.96
5 7.776
6 4.6656
7 2.7994
8 1.6796
9 1.0078
10 0.6047

习题 1.6: 调试

上面的代码片段蕴含来自于 西尔斯大厦问题 的代码,它还有一个 bug:

# sears.py

bill_thickness = 0.11 * 0.001    # Meters (0.11 mm)
sears_height   = 442             # Height (meters)
num_bills      = 1
day            = 1

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = days + 1
    num_bills = num_bills * 2

print('Number of days', day)
print('Number of bills', num_bills)
print('Final height', num_bills * bill_thickness)

将下面显示的代码复制并粘贴到一个名为 sears.py的新程序中。当执行 sears.py 里的代码时,将会收到一条导致程序奔溃的错误信息。错误信息如下所示:

Traceback (most recent call last):
  File "sears.py", line 10, in <module>
    day = days + 1
NameError: name 'days' is not defined

读取错误信息是 Python 代码的重要组成部分。如果程序奔溃,则回溯音讯的最初一行是程序为什么奔溃的理论起因。在此(NameError: name 'days' is not defined)之上,你应该能够看到源代码片段(day = days + 1)、可辨认的文件名(sears.py)和错误代码的行号(line 10)。

  • 哪行是谬误的?
  • 谬误是什么?
  • 解决谬误。
  • 胜利运行程序。Run the program successfully

目录 | 上一节 (1.1 Python) | [下一节 (1.3 数字)]()
注:残缺翻译见 https://github.com/codists/practical-python-zh

正文完
 0