day7.关于字符串的相关操作
一、字符串的相关操作
"""
(1)字符串的拼接
(2)字符串的重复
(3)字符串跨行拼接
(4)字符串的索引
(5)字符串的切片:
语法 => 字符串[::] 完整格式:[开始索引:结束索引:间隔值]
(1)[开始索引:] 从开始索引截取到字符串的最后
(2)[:结束索引] 从开头截取到结束索引之前(结束索引-1)
(3)[开始索引:结束索引] 从开始索引截取到结束索引之前(结束索引-1)
(4)[开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取字符
(5)[:]或[::] 截取所有字符串 """
1、字符串的拼接
# (1)字符串的拼接 +
strvar = "今天是" + "星期一"
strvar += ",今天非常开心"
print(strvar)
2、字符串的重复
# (2)字符串的重复 *
strvar = "重要的事情说三遍" * 3
print(strvar)
3、字符串跨行拼接
strvar = "sdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdf" \
"多余的几行放在第二行进行显示"
print(strvar)
4、字符串的索引
# 正向索引 0123
strvar = ""
# 逆向索引 -4-3-2-1
5、字符串的切片
# (5)字符串的切片:(切片 <=> 截取)
# (1)[开始索引:] 从开始索引截取到字符串的最后
strvar = "黑夜给我了黑色的眼睛,但是我却用翻白眼"
res = strvar[11:]
print(res) # (2)[:结束索引] 从开头截取到结束索引之前(结束索引-1)
res = strvar[:10]
print(res) # (3)[开始索引:结束索引] 从开始索引截取到结束索引之前(结束索引-1)
res = strvar[8:10]
print(res) # (4)[开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取字符
# 正序
res = strvar[::3] # 0 3 6 9 12 15 ....从开始截取到最后
print(res)
# 倒序
res = strvar[::-1] # -1 -2 -3 -4 -5 -6 -7 ...
print(res) # (5)[:]或[::] 截取所有字符串
res = strvar[:]
res = strvar[::]
print(res)
二、字符串相关函数


# ### 字符串相关函数
# *capitalize 字符串首字母大写
strvar = "how old are you"
res = strvar.capitalize()
print(res) # *title 每个单词的首字母大写
strvar = "how old are you"
res = strvar.title()
print(res) # *upper 将所有字母变成大写
strvar = "to be or not to be that is a question"
res = strvar.upper()
print(res) # *lower 将所有字母变成小写
res = strvar.lower()
print(res) # *swapcase 大小写互换
strvar = "I Love You"
res = strvar.swapcase()
print(res) # *len 计算字符串的长度
strvar = "adfs234sdfsa"
res = len(strvar)
print(res) # *count 统计字符串中某个元素的数量
strvar = "adfs234sdfsa"
res = strvar.count("a")
print(res) # *find 查找某个字符串第一次出现的索引位置 (推荐)
"""字符串.find("字符",开始索引,结束索引) 如果找不到直接返回-1"""
strvar = "oh Father this is my Favorate dog"
res = strvar.find("F")
res = strvar.find("F",4)
res = strvar.find("Fav",5,10) # 结束索引本身取不到,取到之前的那个值
print(res) # *index 与 find 功能相同 find找不到返回-1,index找不到数据直接报错
# res = strvar.index("Fav",5,10) error # *startswith 判断是否以某个字符或字符串为开头
"""字符串.startswith("字符",开始索引,结束索引) 如果存在返回True,否则返回False"""
strvar = "oh Father this is my Favorate dog"
res = strvar.startswith("oh")
res = strvar.startswith("this",10)
res = strvar.startswith("this",10,13) # 10 11 12
print(res) # *endswith 判断是否以某个字符或字符串结尾
res = strvar.endswith("dog")
res = strvar.endswith("rate",-12)
res = strvar.endswith("rate",-12,-4)
print(res) # *isupper 判断字符串是否都是大写字母
strvar = "ABCD"
res = strvar.isupper()
print(res) # *islower 判断字符串是否都是小写字母
strvar = "abcdd12345"
res = strvar.islower()
print(res) # *isdecimal 检测字符串是否以数字组成 必须是纯数字
strvar = ""
strvar = "12354.8979112"
res = strvar.isdecimal()
print(res) strvar = "abc"
#ljust 填充字符串,原字符居左 (默认填充空格)
res = strvar.ljust(10)
print(res)
#rjust 填充字符串,原字符居右 (默认填充空格)
res = strvar.rjust(10,"&")
print(res)
# *center 填充字符串,原字符居中 (默认填充空格) res = strvar.center(10) # 原字符串长度 + 填充字符长度 = 10 ,默认填充空格
res = strvar.center(10,"#")
print(res) # *strip 默认去掉首尾两边的空白符
strvar = "@@@@@ 周杰伦 @@@@@"
res = strvar.strip()
res = strvar.strip("@") # 指定去掉的符号
print(res) strvar = "@@@@@ 周杰伦 @@@@@"
#rstrip 去掉右边某个字符
print( strvar.rstrip("@") )
#lstrip 去掉左边某个字符
print( strvar.lstrip("@") ) # 重要!!!
# *split 按某字符将字符串分割成列表(默认字符是空格)
strvar = "you can you up no can no bb"
lst = strvar.split()
strvar = "you-can-you-up-no-can-no-bb"
lst = strvar.split("-") # 从左到右分隔
lst = strvar.rsplit("-",2)# 从右到左分隔,(可以指定分隔的次数)
print(lst) # *join 按某字符将列表拼接成字符串(容器类型都可)
lst = ['you', 'can', 'you', 'up', 'no', 'can', 'no', 'bb']
res = "-".join(lst)
print(res) # *replace 替换,把字符串的旧字符换成新字符
"""replace(要替换的字符,替换成什么,替换的次数)"""
strvar = "可爱的小青蛙喜欢吃蚊子,有没有,有没有,还有没有"
res = strvar.replace("有没有","真没有")
res = strvar.replace("有没有","真没有",1)
print(res)
字符串相关函数


