Chapter 2
2.2 编写一个简单的程序
算法:算法描述的是如何通过列出要进行的动作和这些动作的执行顺序来解决一个问题。
变量:变量是一个指向存储在内存中某个值的名字。应该尽量选择描述性的名字。
程序清单2-1
print("The area for the circle of radius", radius, "is", area)
在radius和is后面会自动补上空格,无需自行补充。(详细内容见3.3.5)不同于C/C++。补空格的操作是在连接变量radius时完成的!仅输入前面的字符串,并不会自动添加空格。
变量类型:Python会通过赋值给变量来==自动判定==数据类型。
2.3 从控制台读取输入
可以利用input()
函数提示用户输入一个值,然后将它赋给变量variable:
variable = input("Enter a value: ")
注意,输入的值是一个字符串!可以使用eval()
函数来将其转换为一个数值并求值。
程序清单2-2
radius = eval(input("Enter a value for radius: "))
等价于
s = input("Enter a value for radius: ") # Read input as a string radius = eval(s) # Convert the string to a number
在用户输入一个数字并按下Enter键后,这个数字就被读取并赋给radius。
程序清单2-3
number = eval(input("Enter the first number: "))
如果用户输入的不是数字,该程序会以运行时错误终止。
print("The average of", number1, number2, number3, "is", average)
Python扫描到第二行发现后括号,语句才结束,这两句==隐式会合==了。
在某些情况下,Python解释器不能确定在多行中哪里是语句的结尾。可以在一行的结尾处放置一个继续符号
\
来高速解释器这条语句继续到下一行。例如:
sum = 1 + 2 + 3 + 4 + \ 5 + 6
等价于
sum = 1 + 2 + 3 + 4 + 5 + 6
2.4 标识符
标识符用于命名程序中标识像变量和函数这样的元素。
标识符命名规则:
- 标识符是由字母、数字、下划线
_
构成的字符序列。- 标识符必须以字母或者下划线
_
开头,不能以数字开头。- 标识符不能是关键字1。关键字(保留字)在Python中有特殊意义。
- 标识符可以为任意长度。
标识符注意事项:
- 因为Python大小写敏感,所以area,Area,AREA是不同的标识符。
- 描述性标识符可以使程序更加易读,使用完整的单词更具描述性。
- 通常,变量名使用小写字母,如果变量名包含多个单词,则第一个单词小写,后面每个单词的首字母大写。(骆驼拼写法)
2.5 变量、赋值语句和赋值表达式
变量用于引用程序中可能会变化的值,它是引用存储在内存中的值的名字。
![变量](.\Chapter 2\变量.png)
将一个值赋给变量的语句被称为赋值语句。在Python中,等号=
被用作赋值运算符。
variable = expression
一个表达式表示一个涵盖到值、变量和运算符结合到一起并求值的计算。为了将值赋给变量,你必须将变量名放在赋值运算符的左边。如果一个值赋给多个变量,可以使用如下语法:
i = j = k = 1
等价于
k = 1
j = k
i = j
这反映了赋值运算符具有右结合性。
每个变量都有它的范围(作用域)。变量的范围是程序可以引用到变量的部分。变量在使用前必须被创建。
2.6 同时赋值
Python支持同时赋值:
var1, var2, var3, ..., varn = exp1, exp2, exp3, ..., expn
例如,交换变量x和y的值,可使用如下代码:
x, y = y, x
等价于
x = 1
y = 2
temp = x # introduce the intermediate variable temp
x = y
y = temp
2.7 定名常量
定名常量(named constant)是一种表示定值的标识符,它代表永远不变的固定数据。习惯上,全部使用大写字母来命名常量。
使用常量有三个好处:
- 你不必为使用一个值多次而重复性输入。
- 如果你需要修改常量的值,你只需要在源代码一处进行修改。
- 描述性名字会提高程序的易读性。
2.8 数值数据类型和运算符
Python中有两种数值类型(整数和浮点数)。供数值数据类型所使用的运算符包括标准的算术符号。
运算符 | 含义 | 说明 |
---|---|---|
+ | 加 | 二元运算符。也可用作正号,此时为一元运算符。 |
- | 减 | 二元运算符。也可用作负号,此时为一元运算符。 |
* | 乘 | 二元运算符。 |
/ | 除 | 二元运算符。执行浮点除法,产生浮点数结果。 |
// | 整除(商的整数部分) | 二元运算符。执行整数除法(操作数可以是浮点型),产生整数结果(结果可以是浮点型)。 |
** | 幂 | 二元运算符。注意,值太大会导致上溢。 |
% | 求余 | 二元运算符。操作数和结果都可以是浮点型。 |
上表都是二元运算符,有两个操作数[^2]。
2.8.3 科学计数法
1.23456×102
可用Python表示为1.23456E2
或1.23456E+2
;
1.23456×10−2
可用Python表示为1.23456E-2
.其中,E大小写均可。
2.9 计算表达式和运算符优先级
Python表达式计算方式与算术表达式一样。
运算符优先级:
- 指数运算
**
- 乘
**
,除/
,整除//
,求余%
。本级别运算符具有左结合性- 加
+
,减-
。本级别运算符具有左结合性
2.10 增强型赋值运算符
运算符+
,-
,*
,/
,//
,%
,**
可以与赋值运算符=
组合在一起构成简洁运算符,它们和=
之间==没有空格==。
count = count + 1
等价于:
count += 1
增强型赋值运算符:
运算符 | 举例 | 等价 |
---|---|---|
+= | i += 8 | i = i + 8 |
-= | i -= 8 | i = i - 8 |
*= | i *= 8 | i = i * 8 |
/= | i /= 8 | i = i / 8 |
//= | i //= 8 | i = i // 8 |
%= | i %= 8 | i = i % 8 |
**= | i **= 8 | i = i ** 8 |
2.11 类型转换和四舍五入
如果算数运算符的操作数之一是浮点数,那么结果就是浮点数。
可以使用int(value)
函数来返回一个浮点值的整数部分,结果是整型。也可以使用round(value)
函数对数字进行四舍五入,结果是整型。它们都不会改变原变量的值。
函数int()
和eval()
都可以将整数字符串转换为整数。但是,int()
只能用于整型数值,eval()
可以用于整型数值和浮点型数值。另外,eval()
不能用于有前导零的值,相对地,int()
可以处理此类值。
2.12 实例研究:显示当前时间
可以使用time模块中的time()
函数来获取当前的系统时间。time.time()
返回的是距UNIX时间点开始的以毫秒为精度的秒数。
2.13 软件开发流程
程序开发周期是一个包括明确需求、分析、设计、实现、测试、部署和维护的多步骤过程。
明确需求
明确需求是寻求理解软件要解决的问题和建立关于软件系统需要完成任务的详细文档的一个正式流程。这个阶段需要用户和开发者之间进行紧密的交互。
系统分析
系统分析是指分析数据流和识别系统的输入和输出。它帮你确认哪个输入最早的,然后帮你搞清楚要产生输出需要哪些输入数据。
系统设计
系统设计是设计从输入获取输出的过程。这一阶段涉及很多层的抽象,将问题分解为可管理的几个组件,然后为每个组件的实现设计策略。你可以将每个组件看作一个完成系统中特定功能的子系统。系统分析和设计的本质是输入、处理和输出(IPO)。
实现过程
实现过程涉及将系统设计翻译成程序。要编写代码,自测和调试。
测试过程
测试过程确保代码满足需求规范并且清除程序bug。
部署过程
部署过程是使程序可以使用。分为部署客户端和服务端。
维护过程
维护过程涉及产品的更新和升级。
- python的关键字列表使用函数
keyword.kwlist
列出。
[^2]: 操作数是被运算符操作的对象。 ↩