Python基础(字符串的切片与断言)

'''
1. 输入一个字符串,判断是否只包含英文字母(大写或小写)。输出 True 或 False 。
2. 输入一个字符串,统计里面数字字符(0-9)的数量。
3. 输入两个字符串,第一个是主串,第二个是要查找的字符,判断字符是否在主串中。
4. 输入一个字符串,将所有数字字符转换成整数后求和。
5. 统计字符串中空格的数量
6. 输入字符串和数字n,判断字符串是否只包含数字且长度等于n。
7. 验证用户输入的手机号格式(中国手机号)手机号必须是11位数字且以“1”开头。
13. 验证电子邮箱格式(简单版)
	必须包含且仅包含一个“@”,且“@”前后均非空,且“@”后至少包含一个“.”,且“.”不能在末尾。
14. 检查并解析输入的员工工号
工号格式:部门代码(3个大写字母)+“-”+4位数字,例如“HRD-0234”。验证格式并提取部门代码和数
字部分。
16. 校验密码强度
    密码长度至少8位,必须包含大小写字母和数字,不能有空格,且不能含有连续3个相同字符。
'''
# 1
s = 'ab12CD'
flag = True
for ch in s:
    if 'a' < ch < 'z' or 'A' < ch < 'Z':
        flag = True
    else:
        flag = False
        break
print(flag)

# 2
count = 0
for ch in s:
    if '0' <= ch <= '9':
        count += 1
print(count)

# 3
s = 'hello'
sub = 'elr'
print(sub in s)

# 4
s = 'ab234cf'
sum = 0
for ch in s:
    if '0' <= ch <= '9':
        sum += float(ch)
print(sum)

# 5
s = 'h e ll o'
count = 0
for ch in s:
    if ch == ' ':
        count += 1
print(count)

# 6
s = '1234'
n = 4
if len(s) == n:
    for ch in s:
        if ch < '0' or ch > '9':
            print('不是纯数字')
            break
    else:
        print('字符串正确')

else:
    print('长度错误')

# 7
flag = True
s = '15676846787'
if s.startswith('1') and len(s) == 11:
    for ch in s:
        if ch < '0' or ch > '9':
            # print('不是纯数字')
            flag = False
            break
    else:
        flag = True
else:
    # print('必须以1开头或长度是11位')
    flag = False

print(flag)

# 13 必须包含且仅包含一个“@”,且“@”前后均非空,且“@”后至少包含一个“.”,且“.”不能在末尾。
s = '[email protected].'
flag = True
index = s.find('@')  # @的索引
# 只有一个@
if index != s.rfind('@'):
    flag = False
# @前后非空
elif s[index - 1] == ' ' or s[index + 1] == ' ':
    flag = False
# .在@后
elif index > s.rfind('.'):
    flag = False

elif s.rfind('.') == len(s) - 1:
    flag = False

print(flag)

# 14
s = 'HRD-0234'
flag = True
for i in range(3):
    if s[i] < 'A' or s[i] > 'Z':
        flag = False

flag2 = True
for i in range(4, 8):
    if s[i] < '0' or s[i] > '9':
        flag2 = False

if flag and flag2:
    print('格式正确')
else:
    print('格式错误')


# 16
s = 'Abbcc1238'
flag1 = False  # 默认没有数字
for ch in s:
    if '0' < ch < '9':
        flag1 = True
        break
flag2 = False  # 默认没有大写字母
for ch in s:
    if 'A' < ch < 'Z':
        flag2 = True
        break
flag3 = False  # 默认没有小写字母
for ch in s:
    if 'a' < ch < 'z':
        flag3 = True
        break
flag = True  # 最终结果
if len(s) < 8:
    flag = False
elif " " in s:
    flag = False
elif not (flag1 and flag2 and flag3):
    flag = False
else:
    # 连续3个字符
    temp = s[0]  # A 记录相同字符
    count = 1  # 1 记录连续次数
    for index in range(1, len(s)):
        if s[index] == temp:
            count += 1
            if count == 3:
                flag = False
                break
        else:
            temp = s[index]
            count = 1
print(flag)

依旧是之前练习的答案,从学了循环之后,代码的长度和复杂度会显著上升一个层次,因此需要对每一步代码都充分的分析解读,最终了解其中原理

接下来我们进入正题

字符串的切片

Python的切片功能相比于其他编程语言格外的简洁方便,同时也是我们经常会用到的一种功能