# test = "username\temail\tpassword\nkxssq\t113555\t123456\nkxq\t113555\t123456\nkxq\t113555\t123456"
# v = test.expandtabs(10)
# print(v) # 首字母大写
# test = "adfs"
# v = test.capitalize()
# print(v) # 大写转小写 lower只能对应英文字符 casefold可以特殊字符
# test = "aSdf"
# v1 = test.casefold()
# print(v1)
# v2 = test.lower()
# print(v2) # 设置宽度,并将内容居中
# 20总长度,把aSdf居中
# test = "aSdf"
# v = test.center(20, '*')
# print(v) # 空白未知填充,一个字符可有可无
# test = "kxq"
# v1 = test.ljust(20, '*')
# print(v1)
# v2 = test.rjust(20, '*')
# print(v2)
# v3 = test.zfill(20)
# print(v3) # 字符串出现的次数
# test = "aSdffaSdff"
# v = test.count('a')
# print(v) # 字符串在第几个字符之间出现的次数 a 0
# test = "aSdffaSdff"
# v = test.count('aS', 5, 11)
# print(v) # encode
# decode
# test = "aSdffaSdff"
# print(test.encode("gbk"))
# print(test.encode("utf-8")) # 以什么结尾
# test = "asdf"
# v = test.endswith('f')
# print(v)
# # 以什么开始
# test = "asdf"
# v = test.startswith('a')
# print(v) # 从开始往后找,找到第一个后,获取下标 >=5 <7 未找到-1
# 方法index() 找不到会报错 忽略用find 找不到返回-1
# test = "asdfasdf"
# v = test.find('sd', 5, 7)
# print(v) # 格式化,将字符串中的占位符替换为指定的值
# test = "i an {name}"
# v = test.format(name = 'kxq')
# print(v)
# test = "i an {0}"
# v = test.format('kxq')
# print(v)
#
# test = "i an {name}"
# v = test.format_map({"name": "kxq"})
# print(v) # 字符串中是否只包含字母数字
# test = "adf89-_"
# v = test.isalnum()
# print(v) # 字符串中是否是字母、汉字
# test = "adf89-_"
# v = test.isalpha()
# print(v) # 判定当前输入的是否是数字 isdigit()可以判定特殊的数字 例:圈2
# test = "123"
# v1 = test.isdecimal()
# v2 = test.isdigit() # 圈 2
# v3 = test.isnumeric() # 这种“二”也是数字
# print(v1, v2) # 是否存在不可显示的字符 \t \n
# test = "af\nds"
# v = test.isprintable()
# print(v) # 判断是否全部是空格
# test = "af dsd"
# v = test.isspace()
# print(v) # 判断是否是标题
# test = " Return True if the string is a title-cased string, False otherwise"
# v1 = test.istitle()
# print(v1)
# v2 = test.title()
# print(v2)
# v3 = v2.istitle()
# print(v3) # 将字符串中的每一个元素按照指定分隔符进行拼接
# test = "你是风儿我是沙"
# print(test)
# t = " "
# v = t.join(test)
# print(v) # lower:判断字符串是否全部为小写,字符串都变为小写 upper:判断字符串是否全部为大写,字符串都变为大写
# test = "Kxq"
# v1 = test.islower()
# v2 = test.lower()
# v3 = v2.islower()
# print(v1, v2, v3)
# v4 = test.isupper()
# v5 = test.upper()
# v6 = v5.isupper()
# print(v4, v5, v6) # # 去除左右 全部空格 \n \t 可移除指定字符串,有限最多匹配 test.rstrip(qx)
# test = " kxq "
# v1 = test.lstrip()
# v2 = test.rstrip()
# v3 = test.strip()
# print(v1)
# print(v2)
# print(v3) # v1建立对应关系,v1把test中字符aeiou替换为12345
# test = "fdasfgdasgas;aeiouasdfg;erwqiopjmfa"
# v1 = str.maketrans("aeiou", "12345")
# v2 = test.translate(v1)
# print(v2) # 以‘f’ 为分隔符,进行分割 parttition:从左到右 rpartition:从右到左 包含字符‘f’
test = "adfajlkupowerfsd"
v1 = test.partition('f')
print(v1)
# v2 = test.rpartition('f')
# print(v2)
# # 不包含字符'f'
# v3 = test.split('f')
# print(v3)
# v4 = test.rsplit('f')
# print(v4)
#
# # 分割,只能根据\n True包含\n False不包含\n
# test = "fasfs\ngasgf\natsgf"
# v1 = test.splitlines(True)
# print(v1)
# v2 = test.splitlines(False)
# print(v2) # 以***开头,以***结尾
# test = "fasgsafg"
# v1 = test.startswith('fa')
# print(v1)
# v2 = test.endswith('fg')
# print(v2) # 大小写转换
test = "kXq"
v1 = test.swapcase()
print(v1)
相对完整举例字符串函数
三、字符串的格式化 format


