python第三天 变量 作业
作业1,模拟登陆:
1. 用户输入帐号密码进行登陆
2. 用户信息保存在文件内
3. 用户密码输入错误三次后锁定用户
使用文件:user_file.txt 用户列表文件。 格式:{'张三':'123abc','lili':'eeettt','王五':'www123','calmyan':'yanyan','Aelx':'tttt'}
lock_name.txt 被锁定的用户文件 。 格式:['calmyan']
先上一下流程图:
下面的详细代码:
#!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
#import getpass
user_file=open("user_file.txt",'r',encoding='utf-8')#打开用户列表文件
lock_name=open('lock_name.txt','r+',encoding='utf-8')#打开锁定用户列表文件
user_list=eval(user_file.readline())#转换用户文件中的字符串
lock_list=eval(lock_name.readline())#转换锁定用户文件中的字符串 def userchar(_user_name):#检测用户名的函数
while True:
#_user_name=(input('请输入用户名:'))
if _user_name in user_list and _user_name not in lock_list:#判断用户是否存在并正常
return True#存在返回真
break
elif _user_name in user_list and _user_name in lock_list:#判断用户是否被锁定
print('您的用户已经被锁定,请联系商家解锁!')
break
else:
print('您输入用户不存在,请先注册')
break def out():#退出时相关文件操作函数
global bool#定义退出循环条件全局变量
bool=False
lock_name.close()#关闭锁定用户文件
user_file.close()#关闭用户列表文件 def confirm():#退出确认函数
qu=input("是否重新登陆!按\033[31;1mY/y\033[0m重新登陆,否则退出:")
if qu=='Y'or qu=='y':
pass
else:
print("您已经退出!" )
out() bool=True#定义退出循环条件变量
while bool:
_user_name=(input('请输入用户名:'))
if userchar(_user_name):#运行检测用户名的函数判断
count=3#定义锁次数
while count>0 :#如果密码错误次数超过退出密码输入
#password=getpass.getpass('请输入密码:')
password=input('请输入密码:')
if password==user_list[_user_name]:#密码通过验证结束循环
print("密码通过验证")
out()
print("欢迎您 \033[32;1m%s\033[0m 你已经登陆成功!" % _user_name)
break
else:
count -=1#次数减少
print("密码错误请重试,剩余:\033[31;1m%s\033[0m次! "% count)
else:
print("\033[31;1m超出所试次数,账户已锁定!请联系商家!\033[0m")
lock_list.append(_user_name)#将用户名加出锁定列表
lock_name.seek(0)#指针移动到开头,以免产生多个元组
lock_name.write(str(lock_list))#写入锁定用户文件
lock_name.tell()#获取当前指针,以免产生多个元组
#qu=input("是否重新登陆!按Y重新登陆,否则退出:")
# if qu=='Y':
# pass
# else:
# print("您已经退出!" )
# out()
confirm()
continue#退回到输入用户名的位置 else:#如果用户名出错新来过
confirm()
pass #print("欢迎您 \033[32;1m%s\033[0m 你已经登陆成功!" % _user_name)
#if password==user_list[]
经过测试,觉得没毛病!
而且多了1、提示功能:用户不存提示,用已经被定提示,剩下重试密码次数提示!
2、可选择是否出退!
####>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#变量名.capitalize()
#
#capitalize() <把字符串的第一个字符改为大写>
#casefold() <把整个字符串的所有的字符变成小写>
#center(width) <将字符串居中,并使用空格填充至长度width的新字符串>
#count(sub[,start[,end]]) <返回sub在字符串里边出现的次数,start和end参数表示范围,可选>
#encode(encoding='utf-8',errors='strict') <以encoding指定的编码格式对字符串进行编码>
#endswith(sub[,start[,end]]) <检查字符串是否sub字符串结束,如果是返回true,否则返回false,
# start和end参数表示范围,可选 >
#expandtabs([tabsize=8]) <把字符串的tab符号(\t)转换为空格,字符默认的空格数是tabsize=8>
#find(sub[,start[end]]) <检测sub是否包含在字符串中,如果有返回索引值,否则返回-1,
# start和end参数表示范围,可选>
#index(sub[,start[,end]]) <跟find方法一样,不过如果sub不在string中会产生异常>
#isalunum() <如果字符串至少有一个字符都是字母或数字则返回true,否则返回false>
#isalpha() <如果字符串至少有一个字符并且所有字符都是字母则返回true,否则返回false>
#isdecimal() <如果字符串只包含十进制数字则返回true,否则返回false>
#isdingt() <如果字符串中只包含数字,则返回true,否则返回false>
#islower() <如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,
# 则返回ttue,否则返回false>
#isnumeric() <如果字符串中只包含数字字符,则返回true,否则返回false>
#isspace() <如果字符串中只包含空格,则返回true,否则返回false>
#istile() <如果字符串是标题化(所有的单词都是以大写开始,其余字母均小写)
# 则返回ttue,否则返回false>
#isupper() <如果字符串至少包含一个区分大小写的字符,并且这些字符都是大写,
# 则返回ttue,否则返回false>
#join(sub) <以字符串作为分隔符,插入到sub中所有的字符之间>
#ljust(width) <返回一个左对齐的字符串,并且使用空格填充至长度为width的新字符串>
#lower() <转换字符串中所有大写字符为小写>
#lstrip() <去掉字符串左边的所有空格>
#partition(sub) <找到子字符串sub,把字符串分成一个3元组(pre_sub,sub,fol_sub),
# 如果字符串中不包含sub则返回('原字符串','','')>
#replace(old,new[,count]) <把字符串中的old子字符串替换成new子字符串,
# 如果count指定,则替换不超过count次>
#rfind(sub[,start[,end]]) <类似于find()方法,不过是从右边开始查找>
#rindex(sub[start[,end]]) <类似于index()方法,不过是从右边开始>
#rjust(width) <返回一个右对齐的字符串,并且使用空格填充至长度为width的新字符串>
#rpartion(sub) <类似于partion()方法,不过是从右边开始查找>
#rstrip() <删除字符串末尾的空格>
#splis(sep=none,maxsplit=-1) <不带参数默认是以空格为分隔符切片字符串,如果maxsplit参数有设置,
# 则仅分隔maxsplit个子字符串,返回切片后的子字符串拼接列表>
#splitlines(([keepends])) <按照'\n'分隔,返回一个包含各行作为元素的列表,
# 如果keepends参数指定,则返回前keepends行>
#startswith(prefix[,start[,end]])<检查字符串是否以prefix开头,是则返回true,否则返回false,
# start和end参数可以指定范围检查,可选>
#strip([chars]) <删除字符串前边和后边所有的空格,chars参数可以指定删除的字符,可选>
#swapcase() <翻转字符串中的大小写>
#title() <返回标题化(所有的单词都以大写开始,其余字母均小写)>
#####>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#translate(table) <根据table的规则(可以由str.maketrans('a','b')定制)转换字符串只的字符>
# >>> str1 = 'ssssssaaaaasssss'
# >>> str1.translate(str.maketrans('s','b'))
# 'bbbbbbaaaaabbbbb'
######>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#upper() <转换字符串中的所有小写字符为大写>
#zfill(width) <返回长度为width的字符串,原字符串右对齐,前边用0填充>
#############################################################################################################
变量常用的方法
################################################################################
#以下代码复制到python(3.6.2rc2)下 按F5 可以正常执行,对比学习。QQ:124111294欢迎
#字符串的操作特性:不可修改
#
#常用变量演示
name = 'my name is alex'
print(name.capitalize())
print(name.count('a'))
print(name.center(50,'-'))
print(name.endswith('ex'))
print(name.expandtabs(tabsize=30))
print(name[name.find('name'):])
print(name.format(name='alex',year=23))
print(name.format_map( {'name':'alex','year':12} ))
print('ab23'.isalnum())
print('abA'.isalpha())
print('1A'.isdecimal())
print('1A'.isdigit())
print('a 1A'.isidentifier())#判断是否合法的标识符
print(''.isnumeric())
print(''.isspace())
print('My Name IS '.istitle())
print('My Name IS '.isprintable())#设备终端使用
print('My Name IS '.isupper())
print('+'.join(['','','']))
print( name.ljust(23,'*'))
print( name.rjust(25,'-'))
print( 'Alex'.lower())
print( 'Alex'.upper())
print( '\n Alex'.lstrip())
print( 'Alex \n'.rstrip())
print( ' Alex\n'.strip()) print('---随机密码----')
h = str.maketrans('abcdefli','123$@456')#随机密码
print('alex li'.translate(h))
print(' ') print('---替换----')
print('alex li lllll'.replace('l','L',4))
print(' ') print('---寻找下标号----')
print('alex li'.rfind('l'))
print(' ') print('---按字符串分割----')
print('al ex lil'.split('l'))
print(' ') print('---按换行\n分割----不同系统的换行')
print('1+2\n+3+4'.splitlines())
print(' ') print('---按换行\n分割----')
print('Alex Li'.swapcase())
print(' ') print('---第一字母大写----')
print('llex Li'.title())
print(' ') print('---前边用0填充----')
print('lex Li'.zfill(26))
print(' ')
常用变量演示
python第三天 变量 作业的更多相关文章
- Python第三周第一次作业中关于工程目录各种导入的模拟学习
目录 Python工程目录 导入自定义模块, 包 记录的缘由 模块搜索路径 模块: 导入模块 导入函数 导入类 多个类 @(Python第三周第一次作业中工程目录,模拟学习) Python工程目录 导 ...
- 【python】三个变量互换值
>>> x = 1>>> y = 2>>> z = 3>>> y3>>> z1 大写的帅字! (来自小甲鱼习题 ...
- 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化
孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...
- python基础学习日记(一)注释(二)算术运算符(三)变量的基本使用
一.python程序的注释 注释部份程序运行时不起作用.用于说明代码的用途 1.单行注释 # 开始的一行文字,为单行注释 # 单行注释 print("hello python") ...
- python基础学习(三)变量和类型
变量的作用:变量就是用来存储数据的. 变量的定义 在python中,变量在使用之前需要进行赋值,变量只有赋值后才能使用,如果变量没有赋值就使用会出现什么情况呢?如下图,使用之前变量未定义,会报错,如下 ...
- python第三次周末大作业
''' s18第三周周末⼤作业 模拟博客园系统: 1. 启动程序, 显⽰菜单列表 菜单: 1. 登录 2. 注册 3. ⽂章 4. ⽇记 5. 退出 2. ⽤户输入选项, ⽂章和⽇记必须在登录后才可以 ...
- JAVA第三周课后作业
JAVA课后作业 一.枚举类型 代码: enum Size{SMALL,MEDIUM,LARGE}; public cl ass EnumTest { public static void main( ...
- Python 第三篇(下):collections系列、集合(set)、单双队列、深浅copy、内置函数
一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在py ...
- Python第三天 序列 数据类型 数值 字符串 列表 元组 字典
Python第三天 序列 数据类型 数值 字符串 列表 元组 字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...
随机推荐
- es 基于match_phrase的模糊匹配原理及使用
[版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 在业务中经常会遇到类似数据库的"like"的模糊匹配需求 ...
- list源码3(参考STL源码--侯捷):push_front、push_back、erase、pop_front、pop_back、clear、remove、unique
list源码1(参考STL源码--侯捷):list节点.迭代器.数据结构 list源码2(参考STL源码--侯捷):constructor.push_back.insert list源码3(参考STL ...
- 搜索核心原理之网页和查询的相关性——TF-IDF
1.相关性的演进: i.单文本词频TF(Term Frequency) 用关键词的出现的次数除以文章的总次数,做归一化处理得到TF,来屏蔽文章长度对用关键词出现次数来衡量 ...
- mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)
一.概述 二进制日志(binlog)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句, 语句以"事件"的形式保存,它描述了数据的更改过程, ...
- LearnOpenGL学习笔记(二)——着色器简单理解
着色器在OpenGL中发挥着重要作用,它就像一个画笔,将输入的数据流,转为数学坐标,再将三维坐标变成二维坐标(针对我们现在用的二维显示器,全息显示器肯是三维的),再把二维坐标实际的像素点位置(这里面肯 ...
- ProxySQL Cluster 高可用集群环境部署记录
ProxySQL在早期版本若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数据并不能共通,在主实例上配置后,仍需要在备用节点上进行配置,对管理来说非常不方便.但是Proxy ...
- Nginx/Apache之伪静态设置 - 运维小结
一.什么是伪静态伪静态即是网站本身是动态网页如.php..asp..aspx等格式动态网页有时这类动态网页还跟"?"加参数来读取数据库内不同资料,伪静态就是做url重写操作(即re ...
- 如何在framegroup各个frame和window之间共享数据
可以尝试使用execScript,在指定window或者frame中执行脚本,对于frameGroup里面的frame也有效,若name和frameName都未指定,则在当前window中执行脚本,具 ...
- C# .aspx 页面更换命名空间
1.选中命名空间,右键单击,选择重构,之后选择重命名.如下图: 2.弹出重命名对话框 3.重写你需要的名字,点击确定. 4.这里重点注意了,不可直接点击应用,否则你会后悔的.你必须对应的看看那个是否是 ...
- scala简单入门_wordCount
scala的语法写起来是非常的舒服的,相比java来说,简便许多.而Java在scala面前就显的略微有些笨重了. 接下来我们看一下scala版的wordcount import scala.io.S ...