Day07课后有感

接昨天内容继续学习

昨日作业讲解:

1.编写一个用户登录程序
要求最多尝试失误三次 过期自动提示并可重置尝试次数
用户登录成功之后进入内部循环 用户输入什么就打印什么 并给用户提供一个结束程序的特殊指令
获取用户输入的用户名和密码可以处理首尾空格
用户的用户名和密码使用变量存储 通过程序获取用户名和密码比对
data = 'anna|666'

# 用户登录功能   获取用户输入 比对用户数据
# 1.定义类似于数据库的数据
source_data = 'anna|666'
# 8.添加一个计数器
count = 1
# 5.添加循环
while True:
    # 9.判断当前尝试的次数
    if count == 4:
        choice = input('您已经尝试三次了 是否继续(y/n)>>>:').strip()
        if choice == 'y':
            count = 1
        else:
            print('欢迎下次使用')
            break
    # 2.获取用户输入的用户名和密码
    username = input('username>>>:').strip()
    # TODO:自己可以结合自己的需求添加更多的校验
    if len(username) == 0:
        print('用户名不能为空')
        continue
    password = input('password>>>:').strip()
    if len(password) == 0:
        print('密码不能为空')
        continue
    # 3.切割原始数据得到用户名和密码再比对
    real_name, real_pwd = source_data.split('|')  # real_name, real_pwd=['anna','666']  解压赋值
    # 4.校验用户名和密码
    if username == real_name and password == real_pwd:
        print("登录成功")
        # 6.添加内层循环
        while True:
            cmd = input('请输入您的指令>>>:').strip()
            # 7.添加一个结束条件
            if cmd == 'q':
                break
            print('正在执行您的命令:%s' % cmd)
    else:
        print('用户名或密码')
        # 10.没错一次 计数器加一
        count += 1

  运行过程:

/usr/local/bin/python3.6 "/Users/jiligulu/py1/day07/01 作业讲解.py"
username>>>:111
password>>>:11
用户名或密码
username>>>:
用户名不能为空
username>>>:11
password>>>:
密码不能为空
username>>>: 
用户名不能为空
username>>>:anna
password>>>:666
登录成功
请输入您的指令>>>:

  

字符串的其他内置方法

1.移除字符串首尾的指定字符  可以指定方向

s1 = '$$$anna$$$'
print(s1.strip('$'))  # anna  首尾都移掉
print(s1.lstrip('$'))  # anna$$$   去掉左边的$    left    左边
print(s1.rstrip('$'))  # $$$anna   去掉右边的$    right   右边

 

运行结果:

anna
anna$$$
$$$anna

Process finished with exit code 0

  

2.大小写相关操作

s2 = 'JaSoN666Sb'
print(s2.lower())  # 将所有的英文字母变为小写 jason666sb
print(s2.upper())  # 将所有的英文字母变为大写 JASON666SB
print(s2.islower())  # 判断字符串中所有的英文字母是否是纯小写  结果是布尔值
print(s2.isupper())  # 判断字符串中所有的英文字母是否是纯大写  结果是布尔值
'''图片验证码:一串有数字 大写字母 小写字母组成'''
# 为什么以前的认证码需要一模一样 大小写不能忽略 现在的验证码却可以 如何实现
code = 'JaSOn6'
print('这是返回给用户的图片验证码:%s' % code)
user_code = input('请输入验证码>>>:').strip()
if code.lower() == user_code.lower():  # 验证码忽略大小写 只需要统一转大写或者小写即可
     print('验证码正确')

  

运行结果:

jason666sb
JASON666SB
False
False
这是返回给用户的图片验证码:JaSOn6
请输入验证码>>>:jaSOn6
验证码正确

Process finished with exit code 0

  

3.判断字符串的开头或者结尾是否是指定的字符

s3 = 'jason kevin jason tony 666'
print(s3.startswith('j'))  # True
print(s3.startswith('jason'))  # True
print(s3.startswith('tony'))  # False
print(s3.endswith('6'))  # True
print(s3.endswith('666'))  # True
print(s3.endswith('jason'))  # False

  

4.格式化输出

# 方式1 占位符:%s %d
# 方式2 format方法>>>:四种玩法
# 玩法1:跟占位符一致  使用的{}占位
print('my name is {} my age is {}'.format('jason', 18))
# 玩法2:根据索引取值  可以反复使用
print('my name is {0} {0} {0} my age is {0} {1}'.format('jason', 18))
# 玩法3:根据指名道姓的方式取值
print('my name is {name} {name} my age is {age} {pwd}'.format(name='jason', age=18, pwd=123))
# 玩法4:直接使用已经出现过的变量
name = 'jason'
age = 18
print(f'my name is {name} my age is {age} {name} {age}')
"""python官网很久以前就说推荐使用format做格式化输出 甚至说%s要被砍掉"""

  运行结果:

my name is jason my age is 18
my name is jason jason jason my age is jason 18
my name is jason jason my age is 18 123
my name is jason my age is 18 jason 18

Process finished with exit code 0

 

  5.拼接字符串

s1 = '三月不努力 四月变垃圾'
s2 = '年少不努力 妄为少年人'
print(s1 + s2) # 如果字符串很大 加号效率较低
print(s1 * 10) # 重复次数
print('|'.join(s1)) # 三|月|不|努|力| |四|月|变|垃|圾
print('$'.join(['jason', 'kevin', 'justin', 'tony'])) # jason$kevin$justin$tony
'''join方法相当于是将括号内的元素进行for循环'''
l1 = ['anna', 'jason', 'kevin']
print('|'.join(l1)) # join的元素必须都是字符串才可以 否则报错

  运行结果:

三月不努力 四月变垃圾年少不努力 妄为少年人
三月不努力 四月变垃圾三月不努力 四月变垃圾三月不努力 四月变垃圾三月不努力 四月变垃圾三月不努力 四月变垃圾三月不努力 四月变垃圾三月不努力 四月变垃圾三月不努力 四月变垃圾三月不努力 四月变垃圾三月不努力 四月变垃圾
三|月|不|努|力| |四|月|变|垃|圾
jason$kevin$justin$tony
anna|jason|kevin

  

6.替换字符串中指定的字符

s6 = 'jason is DSB DSB DSB DSB jason jason jason'
# 将jason替换成老刘
print(s6.replace('jason', '老刘'))  # 默认一次性替换所有
# 指定替换的个数
print(s6.replace('jason', '老刘', 2))  # 还可以通过数字控制替换的个数 从左往右
'''很多文本编辑器里面的替换功能 就可以使用replace完成'''

  

运行结果:

老刘 is DSB DSB DSB DSB 老刘 老刘 老刘
老刘 is DSB DSB DSB DSB 老刘 jason jason

Process finished with exit code 0

  

7.判断字符串中是否是纯数字

s7 = 'jason123'
print(s7.isdigit())  # False
print('123'.isdigit())  # True
print('123.21'.isdigit())  # False
score = input('score>>>:')
if score.isdigit():
    score = int(score)
else:
    print('你他喵的能不能好好写')

  

运行结果:

False
True
False
score>>>:d
你他喵的能不能好好写

Process finished with exit code 0

  

以下为了解的操作:

 

# 1.查找指定字符对应的索引值
# s1 = 'jason justin kevin tony'
# print(s1.find('s'))  # 从左往右查找 查找一个就结束
# print(s1.find('k', 1, 9))  # -1 意思是没有 找不到
# print(s1.index('s'))
# print(s1.index('k', 1, 9))  # 找不到直接报错 不推荐使用

# 2.文本位置改变
# name = 'tony'
# print(name.center(30, '-'))  # -------------tony-------------
# print(name.ljust(30, '*'))  # tony**************************
# print(name.rjust(30, '$'))  # $$$$$$$$$$$$$$$$$$$$$$$$$$tony
# print(name.zfill(50))  # zero 零  0000000000000000000000000000000000000000000000tony

# 3.特殊符号:斜杠与一些英文字母的组合会产生特殊的含义
# print('ja\tson\nke\avin')
'''如果想取消它们的特殊含义 可以在字符串的前面加一个字母r'''
# print(r'ja\tson\nke\avin')

# 4.captalize,swapcase,title
# 4.1 captalize:首字母大写
# message = 'hello everyone nice to meet you!'
# message.capitalize()
# Hello everyone nice to meet you!
# 4.2 swapcase:大小写翻转
# message1 = 'Hi girl, I want make friends with you!'
# message1.swapcase()
# hI GIRL, i WANT MAKE FRIENDS WITH YOU!
#4.3 title:每个单词的首字母大写
# msg = 'dear my friend i miss you very much'
# msg.title()
# Dear My Friend I Miss You Very Much

  

列表内置方法

1.类型转换

print(list(11))  # 整型不行

print(list(11.11))  # 浮点型不行

print(list('jason'))  # ['j', 'a', 's', 'o', 'n']
print(list({'name': 'jason', 'pwd': 123}))  # ['name', 'pwd'] 用for循环取k
print(list((11,22,33,44,55)))  # [11, 22, 33, 44, 55]
print(list({1, 2, 3, 4, 5}))  # [1, 2, 3, 4, 5]

