python开发学习笔记之一(用户登录接口)

   

第一章 基本语法

第一个程序hello world:

 print(‘hello world’)

变量 (Variable;var):

 用来把程序运算的中间结果临时存储在内存中,方便后续的调用

 <变量名> = <变量内容>

name = 'wilbur0402'

 变量名命名规则:

 变量名只能是字母、数字、下划线的任意组合

变量名第一个字符不能为数字
关键字不能声明为变量名
 
变量命名习惯:
驼峰体:单词首字母大写
下划线:单词间用下划线

 不建议的命名:

 汉字  拼音  词不达意 过长

ps:当一个变量b指向另一个变量a时,实际上是指向那个变量a所指向的内容

a = 1
b = a
>>> b = 1
 
a = 3
>>> b = 1

 常量:

不变的量就是常量,约定俗成的,变量名全部大写就是常量

 读取用户输入:

 input( )函数,输入的内容数据类型默认是字符串

 当执行到input()时,等待用户输入内容

 注释:

#这是一行注释
'''
这是多行注释,
用三个单引号。
'''
数据类型: 
python解释器可以自动识别输入的数据类型,除非进行强制数据类型转换
ps:type( )返回当前输入的数据类型
 
基本类型:
数字(number):整型(int)、长整型(long)、浮点型(float)、复数
字符串(string):文本(str)、字节(bytes)
布尔(bool):True、False
数据集:
表(list)、元组(tuple)、字典(dict)、集合(set)
字符串格式化输出:
# %s为占位符  另外还有%d %f
# s = string
# d = digit
# f = float
info = '''
--------- info of %s ---------
Name:        %s
Age:         %s
Job:         %s
Hometown:    %s
------------- end ------------
'''%(name,name,age,job,hometown)
运算符号:
 
算数运算:
 
比较运算:
 
赋值运算:
 
逻辑运算:
 
成员运算:
 
身份运算:
 
位运算:
 
if/elif/else多分支运算:
if 条件:
    。。。
elif 条件:
    。。。
elif 条件:
    。。。
else :
     。。。

 多分支练习题:

设计匹配成绩程序,成绩分ABCDE五个等级,与分数对应关系如下:
A 90-100
B 80-89
C 60-79
D 40-59
E  0-39
 
 1 mark = int(input('pleaese input your mark:'))
 2  
 3 if mark>100 4     print('分数不能大于100')
 5  
 6 elif mark >= 90:
 7     print('your mark level is A')
 8  
 9 elif mark >= 80:
10     print('your mark level is B')
11  
12 elif mark >=60:
13     print('your mark level is C')
14  
15 elif mark >=40:
16     print('your mark level is D')
17  
18 elif mark >=0:
19     print('your mark level is E')
20 else:
21     print('分数不能是负数')
22  
 
while循环:
       while 条件:
 

             执行代码。。。
 
 
循环练习:
#循环打印1-100
count = 0
while count <= 100:
    print('loop',count)
    count += 1
print('------loop end---------')
 
#只打印偶数
count = 0
while count <= 100:
   if count%2 == 0:
        print('loop',count)
    count += 1
print('------loop end---------')
#不打印50,在60-80时打印平方
count = 0
while count <= 100:
if count == 50:
pass
elif count >= 60 and count <=80:
print(count*count)
else:
print('loop',count)
count += 1
print('------loop end---------')
死循环:
 

    while True:
 

        执行代码
 
循环终止:
break  / continue
break:完全终止循环
continue: 终止本次循环
 1 #猜年龄
 2 age = 21
 3 count = 0
 4 while count <3:
 5     guess = int(input('your guess:'))
 6         count += 1
 7         if guess < 0:
 8             print('输入错误!')
 9         elif guess > age:
10             print('猜得太大了!')
11         elif guess < age:
12             print('猜得太小了!')
13         else:
14             print('猜对了!')
15             break
16         if count == 3:
17             ctn = input('想继续吗?(Y/N)')
18             if ctn =='Y':
19             count=0
while...else语句:
当while正常执行完,就会执行else语句
(当while非正常执行,就不会执行else语句)

第一次作业是做用户登录接口:

作业要求:
基础需求: 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 升级需求: 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
第一次全功能实现的代码:
# author:wilbur0402
userdata = {
    'zhangsan':'aaa111',
    'lisi':'bbb222',
    'wangwu':'ccc333'
}

count = 0
f = open('黑名单','a+',encoding='utf-8')#打开文件
f.seek(0)#重置文件指针位置
data = f.read()

while True:
#三次循环体
     user = input('please input your username:')
     ban = user#为黑名单格式化保留裕量

     if  ban  not in data:
     #确认用户输入不在黑名单内
         passwd = input('please input your password:')
         count += 1

         if count < 3:

               if user in userdata and passwd == userdata[user]:
               #判断用户输入账号密码是否对应
                     print('welcome %s back!' % user)
                     break

               else:
                  print('invalid username or password!')

         else:
         #尝试三次输入错误后将用户输入账号写入黑名单并跳出循环
               print('you inputed invalid username or password 3 times!')

               if user in userdata and user not in data:
                 f.write('%s
'%user)

               break

     elif user == '':
     #过滤空字符输入
         print('invalid username!')

     else:
     #当用户输入在黑名单内时返回封禁信息
         print('your account is banned!')
         break

这里我并没有用需求中所提示的用列表来保存用户信息,而是使用了字典

总结:

在debug时,遇到了空字符被ban的bug,困惑了好久,经过我的深思熟虑(?),我忘了可以用多分支来解决空字符输入问题。

经过我的测试,可以实现全部功能。

瞎聊几句:

说实话,这个作业我做了不下五次,但是每次都会遇到问题,而且遇到的问题还总是不一样的,让我十分的难受,不过总算在刘伟同学的帮助下,搞定了这些问题。

经过老师的批改,我应该注意一下问题:

缩进标准为四个空格、注释的#应该有一个空格。

  

原文地址:https://www.cnblogs.com/wilbur0402/p/9346637.html