【Python】编程笔记2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012736685/article/details/85051173

一、字符串和编码

1、字符编码

过程:ASCII ==》Unicode ==》utf-8

  • ASCII编码:一个字节,127个字符;
  • Unicode将所有语言都统一到一套编码中,解决了乱码的问题。Unicode最常用的用 2 个字节表示一个字符(若要用到非常偏僻的字符,就需要4个字节);
  • UTF-8 解决了Unicode编码空间浪费问题,将Unicode转换为”可变长编码“。具体来说,UTF-8 编码把一个 Unicode 字符根据不同的数字大小编码成 1-6 个字节,常用的英文字母被编码成 1 个字节,汉字通常是 3 个字节,只有很生僻的字符才会被编码成 4-6 个字节。

在计算机内存中,统一使用 Unicode 编码,当需要保存到硬盘或者需要传输的时候,就转换为 UTF-8 编码。

2、字符串

Python3中字符产是以 Unicode 编码的。
==》支持多语言

print('包含中文的 str')

输出结果

包含中文的 str

(1)ord() 与 chr()

对于单个字符的编码,有:

  • ord()函数:获取字符的整数表示;
  • chr()函数:把编码转换为对应的字符;
print(ord('A'))
print(ord('中'))
print(chr(66))
print(chr(25991))

输出结果

65
20013
B
文

(2)str类型 ==》bytes类型

bytes类型的数据用带 b前缀 的单引号或双引号表示:

# 区分'ABC'和 b'ABC',前者是 str,
# 后者虽然内容显示得和前者一样,
# 但 bytes 的每个字符都只占用一个字节。
x = b'ABC'

(3)encode()

以 Unicode 表示的 str 通过 encode()方法可以编码为指定的 bytes。

  • 纯英文 str 可用ASCII编码为bytes;
  • 含有中文的 str 可用 UTF-8 编码为bytes;
  • 含有中文的 str 不能用ASCII编码,因为中文编码超出了ASCII编码的范围==》报错
print('ABC'.encode('ascii'))
print('中文'.encode('utf-8'))
print('中文'.encode('ascii'))

输出结果

b'ABC'
b'\xe4\xb8\xad\xe6\x96\x87'
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

(4)decode()

bytes ==》str

print(b'ABC'.decode('ascii'))
print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))

输出结果:

ABC
中文
  • len()函数:计算str包含的字符数
print(len('ABC'))
print(len('中文'))
## str类型
print(len(b'ABC'))
print(len(b'\xe4\xb8\xad\xe6\x96\x87'))
print(len('中文'.encode('utf-8')))

输出结果:

3
2
3
6
6

==》1 个中文字符经过 UTF-8 编码后通常会占用 3 个字节,而 1 个英文字符只占用 1 个字节。

==》为了避免乱码问题,应当始终坚持使用 UTF-8 编码对 str 和 bytes 进行转换。

3、utf-8编码读取

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

解读:

  1. 第一行注释是为了告诉 Linux/OS X 系统,这是一个 Python 可执行程序,Windows 系统会忽略这个注释;
  2. 告诉 Python 解释器,按照 UTF-8 编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

二、格式化

print('Hello, %s' % 'world')
print('Hi, %s, you have $%d.' % ('Michael', 1000000))

输出结果

Hello, world
Hi, Michael, you have $1000000.

如果只有一个 %? ,括号可以省略。

1、常用的占位符

占位符 含义
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数

2、格式控制

  • 格式化整数和浮点数还可以指定是否补 0 和整数与小数的位数:
print('%2d-%02d' % (3, 1))
print('%.2f' % 3.1415926)

输出结果

 3-01
3.15

若不确定用什么==》使用%s,转化为字符串

三、list 和 tuple

1、list 列表

list 是一种有序的集合,可以随时添加和删除其中的元素。

classmates = ['Michael','Bob','Tracy']
print(classmates)

## len() 函数获取list
print(len(classmates))

## 用索引进行元素的访问
print(classmates[0])
print(classmates[1])
print(classmates[2])
# # 当索引超出了范围时, Python 会报一个 IndexError 错误
# print(classmates[3])
print(classmates[-1])  # 取最后一个元素
print(classmates[-2])  # 取倒数第 2 个

## 添加元素
classmates.append('Adam')      # 添加元素到末尾
print(classmates)
classmates.insert(1, 'Jack')   # 在指定位置插入元素,eg:索引号为 1 的位置
print(classmates)

## 删除元素
classmates.pop()  # 删除末尾元素
print(classmates)
# 删除指定位置的元素,pop(i),i为索引位置
classmates.pop(1)
print(classmates)

## 元素替换
classmates[1] = 'Sarah'
print(classmates)

## list中元素的数据类型可以不同,可以嵌套
L = ['Apple', 123, True]
s = ['python', 'java', ['asp', 'php'], 'scheme']
print(len(s))

输出结果

['Michael', 'Bob', 'Tracy']
3
Michael
Bob
Tracy
Tracy
Bob
['Michael', 'Bob', 'Tracy', 'Adam']
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
['Michael', 'Jack', 'Bob', 'Tracy']
['Michael', 'Bob', 'Tracy']
['Michael', 'Sarah', 'Tracy']
4

2、tuple

tuple 一旦初始化就不能修改。
也就是,tuple 的每个元素,指向永远不变。

classmates = ('Micjael', 'Bob', 'Tracy')
## 因为初始化之后不能修改,所以没有append()、insert()这样的方法。
## 可以访问
print(classmates[0])
print(classmates[-1])

## 空的 tuple
t = ()
print(t)

## 定义只有 1 个元素的 tuple
# Python 规定:按小括号进行计算,计算结果自然是 1。
t = (1,)
print(t)

## “可变的”tuple
t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
print(t)

输出结果

Micjael
Tracy
()
(1,)
('a', 'b', ['X', 'Y'])

四、条件判断

1、条件判断—— if 语句

注意

  • 不要少写冒号;
  • elif 是else if 的缩写;
if <条件判断1>:
	<执行1>
elif <条件判断2>:
	<执行2>
elif <条件判断3>:
	<执行3>
else:
	<执行4>

示例1

age  = 20
if age <= 6:
    print('kid')
elif age <= 18:
    print('teenager')
else:
    print('adult')

输出结果

adult

示例2

if x:
    print('True')
else:
    print('Fasle')

分析:只要 x 是非零数值、非空字符串、非空 list 等,就判断为 True,否则为 False。

注意:input() 函数

birth = input('birth:')
if birth < 2000:
    print('00前')
else:
    print('00后')

报错

TypeError: '<' not supported between instances of 'str' and 'int'

input()返回的数据类型是 str, str 不能直接和整数比较,必须先把 str 转换成整数。

修改版本:str类型转换为int类型

birth = input('birth:')
if int(birth) < 2000:
    print('00前')
else:
    print('00后')

2、循环

(1)for … in 循环

依次把 list 或 tuple 中的每个元素迭代出来。

names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)

输出结果

Michael
Bob
Tracy

常用:range() 函数

sum = 0
# range(101):生成 0-100 的整数序列
for x in range(101):
    sum = sum + x
print(sum)

输出结果

5050

(2)while 循环

只要条件满足,就不断循环,条件不满足时退出循环。

sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)

==》2500

猜你喜欢

转载自blog.csdn.net/u012736685/article/details/85051173