Python作为一种功能强大且广泛应用的编程语言,其基础变量类型是构建各种复杂程序的基石。在Python中,字符串和数字类型是最常用的基础变量类型之一。对于初学者来说,深入理解这两种类型是掌握Python编程的关键第一步。无论是数据处理、算法实现还是构建Web应用程序,对字符串和数字类型的熟练运用都至关重要。
变量是代数的思想,是用来引用数据和功能占位的,具备动态性和可变性;
使用的变量必须声明,在声明变量时不需要指定变量类型。
变量是缓存数据的标识符。
在python中,变量是用赋值语句创建,用来绑定一个数据的有名对象
命名约定 — 见名知意
变量名 = 数字类型
变量名 = 表达式 # one_hundred = 99 + 1
变量名1 = 变量名2 = 变量名3 = 数字类型 # a=b=c=200
变量名1, 变量名2, 变量名3 = 数字类型1, 数字类型2, 数字类型3 # a,b = 100,200
counter = 100 # 整型变量
miles = 1000.0 # 浮点型变量
name = "hqyj" # 字符串
Python中的变量就是变量,它没有类型,我们所说的"类型"是变量指向的内存中对象的类型。我们可以使用type小函数用于获取一个变量或值的类型。
python中的数据类型:
字符串 str
数字
1.整数 int 2.浮点数 float 3.布尔数 bool
容器
1.列表 list 2.元组 tuple 3.字典 dict 4.集合 set / 固定集合 frozenset 5.字节串 bytes / 字节数组 bytearray
按照是否可修改划分分为:
不可变数据:Number(数字)、String(字符串)、Tuple(元组)
可变数据:List(列表)、Dictionary(字典)、Set(集合)
字符串是由一系列字符组成的序列。用引号引起来的就是字符串,即便是空或者空格。
可以使用单引号(')或者双引号(")来定义一个字符串。例如:
str1 = 'Hello, World!'
str2 = "Python is great"
这种简单的定义方式使得创建字符串变得非常直观。同时,Python还支持三引号('''或者""")来定义多行字符串,这在表示较长的文本块,如文档字符串或者多行注释时非常有用。
str3 = '''This is a multi - line string.
It can span across multiple lines.'''
使用反斜杠\对字符进行转义 :
字符串是有序序列,每个字符有固定位置(索引),可通过索引或切片精确访问部分内容。
字符串中的每个字符都有一个对应的索引值,索引从0开始。通过索引,我们可以访问字符串中的单个字符。例如:
索引规则:字符串[索引值]
从左到右:索引从0开始(第一个字符索引为0,第二个为1)。
从右到左:支持负数索引(最后一个字符索引为-1,倒数第二个为-2)。
s = "python"
print(s[0]) # 第一个字符,输出:"p"
print(s[2]) # 第三个字符,输出:"t"
print(s[-1]) # 最后一个字符,输出:"n"
print(s[-3]) # 倒数第三个字符,输出:"h"
除了单个字符的访问,Python还支持字符串的切片操作。切片可以用来获取字符串的子串。
切片语法: str[start:stop:step]
其中start
是起始索引(包含),stop
是结束索引(不包含),step
是步长。例如:
s = "huaqyj"
# 案例1:s[:2] → 省略start(默认0),end=2,step=1
print(s[:2]) # 截取索引0到1的字符,输出:"hu"
s = "huaqingyunajian"
# 案例2:s[1:5:2] → start=1,end=5,step=2(间隔1个字符取一次)
# 索引1: 'u',索引3: 'q'(跳过索引2),end=5不包含索引5 → 结果:"uq"
print(s[1:5:2]) # 输出:"uq"
# 案例3:s[::-1] → start和end省略(默认从头到尾),step=-1(反向截取)
print(s[::-1]) # 反转字符串,输出:"naijunygnaiquh"
Python为字符串提供了大量丰富的运算方法,用于字符串的操作和处理。
字符串连接(+ 运算符):
s1 = "Hello"
s2 = "World"
result = s1 + " " + s2 # 拼接时可加入空格分隔
print(result) # 输出:"Hello World"
只能连接字符串类型,不能直接与数字、列表等其他类型连接(需先通过 str() 转换):
# 错误示例(类型不匹配)
# print("年龄:" + 18) # 报错:TypeError
print("年龄:" + str(18)) # 正确:先转换为字符串,输出"年龄:18"
当多个字符串字面值相邻摆放时,Python 会自动将它们合并,无需显式使用 +
字符串字面值自动合并:
# 自动合并相邻字符串字面值
s = "Py" "thon" # 等价于 "Python"
print(s) # 输出:"Python"
# 拆分长字符串(代码换行时更清晰)
long_str = "这是一段非常长的字符串," "可以拆分成多部分," "Python自动合并它们"
print(long_str) # 输出:"这是一段非常长的字符串,可以拆分成多部分,Python自动合并它们"
⚠️ 注意:变量与字面值相邻不会自动合并,例如 s = "Py" + var
必须用+连接
字符串重复(* 运算符):
in
和 not in
)子字符串 in 字符串
→ 包含则返回True,否则False
判断一个字符串是否包含另一个子字符串(返回布尔值True或False)
s = "Python is a programming language"
# 判断"Python"是否在s中
print("Python" in s) # 输出:True
# 判断"java"是否在s中
print("java" in s) # 输出:False
# 判断"language"是否不在s中
print("language" not in s) # 输出:False(因包含,所以"not in"为False)
占位符 — 生成具有一定格式的字符串
占位符和类型码 | 说明 |
---|---|
%s | 转成字符串, 使用 str(x) 函数转换(常用) |
%d | 转成十进制的整数(常用) |
%o | 转成八进制的整数 |
%x,%X | 转成十六进制的整数 |
%e,%E | 转成指数格式的浮点数 |
%f,%F | 转成小数格式的浮点数(常用) |
%g,%G | 转成指数格式或小数格式的浮点数 |
%% | 转成一个% |
%m.nf | m是指总宽度,默认右对齐,加个 - 表示左对齐,n 是指保留的小数点位数 |
fmt = """
甲方:_____%s_____
乙方:_____%s_____
....... 金额:_%d__
"""
s = fmt % ("小王", '华清', 10000)
b = fmt % ("小红", '华清', 10000)
print(s)
print("------%F------" % 3.1415)
print("------%g------" % 3.1415)
print("------%e------" % 3.1415)
print("------%e------" % 31.415)
print("------%g------" % 3141523274812374281342374324.23748123742183472)
# 按照指定的宽度打印,并保留指定的小数位数
print("------%30.2f------" % 3141523274814.23748123742183472)
print("------%30.2f------" % 3144814.3472)
print("------%-30.2f------" % 14)
f-string 格式化字符串以 f 开头,字符串中的表达式用 {} 包起来。
f-string(格式化字符串字面值):
x = 1
y = 2.3
# f'{x+1}'中,{x+1}是一个表达式,会先计算x+1(结果为2),再将结果嵌入字符串中
print(f'{x+1}') #2
x = 1
# f'{x+1=}'中,=是f-string的特殊语法,作用是同时显示表达式本身和计算结果
print(f'{x+1=}') #x+1=2
d = 12
# {d}直接将变量d的值(12)嵌入字符串'abc'中,拼接后得到'abc12'
print(f'abc{d}') # 其中的{}中为变量或表达式
# 可以使用:对变量进一步格式化
pi = 3.1415
# {pi:.2f}中,:是格式化修饰符的分隔符,.2f表示将浮点数保留2位小数
print(f'{s:.2f}') # 3.14
方法的调用语法:对象.方法名(参数)
常见API,详见文档: 内置类型 — Python 3.13.5 文档
1. str.lower(): 将字符串转换为小写
text = "Hello, World!"
print(text.lower()) # 输出: hello, world!
2. str.upper(): 将字符串转换为大写
text = "Hello, World!"
print(text.upper()) # 输出: HELLO, WORLD!
3. str.strip(): 移除字符串两端的空白字符
text = " Hello, World! "
print(text.strip()) # 输出: Hello, World!
4. str.split(): 将字符串拆分为列表
text = "Hello, World!"
print(text.split()) # 输出: ['Hello,', 'World!']
text = "Hello,World!"
print(text.split(',')) # 输出: ['Hello', 'World!']
5. str.join(): 将列表中的字符串连接为一个字符串
words = ['Hello', 'World']
print(" ".join(words)) # 输出: Hello World
words = ['apple', 'banana', 'cherry']
print(", ".join(words)) # 输出: apple, banana, cherry
6. str.replace(): 替换字符串中的子字符串
text = "Hello, World!"
print(text.replace("World", "Python")) # 输出: Hello, Python!
7. str.find(): 查找子字符串,返回第一次出现的位置
text = "Hello, World!"
print(text.find("World")) # 输出: 7
print(text.find("Python")) # 输出: -1(如果未找到则返回 -1)
8. str.startswith(): 检查字符串是否以指定子字符串开头
text = "Hello, World!"
print(text.startswith("Hello")) # 输出: True
print(text.startswith("World")) # 输出: False
9. str.endswith(): 检查字符串是否以指定子字符串结尾
text = "Hello, World!"
print(text.endswith("World!")) # 输出: True
print(text.endswith("Hello")) # 输出: False
10. str.isdigit(): 检查字符串是否只包含数字字符
text1 = "12345"
text2 = "12345abc"
print(text1.isdigit()) # 输出: True
print(text2.isdigit()) # 输出: False
11. str.isalpha(): 检查字符串是否只包含字母字符
text1 = "Hello"
text2 = "Hello123"
print(text1.isalpha()) # 输出: True
print(text2.isalpha()) # 输出: False
12. str.isalnum(): 检查字符串是否只包含字母和数字字符
text1 = "Hello123"
text2 = "Hello 123"
print(text1.isalnum()) # 输出: True
print(text2.isalnum()) # 输出: False
13. str.title(): 将字符串中的每个单词的首字母转换为大写
text = "hello, world!"
print(text.title()) # 输出: Hello, World!
14. str.capitalize(): 将字符串的首字母转换为大写
text = "hello, world!"
print(text.capitalize()) # 输出: Hello, world!
15. str.count(): 计算子字符串在字符串中出现的次数
text = "Hello, World! Hello, Python!"
print(text.count("Hello")) # 输出: 2
print(text.count("Python")) # 输出: 1
16. str.format(): 格式化字符串
name = "John"
age = 30
print("My name is {} and I am {} years old.".format(name, age))
# 输出: My name is John and I am 30 years old.
print(f"My name is {name} and I am {age} years old.")
# 输出: My name is John and I am 30 years old. (使用 f-string)
# 十进制的写法:直接书写数字,无需前缀,没有特殊前缀,是Python中默认的数字表示方式
100 0 -5
# 二进制的写法:0b开头,后跟0~1
0b1101
# 八进制的写法:0o开头,后跟0~7
0o777 等于 0b111111111 等于 511
# 十六进制的写法:0x开头,后跟0~9,a-f,A-F
0xA1B2C3D4
进制转换工具(Python 内置函数)
函数 | 作用 | 示例 |
---|---|---|
bin(x) | 将数字转换为二进制字符串(带0b 前缀) |
bin(10)→'0b1010' |
oct(x) | 将数字转换为八进制字符串(带0o 前缀) |
oct(10)→'0o12' |
hex(x) | 将数字转换为十六进制字符串(带0x 前缀) |
hex(10)→'0xa' |
int(x,base) | 将指定进制的字符串转换为十进制整数 | int(0b1010,2)→10 |
通过 a + bj
的形式直接定义复数,虚数部分必须包含j或J。
复数转换函数:complex():
z1 = 3 + 4j # 实数部分3,虚数部分4
z2 = -2.5 + 1j # 实数部分-2.5,虚数部分1
print(complex(5)) # 输出:(5+0j) → 实数5,虚数0
print(complex(3.14)) # 输出:(3.14+0j) → 浮点数转换
print(complex("10")) # 输出:(10+0j) → 字符串转换(仅含数字)
print(complex(2, 3)) # 输出:(2+3j) → 实数2,虚数3
print(complex(0, 5)) # 输出:5j → 实数0,虚数5(可简写)
print(complex(3.5, -2)) # 输出:(3.5-2j) → 虚数部分为负数
# 小数写法
3.14 0.14 .14 3.0 3. 0.0
# 科学计数法
6.18E-1 # 等同于 0.618
2.9979E8 # 等同于 299790000.0
表示真假、对错、黑白等,只有2个值True和False;
类型转换使用bool()方法,非0都是True
0、0.0、-0.0、空字符串、空列表、空字典、空集合、空元组、None等都是False;
布尔值转换函数:bool(x):
# 返回 False 的情况
print(bool(0)) # False(整数0)
print(bool(0.0)) # False(浮点数0)
print(bool("")) # False(空字符串)
print(bool([])) # False(空列表)
print(bool(None)) # False(空值)
# 返回 True 的情况
print(bool(1)) # True(非零整数)
print(bool(-3.14)) # True(非零浮点数)
print(bool("abc")) # True(非空字符串)
print(bool([0])) # True(非空列表,即使元素为0)
print(bool(2+3j)) # True(复数非零)
(五)import math
模块数学函数库的必要性
在处理数字类型的各种计算时,仅仅依靠Python的基本运算操作往往是不够的。例如,计算三角函数值、对数函数值、开方等复杂的数学运算,需要专门的数学函数库。math
模块就是Python标准库中提供这些数学函数的模块。
对于从事科学计算、数据分析、工程计算等领域的程序员来说,math
模块是不可或缺的工具。它提供了一种简洁、高效的方式来执行复杂的数学计算,避免了自己编写复杂算法来实现这些功能的麻烦。
math
模块中的常见函数
三角函数
math.sin(x)
:计算x
(弧度制)的正弦值。例如,要计算30度角(转换为弧度制为math.pi/6
)的正弦值,可以使用math.sin(math.pi/6)
,结果为0.5
。
math.cos(x)
和 math.tan(x)
:分别用于计算余弦值和正切值,用法与math.sin(x)
类似。
对数函数
math.log(x)
:计算以e
为底x
的自然对数。如果要计算以其他底数b
为底x
的对数,可以使用公式math.log(x)/math.log(b)
。例如,计算以2为底8的对数,可表示为math.log(8)/math.log(2)
,结果为3
。
math.log10(x)
:专门用于计算以10为底x
的对数。
幂函数与开方函数
math.pow(x, y)
:计算x
的y
次幂。例如,math.pow(2, 3)
等于8
。
math.sqrt(x)
:计算x
的平方根。例如,math.sqrt(9)
等于3
。
math数学函数文档:https://docs.python.org/zh-cn/3.12/library/math.html
在几何计算中的应用
假设我们要计算一个圆的周长和面积。已知圆的半径r = 5
。
圆的周长公式为C = 2πr
,在Python中可以这样实现:
import math
r = 5
C = 2 * math.pi * r
print("圆的周长为:", C)
在实际编程中,经常会遇到字符串和数字类型混合的情况。例如,要将一个数字和一个字符串拼接在一起形成一个新的字符串。需要注意的是,不能直接使用+
运算符将数字和字符串相加,必须先将数字转换为字符串类型。可以使用str()
函数来实现这种转换。
num = 10 str1 = "The number is " result = str1 + str(num) print(result) # 输出 'The number is 10'
在Python编程的第一天,深入理解字符串和数字类型是非常重要的。字符串类型提供了丰富的操作方法用于文本处理,而数字类型则是进行数学计算的基础。掌握它们的定义、操作和转换方法,能够为后续更复杂的编程任务奠定坚实的基础。无论是构建简单的脚本还是大型的应用程序,对这两种基础变量类型的熟练运用都是必不可少的。随着学习的深入,将会发现这两种类型在Python的各种领域,如数据分析、机器学习、Web开发等中都有着广泛的应用。
输入一个字符串, 判断这个字符串是否是回文:
上海自来水来自海上
ABCCBAa
13531
【答案】:
s = input("请输入一段文字: ")
if s == s[::-1]:
print(s, '是回文')
else:
print(s, '不是回文')
写程序,输入一个字符, 打印字符串的如下内容
1. 打印这个字符串的第一个字符
2. 打印这个字符串的最后一个字符串
3. 如果这个字符串的长度是 奇数,则打印中间这个字符
用 len(x) 求字符串的长度
【答案】:
s = input("请输入一段文字: ")
print('第一个字符是:', s[0])
print('最后一个字符是:', s[-1])
if len(s) % 2 == 1:
print('中间的字符是', s[len(s) // 2])