字符串

发布时间 2023-12-12 11:49:32作者: 蓝幻ﹺ

字符串

  • 变量名的命名规范
    • 数字 + 子母 + 下划线任意组合,数字不能开头
  • 变量名的命名风格
    • 下划线 + 小写字母
    • 驼峰体
      • 大驼峰
        • 每个单词的首字母都大写
        • UserName
      • 小驼峰
        • 第一个单词的首字母小写,其他大写
        • userName
  • 数字类型包括
    • int
    • float
    • type
  • 字符串类型,
    • str
  • 列表类型,
    • list
  • 字典类型,
    • dict
  • 字符串可以索引取值
  • 字典类型
    • dict['key']
      • 取不到就会报错
    • dict.get('key')
      • 取不到不会报错就是None
  • 基本数据类型

    • 数字类型

      • 整型 int

      age = 18

      
      - 浮点型float
      
      ```python
      age = 18.0
      
    • 字符串类型

      • str
      name = "dream"
      age = 18
      # 按索引取值
      print(name[0]) # d
      print(name[-1]) # m
      
      # 计算字符串的长度
      print(len(name))
      
      # 字符串的格式化输出
      print('my name is %s'%name)  # my name is dream
      
      print('my name is %s my age is %d'%(name,age))  # my name is dream my age is 18
      # %s 占字符串
      # %d 站位整数类型
      
      print(f"my name is {name}")  #my name is dream
      
      print("my name is {}".format(name))  #my name is dream
      
    • 列表类型 list

      name_list = ['dream','hope','happy']
      
      name_list[0]  #dream
      
    • 字典类型 dict

      name_dict = {"name":"dream","age":18}
      
      name_dict['name'] #报错
      name_dict.get('name')  #dream
      name_dict.get('name','水水水')  #dream
      
    • 布尔类型 bool

      # 表示对与错 True / False 
      # go / java / js --- true / false
      
      # 什么是真
      1	有值的数字类型/字符串类型/列表/字典 布尔类型的True
      # 什么是假
      0	没有值的数字类型/字符串类型/列表/字典 布尔类型的False
      

元祖类型(tuple)

【1】作用

  • 元组(tuple)是一种不可变的序列类型,类似于列表,用于存储多个有序元素。
  • 元组与列表的主要区别在于元组的元素不能被修改、删除或添加,是不可变的数据类型。
  • 元组通常用于存储相关联的数据,保持数据的完整性。

【2】定义

  • 元组通过小括号 () 定义,其中的元素可以是不同的数据类型,用逗号 , 分隔。
  • 可以使用索引访问元组的元素。
# 定义元组
my_tuple = (1, 'hello', 3.14, True)

# 访问元组元素
first_element = my_tuple[0]
second_element = my_tuple[1]

print(first_element)  # 1
print(second_element)  # 'hello'

【3】使用

(1)元组的不可变性

  • 由于元组是不可变的,不能对元素进行修改、删除或添加。
# 尝试修改元组的元素(会报错)
my_tuple[0] = 42  # TypeError: 'tuple' object does not support item assignment

# 尝试删除元组的元素(会报错)
del my_tuple[1]  # TypeError: 'tuple' object doesn't support item deletion

# 尝试添加元素到元组(会报错)
my_tuple.append('new_element')  # AttributeError: 'tuple' object has no attribute 'append'

(2)元组的基本操作

  • 元组支持基本的操作,如切片、拼接等。
# 切片操作
sliced_tuple = my_tuple[1:3]
print(sliced_tuple)  # ('hello', 3.14)

# 拼接操作
new_tuple = my_tuple + ('world', False)
print(new_tuple)  # (1, 'hello', 3.14, True, 'world', False)

(3)元组解包

  • 元组解包是一种将元组中的元素分配给多个变量的方法。
# 元组解包
a, b, c, d = my_tuple

print(a)  # 1
print(b)  # 'hello'
print(c)  # 3.14
print(d)  # True
# 字符串类型
name_tuple = ('dream')
# 字符类型 + , ----> 元组类型
name_tuple = ('dream',)
name_tuple = ('dream', 18)
print(name_tuple)
print(type(name_tuple))

# 字符串定义的时候 后面不要 + ,
name_one = 'dream', 

print(name_one)
print(type(name_one))

【二】什么是与用户交互

  • 交互的本质就是输入、输出
  • 用户交互就是人往计算机中input/输入数据,计算机print/输出结果

【三】为什么要与用户交互

  • 为了让计算机能够像人一样与用户沟通交流
  • 过去我们去银行取钱,用户需要把帐号密码告诉柜员
  • 而现在,柜员被ATM机取代
    • ATM机就是一台计算机
    • 所以用户同样需要将帐号密码告诉计算机
    • 于是我们的程序中必须有相应的机制来控制计算机接收用户输入的内容
    • 并且输出结果

【四】如何与用户交互

【1】输入(input)

  • 在Python3中input功能会等待用户的输入

    • 用户输入一些内容,用户按下回车键后,input 函数会返回用户输入的内容

    • input接受的所有数据类型都是 str 类型

      username = input("请输入你的用户名:>>>")
      password = input('请输入你的密码:>>>')
      
      print(username, type(username))  # input接受的所有数据类型都是str类型
      print(password, type(password))  # input接受的所有数据类型都是str类型
      
    • 然后赋值给等号左边的变量名

username = input('请输入您的用户名:')
# 请输入您的用户名:Dream
# username = "Drea"

password = input('请输入您的密码:')
# 请输入您的密码:521
# password = "521"

【2】输出(print)

(1)简单字符串

  • print 函数用于向控制台输出信息。你可以使用 print 函数来显示程序的运行结果、提示信息等。
# 输出示例
print("Hello, World!")  # 输出简单的字符串
# Hello, World!

(2)多个变量输出

  • print 函数可以输出多个值,用逗号隔开。输出时,各个值之间默认使用空格分隔
# 多值输出示例
name = "Alice"
age = 25
print("姓名:", name, "年龄:", age)  # 输出姓名和年龄

(3)默认 end 参数

  • print 函数也有一些可选参数,例如 end 参数用于指定输出的结尾字符,默认为换行符"\n"(代表换行)
# end 参数示例
print("Hello", end="")
print(", World!")  # 输出结果为:Hello, World!
  • 可以将end参数的值改成任意其它字符
print("aaaa",end='')
print("bbbb",end='&')
print("cccc",end='@')
#整体输出结果为:aaaabbbb&cccc@

【五】运算符

【一】算数运算符

  • python支持的算数运算符与数学上计算的符号使用是一致的
    • 我们以x=9,y=2为例来依次介绍它们

【1】加法运算符 +

x = 9
y = 2
result = x + y
print(result)  # 输出:11

【2】减法运算符 -

x = 9
y = 2
result = x - y
print(result)  # 输出:7

【3】乘法运算符 *

x = 9
y = 2
result = x * y
print(result)  # 输出:18

【4】除法运算符 /

x = 9
y = 2
result = x / y
print(result)  # 输出:4.5

【5】取整除运算符 //

x = 9
y = 2
result = x // y
print(result)  # 输出:4

【6】求余数运算符 %

x = 9
y = 2
result = x % y
print(result)  # 输出:1

【7】幂运算符 **

x = 9
y = 2
result = x ** y
print(result)  # 输出:81

【二】比较运算符

  • 比较运算用来对两个值进行比较,返回的是布尔值True或False
    • 我们以x=9,y=2为例来依次介绍它们

【1】相等运算符 ==

x = 9
y = 2
result = x == y
print(result)  # 输出:False

【2】不等运算符 !=

x = 9
y = 2
result = x != y
print(result)  # 输出:True

【3】大于运算符 >

x = 9
y = 2
result = x > y
print(result)  # 输出:True

【4】小于运算符 <

x = 9
y = 2
result = x < y
print(result)  # 输出:False

【5】大于等于运算符 >=

x = 9
y = 2
result = x >= y
print(result)  # 输出:True

【6】小于等于运算符 <=

x = 9
y = 2
result = x <= y
print(result)  # 输出:False

【三】赋值运算符

  • python语法中除了有=号这种简单的赋值运算外
  • 还支持增量赋值、链式赋值、交叉赋值、解压赋值
  • 这些赋值运算符存在的意义都是为了让我们的代码看起来更加精简。
    • 我们以x=9,y=2为例先来介绍一下增量赋值

【1】增量赋值

(1)介绍

  • 增量赋值运算符用于将变量与右侧的表达式相结合,并将结果赋值给变量。
  • 这样可以简化表达式,提高代码的可读性。

(2)使用

x = 9
y = 2

# 等同于 x = x + y
x += y
print(x)  # 输出:11
  • 在上述例子中,x += y 等同于 x = x + y,它表示将变量 x 的值与 y 相加,并将结果赋值给 x

【2】链式赋值

(1)介绍

  • 链式赋值允许在单一语句中给多个变量赋值。这样可以减少代码行数,提高代码的紧凑性。

(2)使用

a = b = c = 5
print(a, b, c)  # 输出:5 5 5
  • 在上述例子中,a = b = c = 5 表示同时给变量 abc 赋值为 5。

【3】交叉赋值

(1)介绍

  • 交叉赋值允许在不使用临时变量的情况下,交换两个变量的值。

(2)使用

x = 9
y = 2

# 交叉赋值
x, y = y, x
print(x, y)  # 输出:2 9
  • 在上述例子中,x, y = y, x 表示将变量 x 的值赋给 y,同时将变量 y 的值赋给 x,实现了两个变量值的交换。

【4】解压赋值

(1)介绍

  • 解压赋值允许将一个可迭代对象(如列表、元组等)的值解压到多个变量中,以便进一步使用。

(2)使用

coordinates = (3, 5)

# 解压赋值
x, y = coordinates
print(x, y)  # 输出:3 5
  • 在上述例子中,x, y = coordinates 表示将元组 coordinates 中的值解压到变量 xy 中,以便分别使用。

【四】逻辑运算符

  • 逻辑运算符用于连接多个条件,进行关联判断,并返回布尔值 TrueFalse
  • 常用的逻辑运算符包括与(and)、或(or)、非(not)。

【1】与运算符 (and)

  • 与运算符 and 在两个条件都为 True 时,返回 True;如果其中一个条件为 False,则返回 False
x = 5
y = 10

result = (x > 0) and (y > 0)
print(result)  # 输出:True
  • 在上述例子中,(x > 0) and (y > 0) 表示同时判断 x > 0y > 0 是否都为 True,因为两个条件都满足,所以结果为 True

【2】或运算符 (or)

  • 或运算符 or 在两个条件中至少有一个为 True 时,返回 True;如果两个条件都为 False,则返回 False
x = -5
y = 10

result = (x > 0) or (y > 0)
print(result)  # 输出:True
  • 在上述例子中,(x > 0) or (y > 0) 表示判断 x > 0 或者 y > 0 至少有一个条件为 True,因为 y > 0True,所以结果为 True

【3】非运算符 (not)

  • 非运算符 not 用于对一个条件取反,如果条件为 True,则返回 False;如果条件为 False,则返回 True
x = 5

result = not (x > 0)
print(result)  # 输出:False
  • 在上述例子中,not (x > 0) 表示对条件 x > 0 取反,因为 x > 0True,所以结果为 False

【4】连续问题

(1)连续多个 and

  • 在连续多个 and 运算中,如果其中一个条件为 False,则整个表达式的结果为 False,即使后面的条件都为 True
x = 5
y = 10
z = 15

result = (x > 0) and (y > 0) and (z > 0)
print(result)  # 输出:True
  • 在上述例子中,(x > 0) and (y > 0) and (z > 0) 表示同时判断 x > 0y > 0z > 0 是否都为 True,因为三个条件都满足,所以结果为 True

(2)连续多个 or

  • 在连续多个 or 运算中,如果其中一个条件为 True,则整个表达式的结果为 True,即使后面的条件都为 False
x = 5
y = 10
z = -15

result = (x > 0) or (y > 0) or (z > 0)
print(result)  # 输出:True
  • 在上述例子中,(x > 0) or (y > 0) or (z > 0) 表示判断 x > 0y > 0z > 0 至少有一个条件为 True,因为 x > 0True,所以结果为 True

【5】优先级 not>and>or

  • 在逻辑运算中,not 的优先级最高,其次是 and,最后是 or
  • 当表达式中同时包含这三种运算符时,not 会首先被计算,然后是 and,最后是 or

(1)优先级关系

print(3 > 4 and 4 > 3 or 1 == 3 and 'x' == 'x' or 3 > 3)
# False

(2)区分版块

  • (1) not的优先级最高,就是把紧跟其后的那个条件结果取反,所以not与紧跟其后的条件不可分割
  • (2) 如果语句中全部是用and连接,或者全部用or连接,那么按照从左到右的顺序依次计算即可
  • (3) 如果语句中既有and也有or,那么先用括号把and的左右两个条件给括起来,然后再进行运算
print((3 > 4 and 4 > 3) or (1 == 3 and 'x' == 'x') or 3 > 3)
# False

【五】成员运算符

  • 成员运算符用于测试序列是否包含特定的元素。可以用于字符串、列表、元组等序列类型的数据。

【1】in运算符

  • 如果在指定的序列中找到值返回 True,否则返回 False。
fruits = ["apple", "banana", "cherry"]

print("banana" in fruits)  # True
print("orange" in fruits)  # False

【2】not in运算符

  • 如果在指定的序列中没有找到值返回 True,否则返回 False。
fruits = ["apple", "banana", "cherry"]

print("banana" not in fruits)  # False
print("orange" not in fruits)  # True
  • 这两个运算符可以用于字符串、列表、元组等序列类型。

【3】小结

print(not 'lili' in ['jack','tom','robin'])
# True

print('lili' not in ['jack','tom','robin'])
# True
  • 注意:虽然下述两种判断可以达到相同的效果,但我们推荐使用第二种格式,因为not in语义更加明确

【六】身份运算符

  • 身份运算符用于比较对象的内存地址,即判断两个对象是否指向同一块内存地址。

【1】is运算符

  • 如果两个变量引用同一个对象,则返回 True,否则返回 False。
a = [1, 2, 3]
b = a
c = [1, 2, 3]

print(a is b)  # True
print(a is c)  # False

【2】is not运算符

  • 如果两个变量引用的不是同一个对象,则返回 True,否则返回 False。
a = [1, 2, 3]
b = a
c = [1, 2, 3]

print(a is not b)  # False
print(a is not c)  # True
  • 这两个运算符主要用于检查对象的标识,即它们是否指向相同的内存地址。

【补充】==is

  • == 双等号比较的是value是否相等
  • is用于比较两个对象的标识id(内存地址)是否相同
  • 在实际应用中,特别是对于可变对象,==通常更适合用于比较值,而is更适合用于比较对象的身份。
  • id相同,内存地址必定相同,意味着type和value必定相同
  • value相同type肯定相同,但id可能不同
x = 'Info Tony:18'
y = 'Info Tony:18'
print(id(x), id(y))  # x与y的id不同,但是二者的值相同
# 3158064309168 3158064309168

print(x == y)  # 等号比较的是value
# True

print(type(x), type(y))  # 值相同type肯定相同
# (<class 'str'>, <class 'str'>)

print(x is y)  # is比较的是id,x与y的值相等但id可以不同
# True

【六】流程控制(if-elif-else)

【一】流程控制语句介绍

  • 程序是由语句构成,而流程控制语句 是用来控制程序中每条语句执行顺序的语句。
    • 可以通过控制语句实现更丰富的逻辑以及更强大的功能。
    • 几乎所有编程语言都有流程控制语句,功能也都基本相似。
  • 其流程控制方式有
    • 顺序结构
    • 分支结构
    • 循环结构
  • 这里最简单最常用的就是顺序结构,即语句从上至下一一执行。

【二】什么是顺序结构

  • 在计算机程序中,顺序结构是指按照代码书写的顺序,一条语句接着一条语句执行,没有跳过、重复或其他特殊的结构。
  • 程序按照从上到下的顺序逐行执行

【三】顺序结构的作用

  • 顺序结构用于按照既定的顺序执行一系列的操作,这是程序执行的最基本模式。
  • 通过良好的顺序结构,可以清晰地表达程序的逻辑流程,使代码易读易懂。
  • 这有助于开发者理解和维护代码,也方便调试。

【四】单分支结构(if)

  • 单分支结构指的是程序根据条件的成立与否,执行两个分支中的其中一个。
  • 常见的单分支结构语法是if语句。

(1)语法

if 条件:
    # 如果条件成立,执行这里的代码块

(2)使用

  • 单分支结构用于在条件成立时执行相应的代码块。例如:
age = 18
if age >= 18:
    print("你已成年,可以参加投票。")

(3)补充

  • Python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行
  • 条件可以是任意表达式,但执行结果必须为布尔类型
  • 在if判断中所有的数据类型也都会自动转换成布尔类型
    • None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False
    • 其余均为True

【五】双分支结构(if-else)

  • 双分支结构也是根据条件的成立与否,选择性地执行不同的代码块。
  • 与单分支结构不同的是,双分支结构有两个分支,分别对应条件成立和条件不成立的情况。

(1)语法

if 条件:
    # 如果条件成立,执行这里的代码块
else:
    # 如果条件不成立,执行这里的代码块

(2)使用

  • 双分支结构用于在条件成立时执行一个代码块,在条件不成立时执行另一个代码块。例如:
age = 16
if age >= 18:
    print("你已成年,可以参加投票。")
else:
    print("你还未成年,不能参加投票。")

【六】多分支结构(if-elif-else)

  • 多分支结构是在双分支结构的基础上扩展,它包含多个分支,每个分支都对应不同的条件。
  • 程序根据条件的成立情况选择性地执行相应的代码块。

(1)语法

if 条件1:
    # 如果条件1成立,执行这里的代码块
elif 条件2:
    # 如果条件1不成立且条件2成立,执行这里的代码块
else:
    # 如果条件1和条件2都不成立,执行这里的代码块

(2)使用

  • 多分支结构用于根据不同的条件选择性地执行相应的代码块。例如:
score = 85
if score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")
else:
    print("一般")

【七】多层嵌套结构

  • 多层嵌套结构是将多个分支结构嵌套在一起形成的复杂结构。
  • 每一层的分支结构都可以根据不同的条件进行选择性的执行。
  • 多层嵌套结构的使用需要注意代码的可读性和维护性。

(1)语法

  • 多层嵌套结构是通过在不同层次上使用if语句嵌套形成的结构。

(2)使用

  • 多层嵌套结构可以根据多个条件的组合选择性地执行代码块。例如:
age = 25
if age >= 18:
    if age <= 25:
        print("年龄在18到25岁之间。")
    else:
        print("年龄大于25岁。")
else:
    print("年龄小于18岁。")