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

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

一、注释

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

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

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

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

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

 

二、变量

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

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

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

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

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

运行结果

5
Hello, Joe
<class 'str'>

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关键字

FalseNoneTrueandas
assertbreakclasscontinuedef
delelifelseexceptfinally
forfromglobalifimport
inislambdanonlocalnot
orpassraisereturntry
whilewithyield  

实际上并不需要记忆关键字列表,开发时可以随时通过程序来查看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 位运算符的运算法则

第一个操作数第二个操作数按位与按位或按位异或
00000
01011
10011
11110

补码计算规则:整数的补码和原码相同,负数的补码是其反码加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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值