作业讲解

'''
习题题目:
编写一个用户登录程序
要求最多尝试失误三次 过期自动提示并可重置尝试次数
用户登录成功之后进入内部循环 用户输入什么就打印什么 并给用户提供一个结束程序的特殊指令
获取用户输入的用户名和密码,可以处理首尾空格
用户的用户名和密码使用变量存储 通过程序获取用户名和密码比对
data = 'jason|123'
'''
# 用户登录功能   获取用户输入 比对用户数据
# 1.定义类似于数据库的数据 (单用户模式)
source_data = 'jason|123'
# 1.1 多用户模式登录
# source_data = ['jason|123', 'tony|123', 'kevin|321', 'jerry|222']
# 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=['jason','123'] 解压赋值
# 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

数据类型内置方法2

字符串(str)

这里我整理了比较完整的字符串的数据类型转换及内置方法,详情去我的番外篇博客看吧~

列表(list)

类型转换

但凡能被for循环遍历的数据类型都可以传给list()转换成列表类型,list()会跟for循环一样遍历出数据类型中包含的每一个元素然后放到列表中

# int
print(list(11)) # 不行
# float
print(list(11.11)) # 不行
#str
print(list('wdad')) # 结果:['w', 'd', 'a', 'd']
# dict
print(list({"name":"jason","age":18})) #结果:['name', 'age']
# tuple
print(list((1,2,3))) # 结果:[1, 2, 3]
# set
print(list({1,2,3,4})) # 结果:[1, 2, 3, 4]
# bool
print(list(True)) # 不行

内置方法

name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']

索引取值

# 正向取(从左往右)
print(name_list[0]) # 反向取(负号表示从右往左)
print(name_list[-1]) # 对于list来说,既可以按照索引取值,又可以按照索引修改指定位置的值,但如果索引不存在则报错
name_list[1] = 'martthow'
print(name_list)
# ['jason', 'martthow', 'tony', 'tom', 'jerry']

切片操作

# 顾头不顾尾:取出索引为1到3的元素
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']

步长

# 第三个参数1代表步长,会从0开始,每次累加一个1即可,所以会取出索引0、1、2、3的元素
print(name_list[0:4:1]) # ['jason', 'kevin', 'tony', 'tom'] # 第三个参数2代表步长,会从0开始,每次累加一个2即可,所以会取出索引0、2的元素
print(name_list[0:4:2]) # ['jason', 'tony'] print(name_list[-1:-4:-1]) # ['jerry', 'tom', 'tony']

统计列表中元素的个数

print(len(name_list))  # 5

成员运算 (in和not in)

# 最小判断单位是元素不是元素里面的单个字符
print('j' in name_list) # False
print('jason' in name_list) # True

列表添加元素的方式*

# append()列表尾部追加'单个'元素
name_list.append('小李')
print(name_list)
name_list.append([11, 22, 33, 44])
print(name_list)

# insert()指定位置插入'单个'元素
name_list.insert(0, 123)
name_list.insert(2, '可不可以插个队')
name_list.insert(1, [11, 22, 33])
print(name_list)
# extend()合并列表
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) # 加号的效率不高

删除元素

# 通用的删除方式(del)
del name_list[0]
print(name_list)
# 就地删除(remove)
# remove()括号内指名道姓的直接删除某个元素,没有返回值
print(name_list.remove('jerry')) # None
print(name_list) # ['jason', 'kevin', 'tony', 'tom']
# 从左往右查找第一个 括号内需要删除的元素
# 延迟删除(pop)
print(name_list.pop()) # 默认是尾部弹出 jerry
print(name_list)
print(name_list.pop(2)) # 还可以指定索引值 tony
print(name_list)

修改列表元素(id)

print(id(name_list[0]))  # 2614038082368
name_list[0] = 'jasonDSB'
print(id(name_list[0])) # 2614038926320
print(name_list)

排序(sort)

# sort()给列表内所有元素排序
# 排序时列表元素之间必须是相同数据类型,不可混搭,否则报错
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) # 可以修改尾降序
# reverse用来指定是否跌倒排序,默认为False
print(ss) # [99, 88, 77, 66, 44, 33, 22, 11]