# (1)顺序传参
strvar = "{}向{}开了一枪,银弹而亡".format("李志辉","明浩")
print(strvar) # (2)索引传参
strvar = "考试时{1},游戏时{0}".format("唯唯诺诺","重拳出击")
print(strvar) # (3)关键字传参
strvar = "{who2}甩了一个飞吻,{who1}神魂颠倒".format(who1="刘彩霞",who2="马生平")
print(strvar) # (4)容器类型数据(列表或元祖)传参
strvar = "{1[2]}向{0[0]}抛了一个媚眼,鼻血直冒三万多尺,失血而亡".format(["孙翔群","曹晨光","宋云杰"],("李亚","孙致和","温子月"))
print(strvar) # format当中,不能使用逆向下标,不识别
strvar = "{group2[0]}向{group1[-1]}抛了一个媚眼,鼻血直冒三万多尺,失血而亡".format(group1 = ["孙翔群","曹晨光","宋云杰"],group2 = ("李亚","孙致和","温子月"))
print(strvar) # 如果容器是字典,直接写键值,不需要加上引号
strvar = "{group1[ccg]}向{group2[1]}抛了一个媚眼,鼻血直冒三万多尺,失血而亡".format(group1 = {"kxq":"孙翔群","ccg":"曹晨光","syj":"宋云杰"},group2 = ("李亚","孙致和","温子月"))
print(strvar)
format
1、format填充符号的使用


