Python作业第一课
零基础开始学习,最近周边的同学们都在学习,我也来试试,嘿嘿,都写下来,下次不记得了还能来看看~~
Python作业第一课
1)登陆,三次输入锁定,下次不允许登陆
2)设计一个三级菜单,菜单内容可自行定义,任意一级输入q则退出程序,如果输入b则返回上一级
--以上两个题目涉及几个知识点:文档的读取,文档的写入,列表的操作,循环的使用,字符串的一些操作
首先回顾一下这几个知识点
a)文档的读取,几个常用的
f = open("test.log","w")
这个w是参数,可换成别的参数
w 以写方式打开,
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
b)关闭文件
f.close()
c)文件内容操作
f.read()一次性读取全部所有内容,可调整为f.read([size]),读取size个字节的内容
f.readline()读一行数据
f.readlines()一次性读取所有内容按行返回
f.truncate(n)从文件开头截取n个字符,超出的删除
f.seek(n)跳到指定位置n,f.seek(0)是返回文件开始
e.g.
h = open("menu2.log","r")
for line in h.readlines():
if "2" in line:
print(line)
h.close()
f.write(str)写文件
e.g. 是全新创建了一个文件,之前的内容会被清空
h = open("menu2.log","w")
h.write("this is the test line")
h.close()
e.g. 在之前的文件后面追加
h = open("menu2.log","a")
h.write("this is the add line")
h.close()
d)列表的操作(list)
name_list = ["a","b","c","d"]
******************************这里穿插一点东西
我们可以通过dir(name_list)查找可执行的命令[注意前后带_线的没什么用,不需要看]
type(name_list)可返回这个变量的类型
************************************************************
切片:(从0开始,负数是从右边开始,-1是最右边的值)
name_list[1] > b
name_list[-1] > d
name_list[0:2] > a,b 0:2是指的是01两个值并不包括2
name_list[0:3:2] > a,c 0:3:2前面是取abc后面那个2则是指隔2个再切
name_list.append("e") > a,b,c,d,e 向列表最后面增加一个元素
name_list.pop() 删除列表最后的一个元素
name_list.remove("c") 删除叫c的元素
name_list[1] = "ff" 将第二个元素改为ff
name_list.insert(1,"test") 插入一下新元素,索引为1
name_list.count("ff") ff的个数
list2 = ["ee","gg"]
name_list.extend(list2) 把list2合并到name_list
name_list.sort() 将列表排序
e)元组的操作(tuple)
元组跟列表很类似,不同的是一旦初始化后就不能再调整,没有append,insert这样的方法,切片什么的是一样取
f)字符串的格式化操作
name = input("name: ").strip() 输入名字并去除左右的空
print(name) 输出名字
print(name, + "-" + name )
print("Name:%s:\nAge:%s\nJob:%s" %(name,age,job))
g)循环
for i in range(3): 从0-2
while a ==0:
while true: -- 无限循环
break 跳出循环
continue 继续
h)条件判断
if a==0:
elif a==1:
else:
基本的知识点就是这些了,现在进入正题了
1)登陆,三次输入锁定,下次不允许登陆
首先准备了两个文件,一个是用户及密码的,一个是存放写入被锁的用户的,名字分别为:user.log和lockuser.log
user.log中的内容是我事先自己编好放进去的,如下
autumn,autumn123
summer,summer123
angle,angle123
tiffany,tiffany123
fay,fay123
lockuser.log最开始是空的
如果输入用户名正确,密码输入三次错误则写入到lockuser.log,下次再用此用户登陆则会提示该用户被锁
代码如下:
input_name = input("The name is: ").strip() f = open("lockuser.log","r") count = 0 #标识帐户是否被锁定 count1 = 0 #标识是否输对帐户 #查看文件,看输入的账户是否被锁定,锁定则退出程序 for line in f.readlines(): if line.strip() == input_name: print("The account has locked!") count = 1 break f.close() #帐户未被锁定的情况 if count == 0: f1 = open("user.log","r") for line in f1.readlines(): lineword = line.split(',',2) if lineword[0] == input_name: count1 = 1 #帐户输入正确,进入三次输入密码的机会进行输入 for i in range(3): input_password = input("The password is: ").strip() if input_password == lineword[1].strip(): print("Welcome to here, have a good nice trip!") break if i == 2: f2 = open("lockuser.log","a") f2.write("\n") f2.write(lineword[0]) f2.close() print("Three times,the account has locked!") if count1 == 0: print("The user account is not exits!")
2)设计一个三级菜单,菜单内容可自行定义,任意一级输入q则退出程序,如果输入b则返回上一级
首先一级菜单我是用常量写SHI在代码里的,二级菜单和三级菜单分别放在了两个文件中,名字分别为:menu2.log和menu3.log,当然其实一级菜单也可以写到文件里,去读文件来实现
这段代码的重点其实是在几层循环里都代入了一个记数的变量来跳出最外层的循环(输入q时)
所有输入正常的时候程序最后会输出你选择过的三个选项如:北京-朝阳-三里屯街道
代码如下:
count1 = 0 count2 = 0 count3 = 0 input_name1 = "" input_name2 = "" input_name3 = "" value1 = "" value2 = "" value3 = "" print("Choose the favorite place!") while count1 == 0: #选择第一级的菜单 print("**************************************************") print("1 北京 ") print("2 上海 ") print("3 广州 ") print("4 深圳 ") print("**************************************************") input_name = input("Please chose the fire level: ").strip() if input_name == "1": value1 = "北京" elif input_name == "2": value1 = "上海" elif input_name == "3": value1 = "广州" elif input_name == "4": value1 = "深圳" #根据第一级菜单的选择项读取文件展示第二级菜单,存在则展示二级菜单,提示选择二级菜单 if input_name in ('1','2','3','4'): f = open("menu2.log","r",encoding= 'utf-8') for line in f.readlines(): if input_name in line: lineword = line.split(',',4) for i in range(len(lineword)): if i > 0 : print(str(i) + " " + lineword[i]) f.close() print("**************************************************") #print(value1) input_name2 = input("Please chose the second level:").strip() input_name1 = input_name + input_name2 #如果输入b则返回上一级菜单 elif input_name == "b": continue #如果畭q则退出整个程序 elif input_name == "q": print("See you next time!") break #输入其它字符也退出同时提示无效的输入 else: print("Valid input! Please try again !") continue while count2 == 0: #根据第一二级菜单展示第三级菜单 #如果输入的菜单在有效范围内去读取第三级的菜单 if input_name2 in ('1','2','3'): value2 = lineword[int(input_name2)] #print(value2) g = open("menu3.log","r",encoding="utf-8") for line in g.readlines(): if input_name1 in line: lineword = line.split(',',4) for i in range(len(lineword)): if i > 0: print(str(i) + " " + lineword[i]) g.close() print("**************************************************") input_name3 = input("Please chose the third level:").strip() #如果输入b退出此次循环,返回上一级菜单 elif input_name2 == "b": break #如果输入q则退出整个循环 elif input_name2 == "q": count1 = 1 print("See you next time!") break #输入其它字符也退出同时提示无效的输入 else: print("Valid input! Please try again!") break #第三次輸入的判斷 while count3 == 0: if input_name3 == "q": count1 = 1 count2 = 1 print("See you next time!") break elif input_name3 == "b": break elif input_name3 in ('1','2','3'): value3 = lineword[int(input_name3)] print("Your favorite place is :" + value1 + "-" + value2 + "-" + value3 ) count1 = 1 count2 = 1 break else: print("Valid input! Please try again!") break
流程图没有画,下次我会画一下流程图,大概就是这么多东西,明天接着继续学习,加涅个油啊!!!