python 字符串练习题

1、完成带时间统计的单行进度条
import time
scale = 50
print('执行开始'.center(scale//2,"-"))
start = time.perf_counter()
for i in range(1,scale+1):
    a = '#' * i
    b = '.' * (scale-i)
    c = (i/scale) * 100
    dur = time.perf_counter() -start
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c, a,b,dur),end='')
    time.sleep(0.1)
print('\n'+'执行结束'.center(scale//2,"-"))  
2、检查输入密码字符串的安全强度

​ 必须至少包含6个字符,否则重新输入

提示强度(1-4级):
1:'weak’
2:'below middle’
3:'above middle’
4:‘strong’

提示强度(1-4级,密码强度等级与包含字符种类个数的对应关系)
包含大写字母
包含小写字母
包含数字
包含指定的标点符号,.!;?<>/*

import string
while(1):
    pwd = input("请输入密码:")
    if not isinstance(pwd, str) or len(pwd)<6: 
        continue
    break
grade = {1:'weak', 2:'below middle', 3:'above middle', 4:'strong'}
flag = [False] * 4
for ch in pwd:
    if ch in string.digits:
        flag[0] = True
    elif ch in string.ascii_lowercase:
        flag[1] = True
    elif ch in string.ascii_uppercase:
        flag[2] = True
    elif ch in ',.!;?<>/*':
        flag[3] = True
grade.get(flag.count(True), 'error')

3、完善上节课作业“用户登录系统”
用户名密码三次机会
检查输入密码字符串的安全强度
检查输入用户名,必须为字符+数字
print("用户登录系统".center(26,'*'))
i = 3
data ={'usr1':'666','usr2':'777','usr3':'888'}
while(i):
    name = input('请输入用户名:')
    password = input('请输入密码:')
    # 检查输入用户名,必须为字符+数字
    if  not name.isalnum() :
        continue
    g =  check(password)
    print("安全强度为:",g)    
    if password == data.get(name):
        print("logging in....")
        break
    else:
        print('Wrong username or password! please reinput!')
    i = i-1
def check(pwd):    
    grade = {1:'weak', 2:'below middle', 3:'above middle', 4:'strong'}
    flag = [False] * 4
    for ch in pwd:
        if ch in string.digits:
            flag[0] = True
        elif ch in string.ascii_lowercase:
            flag[1] = True
        elif ch in string.ascii_uppercase:
            flag[2] = True
        elif ch in ',.!;?<>/*':
            flag[3] = True
    return grade.get(flag.count(True), 'error') 
4、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。数字a、几个数相加由键盘控制。

可以多种方法实现(format,join,+)
例如2+22+222+2222+22222(此时共有5个数相加)。步骤2,提取所有行,格式为:姓名出生年月电话号码
格式: 姓名:张三,出生年月1965年3月12日,15978965201

a = int(input("请输入数字:"))
number = int(input("请输入相加个数:"))
aa, sum = 0, 0
for i in range(1, number+1):
    aa += a * 10 ** (i-1)
    sum += aa
print(sum)
5、给定任意字符串,查找其中每个字符的最后一次出现,并按每个字符最后一次出现的先后顺序依次存入列表。
a = 'abcbda'
b = []
for i in a:
    b.append((a.rfind(i),i))
b = sorted(b)
c = []
for i in b:
    if i[1] in c:
        continue
    c.append(i[1])
print(c)
6、利用maketrans()、translate()实现凯撒密码。

凯撒加密就是通过将字母移动一定的位数来实现加密和解密。
明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移,被替换成密文。
例如,当偏移量是2的时候,所有的字母B将被替换成D,C变成E,以此类推Y将变成A,Z变成B。
由此可见,偏移量就是凯撒密码加密和解密的密钥。

key = input("请输入偏移量:")
mode = input("请输入加密和解密(encrypt or decrypt)):")
symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !?.'
ciphers = symbols[int(key):] + symbols[:int(key)]
transtab = str.maketrans(symbols, ciphers) if mode == 'encrypt' else str.maketrans(ciphers, symbols)
message = input("请输入要处理的文本:")
result = message.translate(transtab)
print(result)
7、利用字符串查找功能(count),找出一段话中每个只出现一次汉字的位置

text = ‘’‘东边来个小朋友叫小松,手里拿着一捆葱。
西边来个小朋友叫小丛,手里拿着小闹钟。
小松手里葱捆得松,掉在地上一些葱。
小丛忙放闹钟去拾葱,帮助小松捆紧葱.
小松夸小丛像雷锋,小丛说小松爱劳动。’’’

text = '''东边来个小朋友叫小松,手里拿着一捆葱。
西边来个小朋友叫小丛,手里拿着小闹钟。
小松手里葱捆得松,掉在地上一些葱。
小丛忙放闹钟去拾葱,帮助小松捆紧葱.
小松夸小丛像雷锋,小丛说小松爱劳动。'''
a = text.strip()
for i in a:
    if a.count(i) == 1:
        print(i)
8,hello+ world+ world+ world…+ world ,hello与10000个world连接

请比较分别使用join,+进行字符串连接的效率。哪种方法更快?借助time库

text = 'hello-'+'world-'*999+'world'

import time
start = time.perf_counter()
''.join(text.split('-'))
dur = time.perf_counter() -start
print(dur)    


import time
start = time.perf_counter()
a = ''
for i in text.split('-'):
    a = a + i
dur = time.perf_counter() -start
print(dur)  # join 快
#### 9、计算以下结果
import re
''.join(re.split('[sd]','asdssddd'))的值是('a''abcab'.replace('a','yy')的值是('yybcyyb''\x41'=='A'的值是(True)
已知a='abcdefg',则a[3:]+a[3:]的值是('defgdefg'eval("__import__('math').sqrt(9**2+4**2)")的值是(9.848857801796104
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44322234

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值