"""
^ 原字符串居中
> 原字符串居右
< 原字符串居左 {who:*^10}
who : 关键字参数
* : 要填充的字符
^ : 原字符串居中
10 : 总长度 = 原字符串长度 + 填充字符长度
""" strvar = "{who:*^10}在{where:>>10},{do:!<10}".format(who="刘鹏",where="电影院",do="拉屎")
print(strvar) # (6)进制转换等特殊符号的使用( :d :f :s :, ) # :d 整型占位符 (要求类型必须是整型)
strvar = "刘子豪昨天买了{:d}个花露水".format(100) # 100.5error
print(strvar)
# :2d 占用两位,不够两位拿空格来补,默认居右
strvar = "刘子豪昨天买了{:2d}个花露水".format(3)
# < > ^ 调整对应的位置
strvar = "刘子豪昨天买了{:<2d}个花露水".format(3)
strvar = "刘子豪昨天买了{:^3d}个花露水".format(3)
print(strvar) # :f 浮点型占位符 (要求类型必须是浮点型)
strvar = "刘心毕业时,找工作的薪资是{:f}".format(2.5)
# :.2f 小数点保留2位
strvar = "刘心毕业时,找工作的薪资是{:.2f}".format(2.56789)
print(strvar) # :s 字符串占位符 (要求类型必须是浮点型)
strvar = "{:s}".format("今天天气不错,万里无云")
print(strvar) # :, 金钱占位符
strvar = "{:,}".format(123456789)
print(strvar)
填充符号的使用
四、练习
'''
1.有变量name = "aleX leNb" 完成如下操作: 移除 name 变量对应的值两边的空格,并输出处理结果
1)移除name变量左边的"al"并输出处理结果
2)移除name变量右面的"Nb",并输出处理结果
3)移除name变量开头的a与最后的"b",并输出处理结果
4)判断 name 变量是否以 "al" 开头,并输出结果
5)判断name变量是否以"Nb"结尾,并输出结果
6)将 name 变量对应的值中的 所有的"l" 替换为 "p",并输出结果
7)将name变量对应的值中的第一个"l"替换成"p",并输出结果
8)将 name 变量对应的值根据 所有的"l" 分割,并输出结果。
9)将name变量对应的值根据第一个"l"分割,并输出结果。
10)将 name 变量对应的值变大写,并输出结果
11)将 name 变量对应的值变小写,并输出结果
12)将name变量对应的值首字母"a"大写,并输出结果
13)判断name变量对应的值字母"l"出现几次,并输出结果
14)如果判断name变量对应的值前四位"l"出现几次,并输出结果
15)从name变量对应的值中找到"N"对应的索引(如果找不到则报错),并输出结果
16)从name变量对应的值中找到"N"对应的索引(如果找不到则返回-1)输出结果
17)从name变量对应的值中找到"X le"对应的索引,并输出结果
18)请输出 name 变量对应的值的第 2 个字符?
19)请输出 name 变量对应的值的前 3 个字符?
20)请输出 name 变量对应的值的后 2 个字符?
21)请输出 name 变量对应的值中 "e" 所在索引位置? 2.实现一个整数加法计算器(两个数相加):
如:content = input("请输入内容:") 用户输入:5+9或3+ 9或5 + 6,然后进行分割再进行计算 3.升级题:实现一个整数加法计算器(多个数相加):
如:content = input("请输入内容:") 用户输入:5+9+6 +12+ 13,然后进行分割再进行计算。 4.计算用户输入的内容中有几个整数(以个位数为单位)。
如:content = input("请输入内容:") # 如fhdal234slfh98769fjdla 5.等待用户输入内容,是否包含敏感字符?
如果存在敏感字符提示“存在敏感字符请重新输入”,敏感字符:“粉嫩”、“铁锤” 6.制作趣味模板程序需求:等待用户输入名字、地点、爱好
拼装数据打印出:敬爱可亲的xxx,最喜欢在xxx地方xxx
'''


# 0)移除 name 变量对应的值两边的空格,并输出处理结果
res = name.strip()
print(res)
1.0


# 1)移除name变量左边的"al"并输出处理结果
res = name.lstrip("al")
res = name[2:]
print(res)
1.1


# 2)移除name变量右面的"Nb",并输出处理结果
res = name.rstrip("Nb")
res = name[:-2]
print(res)
1.2


