回顾---(2)

谨以此篇练习来回顾前段时间所学习到的字符串内建函数的一些知识。

1、practice 1

题目要求:
name 变量对应的值的前3个字符
逆序输出
编写代码如下:

name = input('请输入用户名:')
s = name[:3]
result = s[::-1]
print(result)

运行结果如下:

请输入用户名:天使的翅膀
的使天

2、practice 2

题目要求:
开发敏感词语过滤程序, 提示用户输入内容,如果用户输入的内容中包含特殊的字符:
如 一些政治敏感的词语,则将内容替换为 ***
编写代码如下:

content = input('请输入内容:')
content = content.replace('敏感', '***')
print(content)

运行结果如下:
(若输入的内容中没有敏感的词语,则输出不发生任何替换)

请输入内容:一些敏感的词语
一些***的词语

3、practice 3

题目要求:
循环提示用户输入:用户名、密码、邮箱 (要求用户输入的长度不超过 20 个字符,如果超过则只有前 20 个字符有效)
打印输出:
用户名 密码 邮箱
Admin 123 [email protected]
Lily 111 [email protected]

如果用户输入 q 或 Q 表示不再继续输入。
代码如下:(观看讲解视频中的代码)

s = ''
while True:
    print('输入的长度不超过 20 个字符,如果超过则只有前 20 个字符有效')
    username = input("请输入用户名:")
    password = input("请输入密码:")
    email = input("请输入邮箱:")
    username = username[0:20]
    password = password[0:20]
    email = email[0:20]   # 切片操作的取值范围包前不包后
    message = '{}\t{}\t{}\n'.format(username, password, email)
    message = message.expandtabs(20)
    s += message
    if username == 'q' or username == 'Q' or password == 'q' or password == 'Q' or email == 'q' or email == 'Q':
        break
print(s)

这里涉及一个字符串内建函数expandtabs(tabsize=8):意思是把字符串中的tab符号转变为空格,tab符号默认的空格数是8.
运行结果如下:

输入的长度不超过 20 个字符,如果超过则只有前 20 个字符有效
请输入用户名:Admin
请输入密码:123
请输入邮箱:[email protected]
输入的长度不超过 20 个字符,如果超过则只有前 20 个字符有效
请输入用户名:Lily
请输入密码:111
请输入邮箱:[email protected]
输入的长度不超过 20 个字符,如果超过则只有前 20 个字符有效
请输入用户名:q
请输入密码:q
请输入邮箱:[email protected]
Admin               123                 [email protected]
Lily                111                 [email protected]
q                   q                   [email protected]


4、practice 4

题目要求:
执行程序产生验证码,提示用户输入用户名,密码和验证码,如果正确,则提示登录成功,否则重新输入。(要求产生新的验证码)
编写代码如下:

while True:
    username = input("请输入用户名:")
    password = input("请输入密码:")
    code = ''
    for i in range(4):
        import random
        s = 'QWERTYUIOPSDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm12345678890'
        # print(len(s))
        ran = random.randint(0, len(s) - 1)
        sequence = s[ran]
        code += sequence
    print(code)
    code_input = input('请输入验证码:')
    if code.lower() == code_input:
        print('输入正确,登陆成功')
        break
    else:
        print('验证码错误!请重新登录')
        continue

运行结果如下:

请输入用户名:admin
请输入密码:123456
lH6p
请输入验证码:lh0p
验证码错误!请重新登录
请输入用户名:admin
请输入密码:123456
HHUv
请输入验证码:hhuv
输入正确,登陆成功

5、practice 5

题目要求:
输入一行字符,统计其中有多少个单词,每两个单词之间以空格隔开
编写代码如下:

s = input('请输入一串字符:')
s1 = s.split(' ')  # 两两之间用空格隔开
print(s1)
num = s.count(' ') + 1  
'''
这里为什么不写num = s1.count(' ') + 1呢?
因为运行会出现以下结果
s1相当于一个列表,执行num = s1.count(' ') + 1之后结果总是1
请输入一串字符:nice to meet you
['nice', 'to', 'meet', 'you']
1
'''
print(num)

运行结果如下:

请输入一串字符:nice to meet you
['nice', 'to', 'meet', 'you']
4

6、practice 6

题目要求:
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
代码如下:

s1 = input('请输入第一个字符串:')
s2 = input('请输入第二个字符串:')
s3 = ''
# 方法一
for i in s1:
    # print(i)  # 字符串也可以认为是一个序列,可以放在for...in里面进行遍历
    # 放在for...in里面,每次会从里面取一个字母出来    print会换行  故将print(i) 改为 print(i, end='')
    # print(i, end='')   # 这样就在一行上打印了
    if i not in s2:
        s3 += i
