数据类型及类型转换
数据类型 | 字面值 | 转换函数 | |
数值类型 | 整数 | -3,-1,0,10,15 | int(x):x可以是除复数外的数值类型及只含数字0-9的字符串。 |
浮点数 | 1.23,1.0,1.,0.2,.2 | float(x):x可以是除复数外的数值类型及只含数字0-9和小数点的字符串。 | |
布尔类型 | 只True 和False | bool(x):x可以是任意类型和对象,但一般只用于数值类型及“True”和“False”字符串的转换。数值类型的0、0.0、False、0+0j和字符串“False”是False外,其它都是True。 | |
复数 | 2j,1+2j,1+0j | conplex(x)目前未要求掌握 | |
字符串类型 | "ggtt",'t55', '''first line second line''' """first line second line""" | str(x):x可以把数值类型,它被转换为相应的字符串。 |
算术运算符
运算符 | 名称 | 概述 |
+ | 加 | 数值型操作数1(+,-,*)数值型操作数2=数值型结果:布尔类型可以认为只有1和0值的整数类型,当两个操作数都是整数类型,结果是整数类型,否则是浮点数类型。+(加)可以用于字符串连接(concat),字符串1+字符串2=字符串3。*(乘)可以用于字符串复制,字符串*整数n或整数n*字符串,相当于整数n个字符串相加。 |
- | 减 | |
* | 乘 | |
/ | 除 | 除法的结果一定是浮点数,即使两个操作数都是整数。 |
** | 乘方 | 只有第一操作数是整数,第二操作数是非负整数,结果才是整数,否则是浮点数。 |
// | 整除 | 整除商、除数、余数和被除数的关系:整除商*除数+余数=被除数,并不限于整数。两个操作数都是整数的情况整除商和余数才是整数,否则是浮点数。 |
% | 取余数 | |
优先级 | 第一级:**,第二级:*、/、//、%,第三级:+,-。有括号先括号,同级乘方(**)从右到左,其它从左到右。 | |
赋值运算符
类别 | 描述 |
简单赋值 | 等号(=)左边是一个变量,右边是一个值或已经赋值的变量,例如: a = 1(左边是变量,右边是值); b=a(左边是变量,右边是已赋值的变量)。 |
连续赋值 | 等号(=)左边是以逗号(,)多个变量,右边是以逗号分隔的同样多个值或已经赋值的变量,例如: a, b = 1, 2; b, c=a, 100。 |
比较运算符
比较运算符比较两个数据的大小,结果是布尔数据类型,即True或False。以两个整数 a, b = 5, 7为例,说明它们的运算规律。
运行符 | 功能描述 | 运算式 | 运算结果 |
> | 大于 | a > b | False |
< | 小于 | a < b | True |
>= | 大于等于 | a >= b | False |
<= | 小于等于 | a <= b | True |
== | 等于 | a == b | False |
!= | 不等于 | a != b | True |
假设a和b是精确度c的两个浮点数(例如 a, b, c = 1.23, 2.34, 0.01),那么它们可以按下面的表格进行比较运算。
对应运算符 | 功能描述 | 实现方法 |
> | 大于 | a>b+c/10 |
< | 小于 | a<b-c/10 |
>= | 大于等于 | a>b-c/10 |
<= | 小于等于 | b<b+c/10 |
== | 等于 | a>b-c/10 and a<b+c/10 |
!= | 不等于 | a<b-c/10 or a>b+c/10 |
记不住的话可以按下面的方法比较运算:
int(a/c) 比较运算符 int(b/c)。
逻辑运算符
比较运算符的操作数是一些可比较的数据(例如整数),而逻辑运算符的操作数一定是布尔型数值或可以用bool()转为布尔型的数据。“与”、“或”、“异或”(不在该级等考内容)和“非”四个逻辑运算。
运算符 | 描述 | 说明 |
and | 与 | 当两个操作数都为True时,结果才是True,否则是False。支持熔断,即首操作数为False时,不检查第二操作数,直接得到结果False。 True and True = True, True and False = False, False and True = False(熔断), False and False = False(熔断)。 |
or | 或 | 当两个操作数都为False时,结果才是False,否则是True。支持熔断,即首操作数为True时,不检查第二操作数,直接得到结果True。 True or True = True(熔断), True or False = True(熔断), False or True = True, False or False = False。 |
^ | 异或 | 当两个操作数不同时为True,否则为False。 |
not | 非 | 只有一个操作数(单目运算符): not True = False, not False = True。 |
当没有括号的情况下,哪个运算符的优先级高呢?
(1)True or True and False = True
(2)False and True ^ True = False
分析,(1)如果and的优先级不高于or,结果必为False,所以and优先级高于or;(2)如果^的优先级不高于and,结果必为True,所以^的优先级高于and;(3)not是单目操作符,优先级比双目运算符高,得到以下优先级:
() > not > ^ > and > or。
练习:判断下面逻辑算式的值,然后用Python验证:
(1)True or False and False
(2)False and True ^ False
(3)True or True and False
(4)False and True or False
(5)False or True and True
(6)False ^ False or False
记不清它们的优先级怎么办——加括号,例如:
(True or True) and False = False,
(False and True) ^ True = True。
输入输出内置函数
内置函数是可以直接使用的函数。与计算机交互,离不开输入函数input()和输出函数print()。
input()函数有两种调用方式:不含提示字符串参数input()和含提示字符串参加input("提示字符串")。
print()函数情况有点复杂,用下面的表格说明。
无尾 | 有尾 | |
单参数 | print(x):打印x后换行。 >>>print(123) 123 >>> >>>print("abc") abc >>> | print(x, end="?"):打印x后不换行,取而代之是打印end字符串。 >>> print(123, end="__end__") 123__end__>>> >>> print("abc", end="__end__") abc__end__>>> |
多参数 | print(x1, x2, x3, ...):打印x1后至少空一格再打印x2,如此类推,最后换行。 >>> print(123, "abc", 456.7) 123 abc 456.7 >>> | print(x1, x2, x3, ..., end="?"):打印x1后至少空一格再打印x2,如此类推,最后不换行,取而代之是打印end字符串。 >>> print(123, "abc", 456.7, end="__end__") 123 abc 456.7__end__>>> |
数据占位式格式化构建字符串
input()中的提示字符串和print()中的字符串参数都可以采用格式化构建。语法格式:
数据个数 | 语法(***占位符所在位置) |
单数据 | (1)"在这里***占个位。" % d (2)'在这里***占个位。' % d 注:d是数据或算式,如果d是算式,那么要在算式外,加上括号,例如: "在这里***占个位。" % (1+2)。 |
多数据 | (1)"在这里***占第一个位,这里***占第二个位。" % (d1, d2) (2)'在这里***占第一个位,这里***占第二个位。' % (d1, d2) 注:d1、d2是数据或算式。 |
整数
整数占位符是“%d”,例如下面的例子:
“%”与“d”之间可以有数字、小数点和正负号,各种数据的格式功能如下表(m是非负数、n是非零正整数):
占位符 | 格式功能描述 | 例子 |
%d | 按整数的实际长度打印。 | >>> s = "abc%d" % 123 >>> print(s) abc123 >>> s = "abc%d" % 12345678 >>> print(s) abc12345678 |
%nd %n.d | 如果整数不小于n位,按整数的实际长度打印,否则在前补足空格。 | >>> s = "abc%6d" % 123 >>> print(s) abc 123 >>> s = "abc%6d" % 12345678 >>> print(s) abc12345678 (其它占位符自行测试) |
%-nd %-n.d | 如果整数不小于n位,按整数的实际长度打印,否则在后补足空格。 | >>> s = "abc%-6ddef" % 123 >>> print(s) abc123 def >>> s = "abc%-6ddef" % 12345678 >>> print(s) abc12345678def (其它占位符自行测试) |
%0nd %.nd %m.nd | 注:0≤m≤n。 如果整数不小于n位,按整数的实际长度打印,否则在前补足0。除了%-0nd与%-nd相同外,其它在前加负号不影响格式。 | >>> s = "abc%06ddef" % 123 >>> print(s) abc000123def >>> s = "abc%-06ddef" % 123 >>> print(s) abc123 def >>> s = "abc%06ddef" % 12345678 >>> print(s) abc12345678def >>> s = "abc%-06ddef" % 12345678 >>> print(s) abc12345678def (其它占位符自行测试) |
%m.nd | 注:m>n。 如果整数不小于m位,按整数的实际长度打印;否则,如果整数不小于n位,按整数的实际长度打印,否则在前补足0至n 位,然后再在前补足空格使总长度达到m。 | >>> s = "abc%10.6ddef" % 123 >>> print(s) abc 000123def >>> s = "abc%10.6ddef" % 12345678 >>> print(s) abc 12345678def >>> s = "abc%-10.6ddef" % 123 >>> print(s) abc000123 def >>> s = "abc%-10.6ddef" % 12345678 >>> print(s) abc12345678 def >>> s = "abc%6.5ddef" % 12345678 >>> print(s) abc12345678def |
%+*d | 如果数据为正数则显示正号(+)。注:* 表示原格式数字。 | >>> s = "abc%+ddef" % 123 >>> print(s) abc+123def >>> s = "abc%+6ddef" % 123 >>> print(s) abc +123def (其它占位符自行测试) |
浮点数
浮点数占位符是“%f”,例如下面的例子:
“%”与“f”之间可以有数字、小数点和正负号,各种数据的格式功能如下表(m、n是非零正整数):
占位符 | 格式功能描述 | 例子 |
%f | 按浮点数的默认长度(小数点后六位,不够补0,超过四舍五入)打印。 | >>> s = "abc%f" % 1.23 >>> print(s) abc1.230000 >>> s = "abc%f" % 1.2345678 >>> print(s) abc1.234568 |
%nf | 如果浮点数的总长度(六位小数+小数点+整数部分)不小于n位,按浮点数的总长度打印,否则在前补足空格。 | >>> s = "abc%10f" % 1.23 >>> print(s) abc 1.230000 >>> s = "abc%10f" % 12345.678 >>> print(s) abc12345.678000 |
%-nf | 如果浮点数的总长度(六位小数+小数点+整数部分)不小于n位,按浮点数的总长度打印,否则在后补足空格。 | >>> s = "abc%-10fdef" % 1.23 >>> print(s) abc1.230000 def >>> s = "abc%-10fdef" % 12345.678 >>> print(s) abc12345.678000def |
%0nf | 如果浮点数的总长度(六位小数+小数点+整数部分)不小于n位,按浮点数的总长度打印,否则在前补足0。注:%-0nf与%-nf相同。 | >>> s = "abc%010fdef" % 1.23 >>> print(s) abc001.230000def >>> s = "abc%-010fdef" % 1.23 >>> print(s) abc1.230000 def >>> s = "abc%010fdef" % 12345.678 >>> print(s) abc12345.678000def >>> s = "abc%-010fdef" % 12345.678 >>> print(s) abc12345.678000def |
%m.f | 四舍五入到整数,如果该整数不小于m位,按该整数的实际长度打印,否则在前补足空格。 | >>> s = "abc%10.fdef" % 12345.678 >>> print(s) abc12346 def >>> s = "abc%4.fdef" % 12345.678 >>> print(s) abc12346def |
%-m.f | 四舍五入到整数,如果该整数不小于m位,按该整数的实际长度打印,否则在后补足空格。 | >>> s = "abc%-10.fdef" % 12345.678 >>> print(s) abc 12346def >>> s = "abc%-4.fdef" % 12345.678 >>> print(s) abc12346def |
%.nf %-.nf | 四舍五入到小数点后n位,不够位补0。 | >>> s = "abc%.2fdef" % 1.2345678 >>> print(s) abc1.23def >>> s = "abc%.5fdef" % 12345.678 >>> print(s) abc12345.67800def (自行测试%-.nf。) |
%m.nf | 四舍五入到小数点后n位,不够位补0。所得的小数总位数如果不小于m位,按该小数的实际长度打印,否则在前补足空格使总长度达到m。 | >>> s = "abc%10.2fdef" % 1.2345678 >>> print(s) abc 1.23def >>> s = "abc%10.5fdef" % 12345.678 >>> print(s) abc12345.67800def |
%-m.nf | 四舍五入到小数点后n位,不够位补0。所得的小数总位数如果不小于m位,按该小数的实际长度打印,否则在后补足空格使总长度达到m。 | >>> s = "abc%-10.2fdef" % 1.2345678 >>> print(s) abc1.23 def >>> s = "abc%-10.5fdef" % 12345.678 >>> print(s) abc12345.67800def |
%0m.nf | 四舍五入到小数点后n位,不够位补0。所得的小数总位数如果不小于m位,按该小数的实际长度打印,否则在前补足0使总长度达到m。%-0m.nf与%-m.nf相同。 | >>> s = "abc%010.2fdef" % 1.2345678 >>> print(s) abc0000001.23def >>> s = "abc%010.5fdef" % 12345.678 >>> print(s) abc12345.67800def (自行测试%-0m.nf。) |
%+*f | 如果数据为正数则显示正号(+)。注:* 表示原格式数字。 | >>> s = "abc%+fdef" % 1.23 >>> print(s) abc+1.230000def >>>s = "abc%+010.2fdef"%1.2345678 >>> print(s) abc+000001.23def (其它占位符自行测试) |
字符串
字符串的占位符是“%s”,例如下面的例子:
“%”与“s”之间可以有数字、小数点和负号(正号会被忽略,不起任何作用),各种数据的格式功能如下表(m、n是非零正整数):
占位符 | 格式功能描述 | 例子 |
%s | 按字符串实际长度打印。 | >>> s = "abc%sdef" % "ABCDE" >>> print(s) abcABCDEdef |
%ms | 如果字符串的实际长度不小于m,按实际长度打印,否则在前补充空格到m。 | >>> s = "abc%3sdef" % "ABCDE" >>> print(s) abcABCDEdef >>> s = "abc%10sdef" % "ABCDE" >>> print(s) abc ABCDEdef |
%-ms | 如果字符串的实际长度不小于m,按实际长度打印,否则在后补充空格到m。 | >>> s = "abc%-3sdef" % "ABCDE" >>> print(s) abcABCDEdef >>> s = "abc%-10sdef" % "ABCDE" >>> print(s) abcABCDE def |
% .ns | 如果字符串的长度超过n,则从头开始截取n个字符。%-.ns与%.ns一样。 | >>> s = "abc%.3sdef" % "ABCDE" >>> print(s) abcABCdef >>> s = "abc%.10sdef" % "ABCDE" >>> print(s) abcABCDEdef >>> s = "abc%-.3sdef" % "ABCDE" >>> print(s) abcABCdef |
%m.ns | 如果字符串的长度超过n,则从头开始截取n个字符。如果所得的字符串的实际长度不小于m,按实际长度打印,否则在前补充空格到m。 | >>> s = "abc%10.3sdef" % "ABCDE" >>> print(s) abc ABCdef >>> s = "abc%3.4sdef" % "ABCDE" >>> print(s) abcABCDdef |
%-m.ns | 如果字符串的长度超过n,则从头开始截取n个字符。如果所得的字符串的实际长度不小于m,按实际长度打印,否则在后补充空格到m。 | >>>s = "abc%-10.3sdef" % "ABCDE" >>>print(s) abcABC def >>> s = "abc%-3.4sdef" % "ABCDE" >>> print(s) abcABCDdef |
ASCII码与chr()/ord()内置函数
32到126是可见字符,其它是控制字符(不可见)。数字和英文字母也是按顺序编码的,因此我们只需记住下面的表就可以计算其它数字和英文字母的ASCII码了。
0aA的ASCII码表(需记住)
chr()函数把ASCII编码变为字符,例如chr(97)='a';ord()函数求取ASCII编码,例如ord("A")=65。无需知道编码直接转大小写的方法:把小写y变为大写Y:
chr(ord("A")+ord("y")-ord("a"))。
单行注释与多行文档
以#开头是单行注释,三对引号('''内容''' 或 """内容""")是文档(可以多行),可作为多行注释。
值、变量、赋值运算符、id()/type()内置函数
Python为程序在运行中,都为确定的值分配唯一一个确定的内存空间,因此在程序运行过程中,这个空间的地址(一个正整数)是不变的。为了使用方便,Python引入了变量,所谓变量就是值的地址字符索引——变量名称。变量名称需要符合一定的规范:由大小写英文字符和下划线构成,开头字母不能是数字。
值也叫数据,是有数据类型的,当变量与值建立索引时,变量与值有同样的数据类型。值与变量建立索引的过程就是赋值,如下图。
id()内置函数返回值或已赋值的变量的数据内存地址;type()则是返回数据类型。
连续赋值和变量交换
我们把赋值号左边是逗号分隔的多个变量,右边是同样多个的值和已赋值变量,这种方式是连续赋值。
两个变量交换的方法有两个:第三变量法和连续赋值法。
随机库函数randint()
与内置函数不同,使用前需要import。与其他边界条件不一样,函数参数是闭区间,即>=start and <=end。
浮点数比较运算
假设a和b是精确度c的两个小数,那么它们可以按下面的表格进行比较运算。
对应运算符 | 功能描述 | 实现方法 |
> | 大于 | a>b+c/10 |
< | 小于 | a<b-c/10 |
>= | 大于等于 | a>b-c/10 |
<= | 小于等于 | b<b+c/10 |
== | 等于 | a>b-c/10 and a<b+c/10 |
!= | 不等于 | a<b-c/10 or a>b+c/10 |
如果怕太麻烦或担心弄错,就转为整数后再进行比较运算:
int(a/c) 比较运算符 int(b/c)。
if条件语句
例子:
for循环语句
适用于循环次数确定的情况。
while循环语句
嵌套
当“语句块”的地方用上了if或循环语句,就称作嵌套了。
continue/break在循环语句中的作用
continue终止当次循环,进入下一次循环,如果是嵌套的循环中的continue,只终止嵌套的当次循环,外层循环不受影响;break终止循环,如果是嵌套的循环中的break,只终止嵌套的循环,外层循环不受影响。
等差数列、等比数列和裴波那契数列
相邻的项之差恒相等,这样的数列,就是等差数列,例如1,3,5,7,9,......。
相邻的项之间的比恒相等,这样的数列就是等比数列了。例如1,2,4,8,16......。
前两个数是1,第三个数开始是前两个数之和,这样的数列叫做裴波那契数列。
利用for循环遍历整数组合
用于求一些线性方程组的整数解,往往有两条等式,用一条方程作为循环变量的组合,另外一条方程作为附加条件,从而选出整数解。二元方程需要单层循环,三元方程需要二层循环,如此类推。鸡兔同笼问题、百僧分百馒等都属于这类问题。
典型问题
《简易计算器》、《一起来背古诗》、《闰年和平年》、《逢七过一》、《龟兔再赛跑》、《蚂蚁爬树》、《地主发金币》、《百僧分百馒》、《字符三角塔》、《甜品店的数字》。具体查看有关教程。