一、测试题
0. 还记得如何定义一个跨越多行的字符串吗(请至少写出两种实现的方法)?
1. 三引号字符串通常我们用于做什么使用?
2. file1 = open('C:\windows\temp\readme.txt', 'r')表示以只读方式打开“C:\windows\temp\readme.txt”这个文本文件,但事实上这个语句会报错,知道为什么吗?你会如何修改?**
3. 有字符串:str1 = '<a href="http://www.fishc.com/dvd" target="_blank">鱼C资源打包</a>',请问如何提取出子字符串:'www.fishc.com'
4. 如果使用负数作为索引值进行分片操作,按照第三题的要求你能够正确目测出结果吗?
>>> str1[-45:-32]
5.还是第三题那个字符串,请问下边语句会显示什么内容?
>>> str1[20:-36]
6.据说只有智商高于150的鱼油才能解开这个字符串(还原为有意义的字符串):
str1 = 'i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'
二、动动手
0. 请写一个密码安全性检查的脚本代码:check.py
需求:
低级密码要求:
# 1. 密码由单纯的数字或字母组成
# 2. 密码长度小于等于8位
中级密码要求:
# 1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
# 2. 密码长度不能低于8位
高级密码要求:
# 1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
# 2. 密码只能由字母开头
# 3. 密码长度不能低于16位
1. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
二、我的答案
一、
0.
法一:
print('''逻辑操作符:not、and、or
优先级:
幂>正负号(一元)>算数>比较>逻辑''')
法二:
string=('逻辑操作符:not、and、or\n''优先级:\n''幂>正负号(一元)>算数>比较>逻辑\n')
print(string)
1. 用于多行跨行注释。
2. 因为file1 = open('C:\windows\temp\readme.txt', 'r')中\t和\r分别表示横向制表符(TAB)和回车符,详见:字符串格式化符号含义及转义字符含义。因此只需要使用原始字符串操作符(R或r)即可解决此问题。
file1 = open(r'C:\windows\temp\readme.txt', 'r')
3.
>>> str1[str1.find('www.fishc.com'):str1.find('/dvd')] #字符串的find方法
'www.fishc.com'
4. str1[-45] = w,str1[-32] = /。因此结果是:'www.fishc.com'
5. str1[20] = f, str1[-36] = . 。 因此结果是:'fishic'
6. str1[::3]即可。因为每隔3个字母就是密码。
二、
0.
numbers = '0123456789'
specail = '~!@#$%^&*()_=-/,.?<>;:[]{}|\\'
words = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
print('请设置您的密码:', end = ' ')
key = input()
while (key.isspace()) or (len(key) == 0): #当输入为空格或者什么都不输入时,应给出提醒
print('密码不能为空!')
key = input('请重新输入:')
if len(key) <= 8:
lenth_flag = 1
elif 8 < len(key) < 16:
lenth_flag = 2
else:
lenth_flag = 3 #长度标记:小于等于8表示初级(1等),大于8小于16表示中级(2等),大于等于16表示高级(3等)
key_flag = 0 #初始化所包含的密码字类型
#检测是否包含数字
for i in key: #这个语句很重要:之前学到的for循环是这样的:for i in range(0,4)。这里i会每次检索key中的索引,并取出相应的元素
if i in numbers:
key_flag += 1
break #只要有一个数字就立马跳出
#检测是否包含字母
for i in key:
if i in words:
key_flag += 1
break
#检测是否包含特殊字符
for i in key:
if i in specail:
key_flag += 1
break
while 1: #检测部分
if ((lenth_flag == 3) and (key_flag == 3)) and (key[0] in words): #字母开头这个条件很容易忽视,如果是高级密码,则不需要改进,直接跳出循环即可。
print("您的密码等级为:高级。请继续保持!")
break
elif (lenth_flag == 1) and (key_flag == 1): #此处用or不用and:原因在于,假设输入密码为123gh,不足8位,数字字母混合,则会判为中级,实际上是低级密码。
print("您的密码等级为:低级。仍需努力!")
else:
print("您的密码等级为:中级。仍需努力!")
print('''推荐您使用以下方法来提高您的密码安全等级:
密码采用数字、字母及特殊字符三种组合
密码由字母开头
密码长度大于16位'''
)
key = input("请重置您的密码:") #低级和中级密码都需要给出改进的意见,在循环体内给出可重新输入的语句。
break #当用户做完密码的修改后,记得及时跳出检测循环。
第二种方法:
代码二: str1 = "~!@#$%^&*()_=-/,.?<>;:[]{}\|" has_str1 = 0 has_num = 0 has_alpha = 0 t = 'y' while t == 'y': password = input("请输入需要检查的密码组合:") length = len(password) while(password.isspace() or length == 0): # 有空格或者长度为零 password = input('您输入的密码为空(或空格),请重新输入:') for i in password: if i in str1: has_str1 = 1 if i.isdigit(): # 所有字符都是数字 has_num = 1 if i.isalpha(): # 所有字符都是字母 has_alpha = 1 has = has_str1 + has_num + has_alpha if length <= 8 or password.isalnum(): level = "低" if length > 8 and has ==2: level = "中" if length >= 16 and has == 3 and password[0].isalnum(): level = "高" print("您的密码安全等级评定为:%s"%level) if level == "高": print("请继续保持") else: print("""请按以下方式提升您的密码安全级别: 1.密码必须由数字、字母及特殊字符三种组合 2.密码只能由字母开头 3.密码长度不能低于16位""") t = input("还要再测试么?(”y“继续,其他退出)")
1.课堂重点:
- 字符串的各种奇葩内置方法
-
list、tuple、str之间的相互转换:
#list 转tuple
一、利用tuple()内置函数:
>>> list1 = ['1', '2', 'abc', 3]
>>> tuple1 = tuple(list1)
>>> print(tuple1)
('1', '2', 'abc', 3)二、利用索引和拼接手动添加:
tuple1 = ()
for i in list1:
tuple2 += (i,)print(tuple2)
('1', '2', 'abc', 3)
#tuple转list
一、通过list()内置函数:
>>> tuple1 = (1, 2, 'ok', '好的', '78')
>>> list1 = list(tuple1)
>>> print(list1)
[1, 2, 'ok', '好的', '78']二、利用list的内置方法append()手动添加:
list2 = []
for i in tuple2:
list2.append(i)
print(list2)[1, 2, 'ok', '好的', '78']
#tuple转str
a = ('hello', 'world', 'python')
b = ' '.join(a)
print(type(b))
print(b)
输出:
<class 'str'>
hello world python
# str转tuple
一、 通过tuple()内置函数:
str1 = 'hello world'
print(tuple(str1))
二、通过拼接的方法手动转换:
tuple1 = ()
for i in str1:
tuple1 = tuple1[:] + (i,)
print(tuple1)
输出:
('h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd')
('h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd')
# list转str
list1 = ['hello', 'world']
str1 = ' '.join(list1)
print(type(str1))
print(str1)
输出:
<class 'str'>
hello world
# str转list
一、通过list()内置函数:
str1 = 'hello world'
print(list(str1))
print(list(str1.split(' ')))
二、通过append()内置方法手动转换:
list1 = []
for i in str1:
list1.append(i)
print(list1)
输出:
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
['hello', 'world']
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']