# 3)移除name变量开头的a与最后的"b",并输出处理结果
print(name[1:-1])
res = name.strip("ab")
print(res)
1.3


# 4)判断 name 变量是否以 "al" 开头,并输出结果
print(name.startswith("al"))
1.4


# 5)判断name变量是否以"Nb"结尾,并输出结果
print(name.endswith("Nb"))
1.5


# 6)将 name 变量对应的值中的 所有的"l" 替换为 "p",并输出结果
print(name.replace("l","p") )
1.6


# 7)将name变量对应的值中的第一个"l"替换成"p",并输出结果
print(name.replace("l","p",1) )
1.7


# 8)将 name 变量对应的值根据 所有的"l" 分割,并输出结果。
print(name.split("l"))
1.8


# 9)将name变量对应的值根据第一个"l"分割,并输出结果。
print(name.split("l",1))
1.9


# 10)将 name 变量对应的值变大写,并输出结果
print(name.upper())
1.10


# 11)将 name 变量对应的值变小写,并输出结果
print(name.lower())
1.11


# 12)将name变量对应的值首字母"a"大写,并输出结果
print(name.capitalize())
1.12


# 13)判断name变量对应的值字母"l"出现几次,并输出结果
name.count("l")
1.13


# 14)如果判断name变量对应的值前四位"l"出现几次,并输出结果
print(name.count("l",0,4))
1.14


# 15)从name变量对应的值中找到"N"对应的索引(如果找不到则报错),并输出结果
name.index("N")
1.15


# 16)从name变量对应的值中找到"N"对应的索引(如果找不到则返回-1)输出结果
name.find("N")
1.16


# 17)从name变量对应的值中找到"X le"对应的索引,并输出结果
name.find("X le")
1.17


# 18)请输出 name 变量对应的值的第 2 个字符?
name[1]
1.18


# 19)请输出 name 变量对应的值的前 3 个字符?
name[:3]
1.19


# 20)请输出 name 变量对应的值的后 2 个字符?
name[-2:]
1.20


# 21)请输出 name 变量对应的值中 "e" 所在索引位置?
name = "aleX leNb"
print(name.find("e")) i = 0
while i<len(name):
if name[i] == "e":
print(i)
i+=1
1.21


# 2.实现一个整数加法计算器(两个数相加):
# 如:content = input("请输入内容:") 用户输入:5+9或3+ 9或5 + 6,然# 后进行分割再进行计算
content = input("请输入内容:")
print(content)
a,b = content.split("+")
total = int(a) + int(b)
print(total) print( int(" 6 ") )
2


# 3.升级题:实现一个整数加法计算器(多个数相加):
# 如:content = input("请输入内容:") 用户输入:5+9+6 +12+ 13,然后进行分割再进行计算。
content = input("请输入内容:")
lst = content.split("+")
total = 0
print(lst)
for i in lst:
total += float(i)
print(total) total = 0
content = input("请输入内容:")
for i in content :
if i.isdecimal():
total += 1 print(total)
3


# 5.等待用户输入内容,是否包含敏感字符?
# 如果存在敏感字符提示“存在敏感字符请重新输入”,敏感字符:“粉嫩”、“铁锤”
while True:
sign = False
strvar = input("请输入内容:")
lst = ["粉嫩","铁锤"]
for i in lst:
if i in strvar:
sign = True
print("有敏感词汇") if sign == False:
print("这个名字可以使用") # for .. else .. 如果遇到break终止循环,else这个分支不执行;
for i in range(3):
print(i)
if i == 1:
break
else:
print("ok") while True:
sign = False
strvar = input("请输入内容:")
lst = ["粉嫩","铁锤"]
for i in lst:
if i in strvar:
print("有敏感词汇!")
break
else:
print("这个名字可以使用!")
5


