疯狂Python讲义学习笔记(含习题)之——变量和简单类型

Python是一门弱类型语言,弱类型包含两方面的含义:①所有的变量无须声明即可使用;②变量的数据类型可以随时改变。

一、注释

注释的作用是用来解释程序某些部分的作用和功能,提高程序的可读性。

Python源代码的注释有两种形式:

● 单行注释:使用(#)表示单行注释的开始,#号后面直到这行结束为止的代码都将被解释器忽略

● 多行注释:使用三个单引号或三个双引号将注释内容括起来。

注释本身对程序并没有任何影响,主要作用是给“别人看”,Python解释器会忽略这些注释内容。

 

二、变量

变量就像一个个小容器,用于“盛装”程序中的数据。

常量与变量的区别:常量一旦保存某个数据之后,该数据就不能发生改变;变量保存的数据可以多次发生改变,主要程序对变量重新赋值。

(=)赋值运算符,将值赋给变量。

查看变量类型可以使用type()函数

# 定义一个数值类型变量
a = 5
print(a)
# 重新将字符串赋值给a变量
a = 'Hello, Joe'
print(a)
print(type(a))

运行结果

5
Hello, Joe

print()函数详细语法格式:

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

value参数可以接受任意多个变量或值

user_name = 'Joe'
user_age = 40
# 同时输出多个变量和字符串
print("用户名:", user_name, "年龄:", user_age)

输出结果:

用户名: Joe 年龄: 40

默认情况下,Python使用空格隔开多个变量,如果希望改变默认的分隔符,可以通过指定sep参数进行设置。

print("用户名:", user_name, "年龄:", user_age, sep="|")

输出结果:

用户名:|Joe|年龄:|40

默认情况下,print()函数的end参数默认值为'\n'因此,print()函数输出之后总会换行,要改变这儿默认行为,可以重设end参数,如:

print(40, '\t', end="")
print(50, '\t', end="")
print(60, '\t', end="")

输出结果:

40      50      60

print()函数的file参数默认值sys.stdout,代表了希望标准输出,一般情况下是屏幕,也可以更改该值让程序将结果输出到文件。如:

f = open("poem.txt", "w")    # 打开文件以便写入
print('两情若是久长时', file=f)
print('又岂在朝朝暮暮', file=f)
f.close()

print()函数的flush参数用于控制输出缓存,该参数一般保持False即可,这样可以获得较好的性能。

Python语言的标识符必须以字母、下划线(_)开头,后面可以跟任意数目的字母、数字、和下划线(_)。此处的字母并不局限于26个英文字母,可以包含中文字符、日文字符等。

Python2.x对中文支持较差,如果要在Python2.x程序中使用中文字符或中文变量,则需要在python源程序的第一行增加"# coding:utf-8",然后将源文件保存为UTF-8字符集。

Python语言区分大小写,因此abc和Abc是两个不同的标识符。

标识符规则:

● 标识符可以由字母、数字、下划线(_)组成,其中数字不能打头。

● 标识符不能是Python关键字,但可以包含关键字。

● 标识符不能包含空格。

表2.1 Python关键字

False None True and as
assert break class continue def
del elif else except finally
for from global if import
in is lambda nonlocal not
or pass raise return try
while with yield    

实际上并不需要记忆关键字列表,开发时可以随时通过程序来查看Python所包含的关键字,如下所示:

# 导入keyword模块
import keyword
# 显示所有关键字
print(keyword.kwlist)

输出结果:

['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

表2.2 Python内置函数

abs() all() any() basestring() bin()
bool() bytearray() callable() chr() classmethod()
cmp() compile() complex() delattr() dict()
dir() divmod() enumerate() eval() execfile()
file() filter() float() format() frozenset()
getattr() globals() hasattr() hash() help()
hex() id() input() int() isinstance()
issubclass() iter() len() list() locals()
long() map() max() memoryview() min()
next() object() oct() open() ord()
pow() print() property() range() raw_input()
reduce() reload() repr() reversed() zip()
round() set() setattr() slice() sorted()
staticmethod() str() sum() super() tuple()
type() unichr() unicode() vars() xrange()
Zip() __import__() apply() buffer() coerce()
intern        

以上内置函数的名字也不应该作为标识符,否则python的内置函数会被覆盖。

 

三、数值类型

1.整型

Python的整型支持None值(空值)

Python的整型数值有4种表示形式。

● 十进制形式:最普通的整数就是十进制形式的整数。

● 二进制形式:以0b或者0B开头的整数就是二进制形式的整数。

● 八进制形式:以0o或者0O开头的整数就是八进制形式的整数

● 十六进制形式:以0x或者0X开头的整数就是十六进制形式的整数,其中10~15分别以a~f来表示

为了提高数值(包括浮点型)的可读性,Python3.x允许为数值(包括浮点型)增加下划线作为分隔符。这些下划线不会影响数值本身。

# 在数值中使用下划线
one_million = 1_000_000
print(one_million)
prince = 234_234_234  # price实际的值为234234234
android = 1234_1234   # android实际的值为12341234

2. 浮点型

Python浮点数有两种表示形式:

● 十进制形式:这种形式就是平常简单的浮点数,例如:5.12、512.0、0.512 。浮点数必须包含一个小数点,否则会被当成整数处理。

● 科学计数形式:如:5.12e2(5.12 × 102)、5.12E2

3. 复数

Python可以支持复数,复数的虚部用j或J来表示。

Python的cmath模块支持复数运算。

 

四、 字符串入门

字符串的意思就是“一串字符”

字符串既可以用单引号括起来,也可以用双引号括起来。

Python允许使用反斜线(\)将字符串中的特殊字符进行转义。

将数值转换成字符串,可以使用str()或repr()函数。

input()函数用于向用户生成一条提示,然后获取用户输入的内容,而input()函数总是返回一个字符串。

Python2中使用raw_input()函数实现同样的功能。

Python不是格式自由的语言,因此Python程序的换行、缩进都有其规定的语法。

原始字符串以“r”开头,原始字符串不会把反斜线当成特殊字符。

如果原始字符串包含引号,程序同样需要对引号进行转义(否则Python同样无法对字符串的引号精确配对),但此时用于转义的反斜线会变成字符串的一部分。如:

>>> # 原始字符串包含的引号,同样需要转义
>>> s2 = r'"Let\'s go", said Charlie'
>>> print(s2)
"Let\'s go", said Charlie

Python3新增了tytes类型,用于代表字节串。字符串(str)由多哦字符组成,以字符为单位进行操作;字节串(bytes)由多个字节组成,以字节为单位进行操作。

bytes对象只负责以字节(二进制格式)序列来记录数据。采用合适的字符集,字符串可以转换为字节串,字节串也可以恢复成对应的字符串。

由于bytes保存的就是原始的字节(二进制格式)数据,因此byes对象可用于在网络上传输数据,也可用于存储各种二进制格式的文件,比如图片、音乐等文件。

将一个字符串转换成bytes对象,有三种方式:

● 如果字符串内容都是ASCII字符,则可以通过直接在字符串之前添加b来构建字节串值。

● 调用bytes()函数(其实是bytes的构造方法)将字符串按指定字符集转成字节串,默认使用UTF-8字符集。

● 调用字符串本身的encode()方法将字符串按指定字符集转换成字节串,默认使用UTF-8字符集。

计算机底层有两个基本概念:位(bit)和字节(byte),其中bit代表1位,要么是0,要么是1,byte代表1字节,1字节包含8位。

在字节串中每个数据单元都是字节,也就是8位,其中每4位(相当于4位二进制数,最小值为0,最大值为15)可以用一个十六进制数来表示,因此每字节需要两个十六进制数表示。

可以调用bytes对象的decode()方法将其解码成字符串。

 

表2.3 Python支持的转义字符

转义字符 说明
\b 退格符
\n 换行符
\r 回车符
\t 制表符
\" 双引号
\' 单引号
\\ 反斜杠

 

Python提供了“%”对各种类型的数据进行格式化输出:

price = 108
print("the book's price is %s" % price)

格式化字符串中的“%s”被成为转换说明符,作用相当于一个占位符。

表2.4 转换说明符

转换说明符 说明
d,i 转换为带符号的十进制形式的整数
o 转换为带符号的八进制形式的整数
x 转换为带符号的十六进制形式的整数
X 转换为带符号的十六进制形式的整数
e 转换为科学计数法表示的浮点数(e小写)
E 转换为科学计数法表示的浮点数(E大写)
f, F 转换为十进制形式的浮点数
g 智能选择使用f或者e格式
G 智能选择使用F或者E格式
r 使用repr()将变量或表达式转换为字符串
s 使用str()将变量或表达式转换为字符串

可以为转换说明符指定最小宽度:

num = -28
print("num is: %6i" % num)
print("num is: %6d" % num)
print("num is: %6o" % num)
print("num is: %6x" % num)
print("num is: %6X" % num)
print("num is: %6s" % num)

输出结果:

num is:    -28
num is:    -28
num is:    -34
num is:    -1c
num is:    -1C
num is:    -28

默认情况下,转换出来的字符串总是右对齐的,不够宽度时左边补充空格。可以在最小宽度之前添加一个标志来改变这种行为,python支持如下标志:

● -:指定左对齐

● +:表示数值总要带着符号(正数带“+”,负数带“-”)

● 0:表示不补充空格,而是补充0

对于浮点数,Python还允许指定小数点后的数字位数,对于字符串,Python允许指定转换后字符串的最大字符数,这个该精度值被放在最小宽度之后:

my_value = 3.001415926535
# 最小宽度为8,小数点后保留3位
print("my_value is: %8.3f" % my_value)
# 最小宽度为8,小数点后保留3位,左边补0
print("my_value is: %08.3f" % my_value)
# 最小宽度为8,小数点后保留3位,左边补0,始终带符号
print("my_value is: %+08.3f" % my_value)
the_name = "Charlie"
# 值保留3个字符
print("the name is: %.3s" % the_name)
# 只保留2个字符,最小宽度为10
print("the name is: %10.2s" % the_name)

输出结果:

my_value is:    3.001
my_value is: 0003.001
my_value is: +003.001
the name is: Cha
the name is:         Ch

Python是“自带文档”的,使用dir()函数列出指定类或模块包含的全部内容(包括函数、方法、类、变量等),如:

>>> dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

使用help()函数查看某个函数或方法的帮助文档:

>>> help(str.title)
Help on method_descriptor:
​
title(self, /)
    Return a version of the string where each word is titlecased.

    More specifically, words start with uppercased characters and all remaining
    cased characters have lower case.

str类中大小写先关常用方法:

● title():将每个单词的首字母改为大写

● lower():将整个字符串改为小写

● upper():将整个字符串改为大写

str类中删除空白的方法:

● strip():删除字符串前后的空白

● lstrip():删除字符串前面(左边)的空白

● rstrip():删除字符串侯建(右边)的空白

str类中查找、替换相关方法

● startswith():判断字符串是否以指定子串开头

● endswith():判断字符串是否以指定子串结尾

● find():查找指定子串在字符串中出现的位置,如果没有找到则返回-1

● index():查找指定子串在字符串中出现的位置,如果没有找到引发ValueError异常。

● replace():使用指定子串替换字符串中的目标子串

● translate():使用指定的翻译映射表对字符串执行替换

Python为str提供了maketrans()方法,可以方便的创建翻译映射表:

>>> table = str.maketrans('abt', 'αβτ')
>>> table
{97: 945, 98: 946, 116: 964}

Python2.x中str类没有maketrans()方法,需要导入string模块,然后调用maketrans()函数。

str类中的分割、连接方法

● split():将字符串按指定分割符分割成多个短语

● join():将多个短语连接成字符串

 

五、运算符

运算符是一种特殊的符号,用来表示数据的运算、赋值和比较等。可分为以下几种:

● 赋值运算符

● 算术运算符

● 位运算符

● 索引运算符

● 比较运算符

● 逻辑运算符

1. 赋值运算符

Python使用“=”作为赋值运算符

2. 算术运算符

+、-、*、/、//、%

3. 位运算符

&、|、^、~、<<、>>

表2.5 位运算符的运算法则

第一个操作数 第二个操作数 按位与 按位或 按位异或
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

补码计算规则:整数的补码和原码相同,负数的补码是其反码加1

4. 扩展后的赋值运算符

+=、-=、*=、/=、//=、%=、**=、&=、|=、^=、<<=、>>=

5. 索引运算符

索引运算符就是方括号[],可以使用单个索引值也可以使用范围以及步长。

6. 比较运算符与bool类型

Python的bool类型只有两个值True和False

>、>=、<、<=、==、!=、is、is not

7. 逻辑运算符

and、or、not

8. 三目运算符

True_statements if expression else False_statements

运算规则:先对逻辑表达式expression求值,如果值为True,则执行并返回True_statements,否则执行并返回False_statement的值。

Python允许在三目运算符的True_statements或False_statements中放置多条语句,有两种方式:

● 以英文逗号分隔:每条语句都会执行,程序返回多条语句的返回值组成的元组

● 以英文分号分隔:每条语句都会执行,程序只返回第一条语句的返回值

a = 5
b = 3
# 以逗号分隔
st = print("crazyit"), 'a大于b' if a > b else 'a不大于b'
print(st)
# 以分号分隔
st = print("crazyit"); x = 20 if a > b else 'a不大于b'
print(st)
print(x)

输出结果:

crazyit
(None, 'a大于b')
crazyit
None
20

9. in运算符

用于判断某个成员是否位于序列中。

10. 运算符的结合性和优先级

不要把一个表达式写得过于复杂,可以分几步来完成一个复杂的表达式

不要过多的依赖运算符的优先级来控制表达式的执行顺序,尽量使用“()”来控制表达式的执行顺序。

 

练习题:

1. 使用数值类型声明多个变量,并使用不同方式为不同的数值类型的变量赋值。熟悉每种数据类型的赋值规则和表示方式。

int_value = 10
bin_value = 0b12
oct_value = 0o23
hex_value = 0xff
float_value = 10.23
e_value = 3.14e2
plural_value = 10 + 4.3j

2 . 使用数学运算符、逻辑运算符编写40 个表达式,先自行计算各表达式的值,然后通过程序输出这些表达式的值进行对比,看看能否做到一切尽在掌握中。

a = 3
b = 5
c = 'hello'
d = 'world'
e = 0.2
f = 0.4
g = True
h = False
​
result = a + b  # 8
print(result)
result = a - b   # -2
print(result)
result = a * b   # 15
print(result)
result = a / b   # 0.6
print(result)
result = a // b   # 0
print(result)
result = a % b    # 2
print(result)
result = a ** b   # 243
print(result)
result = c + d    # helloworld
print(result)
result = g and h   # False
print(result)
result = g or h    # True
print(result)
result = not g     # False
print(result)
result = e + f     # 0.6
print(result)
result = e - f     # -0.2
print(result)
result = e * f     # 0.08
print(result)
result = e / f     # 0.5
print(result)
result = e // f    # 0.0
print(result)
result = e ** f    # 0.5
print(result)
result = e % f     # 0.2
print(result)

3. 从标准输入读取两个整数并打印两行,其中第一行输出两个整数的整除结果;第二行输出两个整数的带小数的除法结果。不需要执行任何四舍五入或格式化操作。

num1 = input('请输入第一个整数:')
num2 = input('请输入第二个整数:')
value1 = int(num1) // int(num2)
value2 = int(num1) / int(num2)
print('第一个数整除第二个数的结果为:', str(value1))
print('第一个数除以第二个数的结果为:', str(value2))

4. 从标准输入读取两个整数并打印三行,其中第一行包含两个数的和;第二行包含两个数的差(第一个数减第二个数):第三行包含两个数的乘积结果。

num1 = int(input('请输入一个整数:'))
num2 = int(input('请输入另一个整数:'))
print('两个数的和为:', num1 + num2)
print('两个数的差为:', num1 - num2)
print('两个数的积为:', num1 * num2)

5. 用户输入一个字符串和一个子串,程序必须打印出给定子串在目标字符串中出现的次数。字符串遍历将从左到右进行,而不是从右到左。例如给定‘ABCDCDC' 和'CDC',程序输出“ 2 ”。

s1 = input('请输入一个字符串:')
s2 = input('请输入一个子串:')
s1_len = len(s1)
s2_len = len(s2)
count = 0
for i in range(s1_len - 1):
    if s1[i:i+s2_len] == s2:
        count += 1
print('子串在字符串中出现的次数:%d' % count)

6. 给定任意一个整数,打印出该整数的十进制、八进制、十六进制(大写)、二进制形式的字符串。

num = 14
print('十进制形式为:%d' % num)
print('二进制形式为: %s' % bin(num))
print('八进制形式为:%o' % num)
print('十六进制形式为: %x' % num)
print('十六进制形式为(大写): %X' % num)

7. 通过学习我们知道str是不可变的,本程序要实现一个功能:用户输入一个字符串,修改该字符串中哪个位置的字符,程序就会输出修改后的结果。比如用户输入:

’ fkjava. org ’

6 -

程序将会输出: ’fkjava-org’ 。

s1 = input('请输入一个字符串:')
index = int(input('请输入一个位置:'))
s2 = input('请输入替代字符:')
s_new = s1[:index] + s2 + s1[index+1:]
print(s_new)

 

你可能感兴趣的:(Python3学习)