print(list(True))  # 布尔值不能for循环,他只有单独一个

 

list可以转换支持for循环的数据类型


可以被for循环的数据类型:


字符串 列表 字典 元组 集合

 

2.常见操作(全部要记忆)

name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
# 1.索引取值
print(name_list[0])
print(name_list[-1])  # 也支持负数取值

# 2.切片操作 print(name_list[1:4]) # ['kevin', 'tony', 'tom'] print(name_list[-4:-1]) # ['kevin', 'tony', 'tom'] print(name_list[-1:-4:-1]) # ['jerry', 'tom', 'tony'] #通过用负数改变方向就能取值了


# 3.间隔 print(name_list[0:4:1]) # ['jason', 'kevin', 'tony', 'tom'] print(name_list[0:4:2]) # ['jason', 'tony'] print(name_list[-1:-4:-1]) # ['jerry', 'tom', 'tony']

# 4.统计列表中元素的个数 print(len(name_list)) # 5 len出现频率较高,需要记住

# 5.成员运算 print('j' in name_list) # False 列表在做成员运算时,最小判断单位是元素,不是元素里面的单个字符 print('jason' in name_list) # True

  以下是列表最最核心的内置方法:

6.列表添加元素的方式

print('j' in name_list)  # False  列表在做成员运算时,最小判断单位是元素,不是元素里面的单个字符
print('jason' in name_list) # True
# 6.列表添加元素的方式
# 6.1.尾部追加'单个'元素
name_list.append('小李') # 添加一个元素在最末尾
print(name_list)
name_list.append([11, 22, 33, 44])
print(name_list) # 在append语法中,不论你括号里写什么都看成"单个"元素
# 6.2.指定位置插入'单个'元素
name_list.insert(0, 123) # 从左至右插在第一个位置
name_list.insert(2, '可不可以插个队') # 在任意位置插个队
name_list.insert(1, [11, 22, 33]) # 指定位置插入'单个'元素
print(name_list)
# 6.3.合并列表
name_list.extend([11, 22, 33, 44, 55])
print(name_list)
'''extend其实可以看成是for循环+append'''
for i in [11, 22, 33, 44, 55]:
name_list.append(i)
print(name_list)
name_list += [11, 22, 33, 44, 55]
print(name_list) # 加号的效率不高,数据量大的话比较占用空间
# 7.删除元素
# 7.1 通用的删除方式
del name_list[0]
print(name_list)
# 7.2 就地删除 # 指名道姓的直接删除某个元素
print(name_list.remove('jerry')) # None
print(name_list)
# 7.3 延迟删除
print(name_list.pop()) # 默认是尾部弹出 jerry
print(name_list)
print(name_list.pop(2)) # 还可以指定索引值 tony
print(name_list)
# 8.修改列表元素
print(id(name_list[0])) # 2614038082368
name_list[0] = 'jasonDSB'
print(id(name_list[0])) # 2614038926320
print(name_list)
# 9.排序
ss = [44, 77, 99, 11, 22, 33, 88, 66]
ss.sort() # 默认是升序
print(ss) # [11, 22, 33, 44, 66, 77, 88, 99]
ss.sort(reverse=True) # 可以修改尾降序
print(ss) # [99, 88, 77, 66, 44, 33, 22, 11]

# 10.翻转
ss = [44, 77, 99, 11, 22, 33, 88, 66]
ss.reverse() # 前后颠倒
print(ss)

# 11.比较运算
s1 = [11, 22, 33]
s2 = [1, 2, 3, 4, 5, 6, 7, 8]
print(s1 > s2) # True
"""列表在做比较的时候 其实比的是对应索引位置上的元素"""
# s1 = ['A', 'B', 'C'] # A>>>65
# s2 = ['a'] # a>>>97
# print(s1 > s2) # False
# ss = [44, 77, 99, 11, 22, 33, 88, 66]
# print(ss.index(99))
# 12.统计列表中某个元素出现的次数
l1 = [11, 22, 33, 44, 33, 22, 11, 22, 11, 22, 33, 22, 33, 44, 55, 44, 33]
# print(l1.count(11)) # 统计元素11出现的次数
l1.clear() # 清空列表
print(l1)



  运行结果:

['j', 'a', 's', 'o', 'n']
['name', 'pwd']
[11, 22, 33, 44, 55]
[1, 2, 3, 4, 5]
jason
jerry
['kevin', 'tony', 'tom']
['kevin', 'tony', 'tom']
['jerry', 'tom', 'tony']
['jason', 'kevin', 'tony', 'tom']
['jason', 'tony']
['jerry', 'tom', 'tony']
5
False
True
['jason', 'kevin', 'tony', 'tom', 'jerry', '小李']
['jason', 'kevin', 'tony', 'tom', 'jerry', '小李', [11, 22, 33, 44]]
[123, [11, 22, 33], 'jason', '可不可以插个队', 'kevin', 'tony', 'tom', 'jerry', '小李', [11, 22, 33, 44]]
[123, [11, 22, 33], 'jason', '可不可以插个队', 'kevin', 'tony', 'tom', 'jerry', '小李', [11, 22, 33, 44], 11, 22, 33, 44, 55]
[123, [11, 22, 33], 'jason', '可不可以插个队', 'kevin', 'tony', 'tom', 'jerry', '小李', [11, 22, 33, 44], 11, 22, 33, 44, 55, 11, 22, 33, 44, 55]
[123, [11, 22, 33], 'jason', '可不可以插个队', 'kevin', 'tony', 'tom', 'jerry', '小李', [11, 22, 33, 44], 11, 22, 33, 44, 55, 11, 22, 33, 44, 55, 11, 22, 33, 44, 55]
[[11, 22, 33], 'jason', '可不可以插个队', 'kevin', 'tony', 'tom', 'jerry', '小李', [11, 22, 33, 44], 11, 22, 33, 44, 55, 11, 22, 33, 44, 55, 11, 22, 33, 44, 55]
None
[[11, 22, 33], 'jason', '可不可以插个队', 'kevin', 'tony', 'tom', '小李', [11, 22, 33, 44], 11, 22, 33, 44, 55, 11, 22, 33, 44, 55, 11, 22, 33, 44, 55]
55
[[11, 22, 33], 'jason', '可不可以插个队', 'kevin', 'tony', 'tom', '小李', [11, 22, 33, 44], 11, 22, 33, 44, 55, 11, 22, 33, 44, 55, 11, 22, 33, 44]
可不可以插个队
[[11, 22, 33], 'jason', 'kevin', 'tony', 'tom', '小李', [11, 22, 33, 44], 11, 22, 33, 44, 55, 11, 22, 33, 44, 55, 11, 22, 33, 44]
140514418835400
140514418835184
['jasonDSB', 'jason', 'kevin', 'tony', 'tom', '小李', [11, 22, 33, 44], 11, 22, 33, 44, 55, 11, 22, 33, 44, 55, 11, 22, 33, 44]
[11, 22, 33, 44, 66, 77, 88, 99]
[99, 88, 77, 66, 44, 33, 22, 11]
[66, 88, 33, 22, 11, 99, 77, 44]
True
[]

Process finished with exit code 0

  






可变类型与不可变类型

s1 = '$$$jason$$$'
print(s1.strip('$'))  # jason  本身并没有修改 是产生了新的结果
print(s1)  # $$$jason$$$

s2 = [1, 2, 3]
print(s2.extend([11, 22, 33, 44, 55]))  # None 空
print(s2)  # [1, 2, 3, 11, 22, 33, 44, 55]

  运行结果:

jason
$$$jason$$$
None
[1, 2, 3, 11, 22, 33, 44, 55]

Process finished with exit code 0

  


可变类型 :列表
值改变 内存地址不变 修改的是本身


不可变类型 :字符串
值改变 内存地址肯定遍 修改过程产生了新的值


如何查看变量的'内存地址'

s2 = [1, 2, 3]
print(id(s2))  
s2.append(11111111)
print(id(s2))  

  运行结果:

140243568505864
140243568505864

Process finished with exit code 0

 

字符串:

s1 = '  jason  '
print(id(s1))
res = s1.strip()
print(res)
print(s1, id(s1))
jason
  jason   140496837230256

Process finished with exit code 0

 

队列与堆栈

队列:
	先进先出
    	eg:超市排队结账 符合队列的特征
堆栈: 先进后出 eg:叠衣服 符合堆栈的特征 # 使用列表模拟出队列与堆栈的特征
# 使用列表模拟出队列与堆栈的特征
# 队列
new_list = []
# 先进
new_list.append(111)
new_list.append(222)
new_list.append(333)
# 先出
for i in new_list:
print(i)
print(new_list.pop(0))
print(new_list.pop(0))
print(new_list.pop(0))


# 堆栈
new_list = []
# 先进
new_list.append(111)
new_list.append(222)
new_list.append(333)
# 后出
print(new_list.pop())
print(new_list.pop())
print(new_list.pop())

  运行结果:

111
222
333
111
222
333
333
222
111

Process finished with exit code 0

  

 

  

  

 


 

 

 

posted @ 2022-03-09 21:24  ji哩咕噜  阅读(23)  评论(0编辑  收藏  举报