# 6.制作趣味模板程序需求:等待用户输入名字、地点、爱好
# 拼装数据打印出:敬爱可亲的xxx,最喜欢在xxx地方xxx name = input("请输入名字:")
place = input("请输入地点:")
hobby = input("请输入爱好:") print("敬爱可亲的{},最喜欢在{}地方{}".format(name,place,hobby))
6
day7.关于字符串的相关操作的更多相关文章
- Python字符串的相关操作
1.大小写转换 判断字符串 s.isalnum() #所有字符都是数字或者字母 s.isalpha() #所有字符都是字母 s.isdigit() #所有字符都是数字 s.islower() #所有字 ...
- 路径打印(set以及字符串的相关操作)
题目链接 题目描述 给你一串路径,譬如: a\b\c a\d\e b\cst d\ 你把这些路径中蕴含的目录结构给画出来,子目录直接列在父目录下面,并比父目录向右缩一格,就像这样: a b ...
- Java 常用知识点汇总(数据类型之间转换、字符串的相关操作-截取、转换大小写等)
1.Java四类八种数据类型 byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围- ...
- Python中的字符串及其相关操作
1.表示: 字符串可以用单引号或者双引号括起来,两者效果是完全一样的. 针对较长的字符串,也可以用三个引号括起来,即"""..."""或者' ...
- JS中字符串的相关操作
一.字符串的创建 创建一个字符串有几种方法.最简单的是用引号将一组字符包含起来,可以将其赋值给一个字符串变量. var myStr = "Hello, String!"; 可以用双 ...
- python基础学习一 字符串的相关操作
python的字符串 在python中,字符串是以unicode编码的,所以python的字符串支持多语言 对于单个字符的编码,python提供了ord()函数获取字符的整数表示,chr()函数是把编 ...
- Python 字符串的相关操作
s = "abcdefg" s1 = s.capitalize() # 把首字母变成大写, 返回给你一个新的字符串 print(s) print(s1) s = "ale ...
- python基础===【字符串】所有相关操作
#字符串的相关操作 #基本操作 #+ 字符串连接操作 str1 = '来是come走是go' str2 = '点头yes摇头no' result = str1 + str2 print(result) ...
- DateTimeHelper【日期类型与字符串互转以及日期对比相关操作】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 实现日期和字符串之间的转换以及日期的相关操作: 1.日期格式的字符串输出为Date类型: 2.将Date类型以指定格式输出: 3.将 ...
随机推荐
- 1.Unity3d的新建场景和保存场景
Unit3d开发游戏需要使用场景.一个游戏可以有多个场景,每个场景负责一个地图或者一片区域.游戏界面的显示,因此场景非常重要. 1.File->New Scene(Ctrl+N)新建场景 2.F ...
- postman设置页面详解
设置详解/General Trim keys and values in request body:如果使用form-data或者url-encoded的方式向服务器发送数据:将该选项设置为ON,则会 ...
- java 面向对象(十八):包装类的使用
1.为什么要有包装类(或封装类)为了使基本数据类型的变量具有类的特征,引入包装类. 2.基本数据类型与对应的包装类: 3.需要掌握的类型间的转换:(基本数据类型.包装类.String) 简易版:基本数 ...
- dataframe一次小实验
老师搞不清,一个ndarray[df['columns']==a],返回的是什么,目前看来应该是df[] == a 的索引
- AcWing 1208. 翻硬币
AcWing 1208. 翻硬币 原题链接 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能 ...
- PdfSharp库剪裁Pdf页面边缘空白部分
背景 网上下载下来的Pdf格式电子书放到Kindle后由于页面太大,缩放后字常常小得看不清,因此可以通过剪裁页面边缘的空白以缩小页面,使Kindle上显示的字放大.在GitHub上星最多的C# Pdf ...
- Linux下一只五颜六色的「猫」
大家好,我是良许. 有使用过 Linux 系统的小伙伴,肯定会使用过 cat 这个命令.当然,在 Linux 下,此猫非彼猫,这里的 cat 并不代表猫,而是单词 concatenate 的缩写. c ...
- 二、Python系列——time时间格式的转换及计算
# -*- coding:utf-8 -*- import pandas as pd import time import datetime start_date = '2020-06-08' # 一 ...
- oracle终止用户会话
1.创建两个测试用户进行实验 执行命令如下: create user test1 identified by 1; create user test2 identified by 1; grant d ...
- ASP.NET CORE之中间件-自定义异常中间件
参考资料:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1 1.一般A ...