print(s3)
s1 = s3
print(s1)


# 方法二:
for i in s2:
    s1 = s1.replace(i, '')
print(s1)

# 方法三:
for i in s2:
    if i not in s3:
        s3 += i   #  遍历s2
print(s3)
for i in s3:
    s1 = s1.replace(i, '')
print(s1)

运行结果如下:
第一、二种方法:

请输入第一个字符串:They are students
请输入第二个字符串:aeiou
Thy r stdnts

第三种方法:(第三种方法还可以去重复项,在s2中重复出现的字母最终只遍历一次,这样遍历次数就会减少)

请输入第一个字符串:hello lily
请输入第二个字符串:loeli
loei
h y

7、practice 7

题目要求:
小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
例如:
小易不喜欢"ABBA",因为这里有两个连续的’B’
小易喜欢"A","ABA"和"ABCBA"这些单词
给你一个单词,你要回答小易是否会喜欢这个单词。
编写代码如下:
在附上编写代码之前,先讲一下博主的编写思路吧!(博主在题目所给出的要求上多增加了一点,就是不断地给出单词,直到给出小易喜欢的单词为止)刚开始昨天早上博主编出来下面的一段程序,结果发现可以判断出小易所不喜欢的单词,但是!!!即使给出符合条件的单词,还是显示小易不喜欢,到底是哪里除了问题呢?请接着往下看!

while True:
    Word = input('请给出一个单词:')
    judge = Word.isupper()
    if judge:
        for i in range(len(Word)):
            # print(i, end='')
            if Word[i] == Word[i+1]:
                print('小易不喜欢这个单词')
                break
            # elif Word[i] != Word[i+1]:
            #     pass
            else:
                print('like')
        break
    else:
        print('小易不喜欢这个单词')
        continue

运行结果如下:

请给出一个单词:adfghjkl
小易不喜欢这个单词
请给出一个单词:HELLO
like
like
小易不喜欢这个单词

哈哈,后来午休过后,博主突然想到了一个办法!博主选择把比较的结果都放进一个变量里,然后如果该变量中出现了dislike即为小易不喜欢的单词,如果没有出现,那么就判断为小易喜欢这个单词。
修改后的正确代码如下:

while True:
    Word = input('请给出一个单词:')
    judge = Word.isupper()
    if judge:
        result = ''
        for i in range(len(Word) - 1):
            # print(i, end='')
            if Word.find(Word[i]) == Word.find(Word[i + 1]):
                # print('dislike')
                result += 'dislike'
            else:
                # print('like')
                result += 'like'
        print(result)   # 也可以不要这一句,只是有这句比较直观
        if 'dislike' in result:
            print('小易不喜欢这个单词')  # 来解释一下为什么如果这里不喜欢它还会提示请给出一个单词
            # 因为这是处在while True:的while循环当中的,只有满足条件才会跳出循环,不满足条件所以还会继续
        else:
            print('小易喜欢这个单词')
            break
    else:
        print('小易不喜欢这个单词')
        continue

运行结果如下:

请给出一个单词:acfasvhcjadc
小易不喜欢这个单词
请给出一个单词:HELLO
likelikedislikelike
小易不喜欢这个单词
请给出一个单词:womenfrf
小易不喜欢这个单词
请给出一个单词:我们
小易不喜欢这个单词
请给出一个单词:ASDFGH
likelikelikelikelike
小易喜欢这个单词

如果按照题目意思去做,每一次只给出一个单词的话,还可以这样写,思路如下:
题目给出了小易喜欢的单词,那么我们只需要排除他不喜欢的单词,剩下的自然就是小易喜欢的单词啦。
代码如下:

word = input('请输入单词:') 
for i in range(len(word)):  # 循环单词长度的次数
    if word[i] < 'A' or word[i] > 'Z':    # 这里用到的是ASCII码,意思是不介于ASCII码大写字母A、Z之间的就不是大写字母
        print('不喜欢!不是大写的!')
        break

    else:
        # 介于A~Z之间
        if i < len(word) - 1 and word[i] == word[i + 1]:    # 防止出现IndexError
            print('不喜欢!是叠词!')
            break
else:
    print('喜欢!')

运行结果如下:

请输入单词:hello
不喜欢!不是大写的!
请输入单词:HEllo
不喜欢!不是大写的!
请输入单词:ASDFGGHJ
不喜欢!是叠词!
请输入单词:ASDFGHJK
喜欢!

以上题目都是博主按照自己理解的题意以及一些讲解基础视频写出的代码,如有错误,还请其它博主批评指正!

猜你喜欢

转载自blog.csdn.net/qq_42822743/article/details/116883078