17年4月中旬在51cto上报名了老男孩PYTHON高级自动化开发的课程,此随笔为记录学习中的有意义的东西(自我感觉有意义)
一、pycharm的基本配置与使用
之前自学过一段时间,一直用的自带的IDLE和notepad++,现在开始用pycharm,但是很不熟悉,随着使用不断补充和修改
开始可以设置字体、样板等,网上都很容易搜到
1.setting--editor--file and code template ,找到Python script,可以为新建的Python文件定义模板,只有再次新建才会生效。
2.常用快捷键:
ctril + D 复制当前行
ctril + Y 删除当前行
ctril + / 为当前行注释/取消注释
TAB,为当前选中部分都增加一个TAB,相反的话,SHIFT + TAB
二、基本知识点
2.1 input()默认输入的都是字符串格式,如果输入数字需要比较大小的话,可以int(input())
2.2 Python 2.x如果需要使用中文的话,需要声明# -*- coding: utf-8 -*- 因为默认使用的是ASCII
2.3 continue 和 break
1 for i in range(10): 2 3 if i<5: 4 continue #不往下走了,直接进入下一次loop 5 print("loop:", i ) 6 7 #################################### 8 for i in range(10): 9 if i>5: 10 break #不往下走了,直接跳出整个loop 11 print("loop:", i )
2.4 注释
两种注释,一个是每行内容前加#,#后面的这一行内容就被注释了 (常用语解释每行代码什么意思)
另一种是使用三重引号,里面添加内容,""" 内容""",如果没有将它赋予一个变量,那么三重引号之间的内容就是一个注释(写函数,模块或者文件说明时常用)
2.5 打印print()
默认每一条print语句后面都打印换行符,如果print后面替换为制表符
print(' ',end='')或者print('打印的内容',end=' ')
def print(self, *args, sep=' ', end=' ', file=None):
sep表示print打印的多个value默认是以空格相隔,end默认以回车结尾,file = None,其实就是默认当前输出为sys.stdout,标准输出当前屏幕上,所以file = file_name,输出到文件中
如
b =123 a = 'sfaf' with open('copy1','w') as f: print(a,b,a,sep='----',file=f) #屏幕上不会有输出,会输出到文件copy1上 文件显示如下: sfaf----123----sfaf #默认是以空格间隔,现在是----
2.6 locals()
内置函数,返回当前作用域中的变量集合
三、 while、for循环的例子:
猜年龄,猜对了,跳出整个循环,共3次机会,都错了,提示是否继续,否的话,直接推出。根据语境想了三个例子:
第一个是视频上讲的,最简洁
cq_age = 27 n = 0 while n < 3: #只要n小于3,也就是0,1,2,三次都会执行while,否则执行最后的else. n +=1 age = int(input("please enter your guess:")) if age < cq_age: print("think bigger") elif age > cq_age: print("thinker smaller") else: print("you got it") break #跳出整个while循环,属于非正常执行完while,所以不会执行最后的else if n == 3: answer = input("do you wangt conntinue ?") if answer != 'n': #只要你不回答n,默认同意继续,令变量n再次赋值为0,如果是n的话,那么n==3,循环就为False了,执行最后的else n = 0 else: print("you have tried 3 times ,fuck off")
第二个是未看视频前,自己琢磨的,好low:
1 cq_age = 27 2 n = 0 3 while n == 0: #大循环,n只要等于0为真,这个巡检就一直执行 4 while n < 3: #小循环 5 n +=1 6 age = int(input("please enter your guess:")) 7 if age < cq_age: 8 print("think bigger") 9 elif age > cq_age: 10 print("thinker smaller") 11 else: 12 print("you got it") 13 break #break会跳出当前的循环,这里只跳出小循环,所以后面if语句判断年龄猜对的话,继续break大循环,结束,不然只跳出小循环的话,大循环n等于0接着不满足条件还要执行最后的else,不合要求 14 else: 15 answer = input("you have tried 3 times ,do you want continue ?") 16 if answer != 'n': 17 n = 0 #保证大循环的n等于0条件仍然满足,继续大循环一次,那么小循环也会继续执行 18 #else: 19 # break 20 if age == cq_age: #对应上面的第一个break, 21 break 22 else: 23 print("bye ,lowerB")
用for写的
1 cq_age = 27 2 n = 0 3 while True: #试了3次且答复不继续或答对了才会退出,否则一直123的循环 4 for n in range(3): 5 age = int(input("please enter your guess:")) 6 if age < cq_age: 7 print("think bigger") 8 elif age > cq_age: 9 print("thinker smaller") 10 else: 11 print("you got it") 12 break 13 else: 14 answer = input("you tried 3 times,do you want continue ?") 15 if answer == 'n': 16 print('bye') 17 break #此break对应的是紧邻的else,不在for循环内,所以跳出的是while循环 18 if age == cq_age: 19 break #也是跳出while循环
四、作业:
4.1 编写登陆接口
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后锁定(就是锁定后,再登录,就提示用户已经锁定。所以每次登陆前都要做一次是否锁定的检查)
大体思路:用户名:密码存在一个字典user_pass里,锁定的用户存在一个列表lock_user里,输入用户名后,检查用户名是否在lock_user里,在的话,提示被锁定,退出;没有锁定的话,检查用户名是否在
字典里,不在的话提示无效的用户名,在的话再输入密码,验证三次不成功,将用户添加到lock_user列表里。之后用文件替代这些表,每次运行先读取这些文件。
1 #########start:create two files named userpass and lockuser########### 2 # file1 = open('userpass.txt','w') 3 # file1.write("{'cui qing':'abc123','zhangsan':'abc111','lisi':'aaa123','wangwang':'123ert','ppp':'qwer'}") 4 # file1.close() 5 # print(user_pass) 6 # file2 = open('lockuser.txt','w') 7 # file2.write("['zhangsan','lisi']") 8 # file2.close() 9 #############end################################################ 10 file1 = open('userpass.txt','rt') 11 line1 = file1.read() 12 user_pass = eval(line1) 13 file2 = open('lockuser.txt','rt') 14 line2 = file2.read() 15 lock_user = eval(line2) #eval()可以将字符串转换为表达式,因为从文本读取的是一个str格式,e转换后变成dict 16 # user_pass = {'cui qing':'abc123','zhangsan':'abc111','lisi':'aaa123'} 17 # print (user_pass['cui qing']) 18 # lock_user = ['zhangsan','lisi'] 19 # print(lock_user) 20 n = 0 21 while True: 22 username = input("please enter your username:") 23 if username in lock_user: 24 print('your account is locked!') 25 break #退出while true循环 26 elif username in user_pass: 27 print('your account is true') 28 while n < 3: 29 n += 1 30 password = input('enter your password:') 31 if password == user_pass[username]: 32 print("welcome %s"%username) 33 break #退出小循环 34 else: 35 print("your password is wrong") 36 else: 37 print('''wrong password your account is locked.''') 38 lock_user.append(username) 39 lock_user_str = str(lock_user) 40 file2 = open('lockuser.txt', 'w') 41 file2.write(lock_user_str) 42 file2.close() 43 print (lock_user) 44 break #退出while true循环 45 if password == user_pass[username]: 46 break #退出while true循环 47 else: 48 print('invalid username')
4.2 多级菜单
- 三级菜单
- 可依次选择进入各子菜单(目前有问题,先抄上,到公司去研究下)
# f = open('hw3.txt','w')
# f.write("""{'上海':{'闵行':('莘庄','七宝','春申'),'浦东':('陆家嘴','张江')},'山东':{'济南':('历下区','槐荫区'),'德州':('齐河县','禹城市')}}""")
# f.close()
f = open('hw3.txt','rt')
memu = eval(f.read())
f.close()
# print(memu)
top = True
print('输入名称进入下一级,quit退出,back返回')
while top:
for memu1 in memu:
print(memu1)
answer1 = input('L1:')
if answer1 in memu:
while top:
for memu2 in memu[answer1]:
print(memu2)
answer2 = input('L2:')
if answer2 in memu[answer1]:
while top:
for memu3 in memu[answer1][answer2]:
print(memu3)
answer3 = input('L3:')
if answer3 in memu[answer1][answer2]:
print('Welcome to %s'%answer3)
top = False
elif answer3 == 'quit':
top = False
elif answer3 == 'back':
break
elif answer2 == 'quit':
top = False
elif answer2 == 'back':
break
elif answer1 == 'quit':
top = False