切片基本语法

字符串[开始索引:结束索引:步长]

s[start:end:step]
start:开始位置,开头或结尾默认不写,可正可负
end: 结束位置,,开头或结尾默认不写,可正可负
step: 跨越的步长,可正可负,1可以默认不写

如果start 如果start>end,步长为负

注:与range函数一样,start包含在索引中,而end值不包含在索引

text = "Python字符串处理"

# 基本切片
print(text[0:6])       # Python(索引0-5)
print(text[6:9])       # 字符(索引6-8)
print(text[10:])       # 处理(索引10到最后)

# 负索引
print(text[-4:])       # 处理(倒数第4个到最后)
print(text[-8:-4])     # 符串(倒数第8到倒数第5)

# 步长控制
print(text[::2])       # Pto字处(每隔一个字符)
print(text[::-1])      # 理处串符字nohtyP(反转字符串)

以上就是对字符串切片最基础的运用,同时还有一些简单的方法需要介绍

# 替换字符串中的部分内容
text = "我爱Java编程"
new_text = text[:2] + "Python" + text[5:]
print(new_text)  # 我爱Python编程

字符串断言

字符串断言与字符串方法类似,但字符串断言只能返回True和False两个值

# 数字判断
print("123".isdigit())     # True(只包含阿拉伯数字)
print("²34".isnumeric())   # True(包含各种数字字符)
print("12.3".isdigit())    # False(小数点不是数字)

# 字母判断
print("Hello".isalpha())   # True(是否包含unicode字母,包括中文,日文,韩文等字母)
print("你好".isalpha())     # True(中文字符)
print("Python3".isalpha()) # False(包含数字)

# 字母数字组合
print("Python2023".isalnum())  # True
print("Python!".isalnum())     # False(包含特殊符号)

# ASCII字符判断
print("Python123!".isascii())  # True
print("你好".isascii())         # False(非ASCII字符)

# 大小写判断
print("hello".islower())       # True
print("HELLO".isupper())       # True
print("Hello".islower())       # False

# 空格判断
print("   ".isspace())         # True
print(" a ".isspace())         # False

断言方法常用于验证格式、检验密码强度、数据清洗等场景,是我们在工作中经常会用到的功能

例题

日期验证
date_str = "2023-08-15"

# 切片提取年月日
year = date_str[:4]
month = date_str[5:7]
day = date_str[8:]

# 断言验证
if year.isdigit() and month.isdigit() and day.isdigit():
    print(f"有效日期: {year}年{month}月{day}日")
else:
    print("日期格式错误")

断言方法可以多种组合使用来进行限制,如

ch.isascii() and ch.isalpha() and ch.isupper()
# 三种断言连在一起就能将字符串限定为大写英文字母

字符串的各种方法是互相连通,在完成以下练习之前,还是要对之前的字符串方法进行一个简单回顾,再结合刚学习的切片和断言,字符串的相关内容基本就没什么难度了

1.从用户那里获取一个字符串,将字符串中的所有小写字母转换为大写字母,其他字符保持不变。

2.从用户那里获取一个字符串,输出该字符串的反转版本

3.以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽,最终效果为: 131****9468

4.身份证的每一位都是有固定的含义:
	1、2位:省份,3、4位:城市,5、6位:区县
	7-14位:出生年、月、日,15、16位:所在地派出所
	17位:性别(奇数男性,偶数女性),18位:个人信息码(随机产生)
	要求打印内容方式如下:
	人物信息为:
		出生年月日:XXXX年X月X日
		性别为:男/女
5. 检查优惠券码格式,优惠券码格式要求:长度8,前2位大写字母,后6位数字

6.从用户那里获取一个字符串和一个整数 k,将字符串向右轮转 k 个位置。
  例如,字符串 abcdefg 向右轮转 2 个位置后变为 fgabcde。

7.密码长度12-16位,必须包含大写字母、小写字母、数字、特殊符号( !@#$%^&* ),且不能有连续两
个相同字符。

8.将第一个字符串与第二个字符串进行拼接,abcdefg  1234 拼接结果a4b3c2d1efg

9. 判断输入的商品条码中是否存在连续递增或递减的数字序列(长度>=4)
   例如 "A1234567Z" 中有连续递增序列 1234 ,返回True。

你可能感兴趣的:(python,开发语言,pycharm)