翻转

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

比较运算

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))

统计列表中某个元素出现的次数

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) # []

可变类型与不可变类型

可变数据类型:值发生改变时,内存地址不变,即id不变,证明在改变原值

不可变类型:值发生改变时,内存地址也发生改变,即id也变,证明是没有在改变原值,是产生了新的值

'''
可变类型与不可变类型
可变类型 如:列表
值改变 内存地址不变 修改的是本身
不可变类型 如:字符串
值改变 内存地址肯定遍 修改过程产生了新的值
'''

数字类型( int \ float ):

>>> x = 10
>>> id(x)
1953464720
>>>
>>> x = 20
>>> id(x)
1953465040
# 内存地址改变了,说明整型是不可变数据类型,浮点型也一样

字符串:

>>> x = "qiao"
>>> id(x)
1853141915384
>>> x = "qiaoyu"
>>> id(x)
1853141915496
# 内存地址改变了,说明字符串是不可变数据类型

列表:

>>> list1 = ['tom','jack','egon']
>>> id(list1)
486316639176
>>> list1[2] = 'kevin'
>>> id(list1)
486316639176
>>> list1.append('lili')
>>> id(list1)
486316639176
# 对列表的值进行操作时,值改变但内存地址不变,所以列表是可变数据类型

元组:

>>> t1 = ("tom","jack",[1,2])
>>> t1[0]='TOM' # 报错:TypeError
>>> t1.append('lili') # 报错:TypeError
# 元组内的元素无法修改,指的是元组内索引指向的内存地址不能被修改
>>> t1 = ("tom","jack",[1,2])
>>> id(t1[0]),id(t1[1]),id(t1[2])
(4327403152, 4327403072, 4327422472)
>>> t1[2][0]=111 # 如果元组中存在可变类型,是可以修改,但是修改后的内存地址不变
>>> t1
('tom', 'jack', [111, 2])
>>> id(t1[0]),id(t1[1]),id(t1[2]) # 查看id仍然不变
(4327403152, 4327403072, 4327422472)

字典:

>>> dic = {'name':'egon','sex':'male','age':18}
>>>
>>> id(dic)
4327423112
>>> dic['age']=19
>>> dic
{'age': 19, 'sex': 'male', 'name': 'egon'}
>>> id(dic)
4327423112
# 对字典进行操作时,值改变的情况下,字典的id也是不变,即字典也是可变数据类型

队列与堆栈

这里我们先使用列表模拟出队列与堆栈的特征

队列(先进先出)

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())

今天的学习内容结束啦!!!

最新文章

  1. 移动web之用CSS样式写如苹果手机的开关键
  2. 动态调用webservice(部分转载)
  3. _mkdir
  4. 详解Winform里面的缓存使用
  5. Jquery Validate 正则表达式实用验证代码
  6. 图解Activity与Fragment
  7. wxsqlite3的加密模块单独编译
  8. 201421123042 《Java程序设计》第11周学习总结
  9. python 初始socket
  10. 1244. Minimum Genetic Mutation
  11. SpringBoot日记——ElasticSearch全文检索
  12. 读入excle
  13. NET Core MVC中创建PDF
  14. jQuery object and DOM Element
  15. Pytoch 抽取中间层特征方法
  16. shell中使用if判断时用到的一些参数
  17. @Transactional、Spring的声明式事务
  18. HTML5之新增的元素和废除的元素 (声明:内容节选自《HTML 5从入门到精通》)
  19. spring的条件装配bean
  20. painting fence - 分治 - Codeforces 448c

热门文章

  1. Hashmap如何同步?
  2. Spring框架中有哪些不同类型的事件?
  3. kafka消费组创建和删除原理
  4. 面试问题之计算机网络:TCP如何保证数据可靠传输
  5. 什么是 UML?
  6. centos 7环境下安装jdk
  7. 插值方法 - Newton多项式(非等距节点)
  8. HTML5离线存储整理
  9. android:text 文字阴影设置
  10. java中什么叫多重捕获MultiCatch,它的用法是怎样的?