Fork me on GitHub

Python 基础(一)

1. 注释

  • 单行注释:
# 这是一个单行注释
print("Hello Wrold!")
  • 多行注释:
'''
这是
一个
多行注释
'''

2. 算术运算符

# 加法
print(1 + 1)

# 减法
print(20 - 12)

# 乘法
print(10 * 23)

# 除法
print(22 / 2)

# 取整数,返回除法的整数部分(商)。下面的结果为4
print(9 // 2)

# 取余数
print(9 % 2)

# 幂运算
print(2 ** 3)

3. 数据类型

  1. 在 Python 中, 定义变量时,不需要指定变量的类型。在运行过程中,Python 解释器会根据赋值语句
    等号右侧的数据自动推导出变量中保存数据的准确类型。
  2. type(变量名) 查看当前变量的类型。
  3. 数据类型分类:数字型和非数字型
    • 数字型:
      • 整型(int)(在 Python2.X 中,整型分为 int,long
      • 浮点型(float)
      • 布尔型(bool)
      • 复数型(complex),主要用于科学计算。
    • 非数字型:
      • 字符串
      • 列表
      • 元组
      • 字典
# 字符串变量之间可以使用"+"进行拼接
a = "Hello "
b = "World!"
print(a + b)

# 字符串变量可以使用"*"进行重复
print("A" * 10)

# 数字型变量和字符串之间不能进行其他计算
# 下面的输出会报错
print("A" + 10)

3.4 变量的格式化输出

  • %被称为格式化操作符,专门用于处理字符串中的格式;
  • %s表示字符串;
  • %d表示有符号十进制整数,%06d表示输出的整数显示位数,不足的地方使用0
  • %f表示浮点数,%.2f表示小数点后只显示两位;
  • %%输出%;
# 输出学号 000021, 地址是: 江苏南京
num = 21
address = "江苏南京"
print("我的学号是:%06d,地址是:%s" % (num, address))

# 输出百分比: 12.45%
percent = 12.45
print("所占百分比:%.2f%%" % percent)

3.5 变量的命名

  • 标识符就是程序中定义的变量名,函数名;
  • 标识符可以由字母,下划线和数字组成;
  • 不能以数字开头;
  • 不能与关键字重名;
  • Python中的标识符是区分大小写的;
  • Python中,如果变量名需要由多个单词组成时,可以按照以下方式命名:
    • 每个单词都使用小写字母;
    • 单词与单词之间使用下划线连接;
    • 例如: stu_name,stu_address,stu_num

4. 逻辑语句

4.1 if 语句

# 格式:
if 条件1 and 条件2:
    条件1成立时,需要执行的操作
elif 条件3 or 条件4:
    条件2成立时,需要执行的操作
else:
    条件不成立时,需要执行的操作

# 注意:代码的缩进为一个Tab键,或者 4 个空格 -- 建议使用空格
#      在 Python 开发中, Tab 和 空格不要混用!


# 示例: 三元运算符
# 格式: [on_true] if [expression] else [on_false]

a = 1
b = 2
c = a if a > 1 else b  # 如果a大于1,c=a, 否则 c=b

4.2 循环语句

# while 循环
# 打印 5 遍 Hello Python
i = 1
while i <= 5:
    print("Hello Python")
    i += 1

# 示例一:
# 在控制台连续输出五行 *, 每一行星号的数量依次递增
row = 1
while row <= 5:
    print("*" * row)
    row += 1

# 第二种方式:
# 备注: 向控制台输出内容结束之后,不会换行
#      print("*", end="")
row = 1
while row <= 5:
    col = 1
    while col <= row:
        print("*", end="")
        col += 1

    # 表示在一行星星输出完成之后,添加换行!
    print("")

    row += 1

# 示例二: 输出九九乘法表
# 备注: 字符串中的转义字符
#   \t : 在控制台输出一个制表符,协助在输出文本时,垂直方向保持对齐
#   \n : 在控制台输出一个换行符
row = 1
while row <= 9:
    col = 1
    while col <= row:
        print("%d * %d = %d" % (col,row,col * row), end="\t")
        col += 1

    print("")

    row += 1


# 示例三:
counter = 0

while counter < 3:
    username = input("Username:")
    password = input("Passwod:")
    if username == _user and password = _passwd:
        print("Welcome %s login ..." % _user)
        break
    else:
        print("Invalid username or password")
    counter += 1
else:
    print("输入次数超出限制!")

5. 高级变量类型

  • 列表
  • 元组
  • 字典
  • 字符串

5.1 列表(List)

  • 列表用[]定义,数据之间使用,分隔;
  • 列表中可以存储不同类型的数据,但是,在开发中,列表经常用于存储相同类型的数据;
  • 列表的索引从0开始;
5.1.1 列表的常见操作(方法):
  • 增加:
    • insert(索引, 数据): 在指定位置插入数据;
    • append(数据): 在末尾追加数据;
    • extend(列表2): 将列表2的数据追加到列表;
  • 修改:
    • 列表[索引] = 新数据: 修改指定索引的数据;
  • 删除:
    • del 列表[索引]: 删除指定索引的数据;
    • 列表.remove(数据): 删除第一个出现的指定数据;
    • 列表.pop(): 删除末尾数据;
    • 列表.pop(索引): 删除指定索引数据;
    • 列表.clear: 清空列表;
  • 统计:
    • len(列表): 获取列表长度;
    • 列表.count(数据): 数据在列表中出现的次数;
  • 排序:
    • 列表.sort(): 升序排序;
    • 列表.sort(reverse=True): 降序排序
    • 列表.reverse(): 逆序(反转)
# 列表的循环遍历
name_list = ["zhangsan","lisi","wangwu","zhaoliu"]

for name in name_list:
    print(name)

# 向列表中添加元素
t_list = [1, 2]
t_list.extend([3, 4]) # t_list = [1, 2, 3, 4]
t_list.append([5, 6]) # t_list = [1, 2, 3, 4, [5, 6]]

5.2 元组(Tuple)

  • 元组表示多个元素组成的序列,元组中的元素不能修改;
  • 元组通常用于保存不同类型的数据;
  • 元组使用()定义;
  • 元组中只包含一个元素时,需要在元素后面添加逗号:a_tuple = (3,)
  • 元组的常见方法:
    • 元组.index(数据): 获取数据在元组中的索引;
    • 元组.count(数据): 获取数据在元组中出现的次数;
  • 元组和列表之间的转换:
    • List(元组) : 把元组转换成列表;
    • tuple(列表): 把列表转换成元组;
  • 元组应用场景:
    • 函数的参数和返回值;
    • 让列表不可以被修改;
# 格式化字符串后面的 () 本质上就是元组
print("%s 年龄是 %d, 身高是 %.2f" % ("张三", 12, 1.53))

stu_info = ("张三", 12, 1.53)
print("%s 年龄是 %d, 身高是 %.2f" % stu_info)

stu_info = "%s 年龄是 %d, 身高是 %.2f" % ("张三", 12, 1.53)
print(stu_info)

5.3 字典(Directory)

  • 字典通常用于存储描述一个物体的相关信息;
  • 字典使用{}定义;
  • 字典使用键值对存储数据,键值对之间使用,分隔;
    • 键 和 值之间使用:分隔;
    • 键必须是唯一的;
    • 值可以区任何数据类型,但键只能使用字符串,数字或元组(不可变数据类型);
  • 字典和列表的区别:
    • 列表是有序的对象集合;
    • 字典是无序的对象集合;
  • 字典的常见操作:
    • 字典.pop(key): 删除键值对;
    • len(字典): 统计键值对数量;
    • 字典1.update(字典2): 合并字典;如果被合并的字典中包含已经存在的键值对,会覆盖原有的键值对;
    • 字典.clear(): 清空字典;

5.4 字符串

  • 可以使用一对双引号或者一对单引号定义一个字符串;
  • 虽然可以使用\"或者\'做字符串的转义,但是在实际开发中:
    • 如果字符串内部需要使用双引号,可以使用单引号来定义字符串;
    • 如果字符串内部需要使用单引号,可以使用双引号来定义字符串;
  • 大多数编程语言都是用 " 来定义字符串;
  • 字符串的常用操作:
    • len(字符串): 获取字符串的长度;
    • 字符串.count(字符串2): 获取小字符串在大字符串中出现的次数;
    • 字符串.index(字符串2): 获取小字符串第一次出现的索引;若不存在,会报错;
    • 字符串.find(字符串2): 查找字符串,若不存在,返回 -1;
    • 字符串.startswith(字符串2): 以某个内容开头
    • 字符串.endswith(字符串2): 以某个内容结尾
    • 字符串.replace(old_str, new_str): 替换字符串;该方法执行完成之后,会返回一个新的字符串;而原有字符串不变;
    • 字符串的切片:字符串[开始索引:结束索引:步长],
# 字符串的遍历
string = "Hello Python!"

for c in string:
    print(c)

# string.isdecimal(): 如果 string 只包含数字则返回True, 全角数字
# string.isdigit(): 如果 string 只包含数字则返回True, 全角数字, (1), \u00b2(Unicode 码)
# string.isnumeric(): 如果 string 只包含数字则返回True, 全角数字, 中文数字
# 如果 string 中包含小数, 以上三个方法均返回 False


# 需求: 字符串逆序
str = "abcdefg"
str[::-1]

# 字符串拼接
a = '123'
b = 'abc'
c = '789'
d1 = a + b + c
print(d1)
# + 效率低,该用 join
d2 = ''.join([a,b,c])
print(d2)

5.5 可变和不可变数据类型

  • 不可变类型:
    • 数字类型 int,bool,float,complex
    • 字符串 str
    • 元组 tuple
  • 可变类型:
    • 列表 list
    • 字典 dict

5.6 高级数据类型的公共方法

  • Python 的内置函数(即不需要 import 导入模块就可以调用)

    • len(item): 计算容器中元素个数;
    • del(item): 删除变量;
    • max(item): 返回容器中元素最大值;如果是字典,只针对key比较;
    • min(item): 返回容器中元素最小值;
  • 成员运算符

    • in: 如果在指定的序列中找到值,返回True,否则,返回False;
    • not in: 如果在指定的序列中没有找到值,返回True, 否则,返回False;
# 完整的 for 循环语法

for 变量 in 集合:
    循环体代码
else:
    没有通过 break 退出循环, 循环结束后, 会执行的代码

# 应用场景: 可以用于迭代遍历嵌套的数据类型(例如,一个包含多个字典的列表)
# 需求: 要判断某一个字典中是否存在指定的值
#      如果存在, 提示并且退出循环;
#      如果不存在,在循环整体结束后,希望得到一个统一的提示;

students = [
    {"name": "张三",
     "age": 18,
     "gender": True,
     "height": 1.69},
     {"name": "李四",
       "age": 23,
       "gender": False,
        "height": 1.74}
]

find_name = "李四"

for stu_dict in students:
    if stu_dict["name"] == find_name:
        print("找到了 %s" % find_name)
        break
else:
    print("抱歉,没有找到 %s" % find_name)
print("循环结束!")

6. 深拷贝和浅拷贝

  • 浅拷贝:就是对引用的拷贝;
  • 深拷贝:对对象资源的拷贝;
# 示例:
# 浅拷贝
a = [11, 22, 33]
b = a
id(a)  # 4420079880
id(b)  # 4420079880

# 深拷贝
import copy
c = copy.deepcopy(a)
id(c)  # 4419542728
a.append(44)
a    # [11, 22, 33, 44]
b    # [11, 22, 33, 44]
c    # [11, 22, 33]

# 列表的拷贝
a = [11, 22, 33]
b = [44, 55, 66]
c = [a, b]
d = c

id(c)   # 4419627080
id(d)   # 4419627080

e = copy.deepcopy(c)
id(e)   # 4419576776

a.append(77)
c[0]    # [11, 22, 33, 77]
e[0]    # [11, 22, 33]

f = copy.copy(c) # 4419597704
a.append(88)
c[0]    # [11, 22, 33, 77, 88]
f[0]    # [11, 22, 33, 77, 88]

# 元组的拷贝
a = [1, 2, 3]
b = [4, 5, 6]
c = (a, b)
e = copy.copy(c)
id(c)   # 4419622664
id(e)   # 4419622664

7. 进制转换

  • 十进制转换成二进制:bin(十进制数),二进制以 0b 开头;
  • 十进制转换成八进制: oct(十进制数), 八进制以 0 开头;
  • 十进制转换成十六进制: hex(十进制), 十六进制以 0x 开头;
  • 其他进制转换成十进制: int("二进制数",2), int("八进制数", 8), int("十六进制数", 16)

8. Python 2.x 和 Python 3.x 的区别

# 说明:
#   1. Python 2.x 默认使用 ASCII 编码格式
#   2. Python 3.x 默认使用 UTF-8 编码格式

在 Python 2.x 文件中的第一行增加以下代码, 解释器会以 utf-8 编码来处理python文件
# *-* coding:utf8 *-*

也可以使用
# coding=utf8

# 在 Python 2.x 中,即使指定了文件使用 UTF-8 的编码格式,但是在遍历字符串时,仍然会以字节为单位遍历字符串
# 要能够正确的遍历字符串,在定义字符串时,需要在字符串的引号前,增加一个小写字母 u,告诉解释器,这是
# 一个 unicode 字符串(即使用UTF-8编码格式的字符串)

# 示例:
# *-* coding:utf8 *-*

hello_str = u"hello 世界"

print(hello_str)

# 如果字符串前没有小写字母 u, 会输出错误
for c in hello_str:
    print(c)

参考资料:

posted @ 2018-03-04 10:40  小a的软件思考  阅读(218)  评论(0编辑  收藏  举报