一、变量
现在要求你用程序把每个消费分类统计和总消费依次计算并打印出来,你怎么做呢?
1.1 程序实现:
你发现没有?你在最后在算总消费的时候,直接用的是之前已经算好的中间结果,为什么这么做?都知道这样是为了避免重新再算一遍所有的数据。那在程序中呢?
看到了没?这么写是有问题的,问题在哪呢?你最后算总消费的时候,是把之前算出来的分类结果填进去的,但是我们把程序写在脚本里面运行时,你肯定不会预先知道吃饭,交通,买衣服3个分类的结果的,这个结果是动态算出来的,那你如何把这3个动态结果做为总消费运算的数据源呢?
答案就是:直接把每个分类结果先起一个名称存下来,然后计算总消费的时候,只需要把之前存下来的几个名字调用一下就可以了
eat,cloth,traffic,精神,total这几个名字的作用,就是把程序运算的中间结果临时存到内存里,以备后面的代码继续调用,这几个名字的学名就叫着“变量”
变量定义规范:
声明变量:变量名(标识符)=变量值
name = “mike”
- 变量只能是字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名:
- ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
变量命名习惯:
驼峰体:
AgeOfOldboy = 56
NumberOfStudents = 80
下划线:
age_of_oldboy = 56
number_of_students = 80
官方推荐:
下划线的方式
定义变量比较low的方法:
二、常理
常理即指不变的量,如π=3.141592653......,或在程序运行过程中不会改变的量
在Python中没有一个专门的语法代表常理,程序员约定俗成用变量名全都大写代表常理
AGE_OF_OLDBOY = 55
在c语言中有专门的常理定义语法,const in count = 60;一旦定义为常理,更改即会报错
三、读取用户输入
name = input("what is you name?")
print("Hello" + name)
可以让用户输入多个信息,如下:
name = input("what is you name?")
age = input("How old are you?")
hometown = input("where is your hometown?")
print("hello ",name,"you are ",age,"years old, you came from",hometown)
四、注释
代码注释用#
多行注释用''''''
代码注释原则:
不用全部加注释,只需要在自己觉得重要或不好理解的部分加注释即可
注释可以用中文或英文,但绝对不要用拼音哦
五、数据类型
int(整型)
python中当你的数值小于int范围的时候,就是int变量,当大于int范围的时候,就是long类型了。在python中当你的变量大于int范围的时候,python会自动帮你把数据类型转为long类型的。
32位系统 int的范围为 -2**31 到 2**31-1
64位系统 int的范围为 -2**63 到 2**63-1
long(长整型)
跟C语言不同,Python的长整型没有指定位宽,即:python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意:自从python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也会导致严重后果了。
- 注意在python3里不再有long类型了,全都是int
- 除了int和long之外,其实还有float浮点型,复数型
字符型:
在Python中,加入引号的字符都被认为是字符串
那单引号、双引号、多引号有什么区别?
单双引号没有任何区别,只有下面这种情况需要考虑单双引号的配合
msg= "My name is mike,I'm 20 years old!”
那多引号的作用呢?
作用就是:多行字符串的时候用多引号
msg = '''我叫Mike,今年20岁,
来自于湖南,我喜欢打篮球、乒乓球、
跑马拉松。'''
print(msg)
字符串拼接:
数字可以进行加减乘除等运算,字符串呢?
注意:字符串的拼接只能是双方都是字符串,不能跟数字或其它类型拼接
布尔类型很简单,就两个值,一个True(真),一个False(假),主要用于逻辑判断!
格式化输出:
1 name = input("Name:") 2 age = input("Age:") 3 job = input(str("Job:")) 4 hometown = input(str("Hometown:")) 5 6 info = """ 7 ---------------info of %s------------- 8 Name: %s 9 Age: %s 10 Job: %s 11 Hometown: %s 12 """ %(name,name,age,job,hometown) 13 14 print("info:",info)
六、运算符
计算机考研进行的运算有很多种,可不只加减乘除这么简单,运算种类可分为算数运算符,比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算
七、流程控制
单分支:
1 # 1、输入姓名、性别、判断如果是女生,打印我是快乐女生! 2 sex = '女生' 3 age = 28 4 UserName = input("请输入你的姓名:") 5 Sex = str(input("请输入你的性别:")) 6 Age = int(input("请输入你的年龄:")) 7 8 if sex == Sex and age > Age : 9 print("我是快乐女生!")
1 if 条件: 2 满足条件执行代码 3 4 else: 5 if条件不满足就走这个 6 7 8 练习: 9 # 1、输入姓名、性别、判断如果是女生,打印我是快乐女生,否则,打印我是快乐男生! 10 sex = '女生' 11 UserName = input("请输入你的姓名:") 12 Sex = str(input("请输入你的性别:")) 13 14 if sex == Sex: 15 print("我是快乐女生") 16 else: 17 print("我是快乐男生!") 18 19 20 #2、输入姓名,性别,年龄,判断如果是女生且年龄小于28岁,打印我是快乐女生,喜欢唱歌,否则,打印我是快乐男生,我要去跑马拉松! 21 22 #3、输入姓名,性别,年龄,判断如果是女生且年龄小于28岁,打印我是快乐女生,喜欢唱歌,否则,打印我是快乐男生,我要去跑马拉松!否则,打印跑马拉松需要训练
多分支:
1 if 条件: 2 满足条件执行代码 3 elif 条件: 4 上面的条件不满足就走这个 5 elif 条件: 6 上面的条件不满足就走这个 7 elif 条件: 8 上面的条件不满足就走这个 9 else: 10 上面所有的条件不满足就走这个 11 12 练习: 13 #写一个猜年龄的游戏 14 age_of_oldboy = 28 15 guess = int(input("输入年龄:")) 16 if guess > age_of_oldboy: 17 print("猜的太大了,往小里试试。。。") 18 elif guess < age_of_oldboy: 19 print("猜的太小了,往大里试试。。。") 20 else: 21 print("恭喜你,猜对了。。。") 22 23 # 匹配成绩的小程序,成绩有ABCDE5个等级,与分数的对应关系如下: 24 '''A 90 - 100 25 B 80 - 89 26 C 60 - 79 27 D 40 - 59 28 E 0 - 39 29 要求用户输入0-100的数字后,你能正确打印他的对应成绩''' 30 31 Score = int(input("请输入0-100的数字:")) 32 if Score > 100: 33 print("只能输入0-100的数字!") 34 elif Score >= 90 : 35 print("成绩等级为A!") 36 elif Score >= 80 : 37 print("成绩等级为B!") 38 elif Score >= 60 : 39 print("成绩等级为C!") 40 elif Score >= 40 : 41 print("成绩等级为D!") 42 elif Score < 0: 43 print("成绩不能小于0!") 44 else: 45 print("成绩等级为E!")
八、while循环
while 条件: 执行条件。。。
练习:
#打印1到100的偶数 count = 1 while count <=100: if count%2 ==0: print("count:",count) count +=1 #循环打印1-100,第50次不打印值,第60-80次,打印对应值的平方 count = 1 while count <=100: if count == 50: print() elif count >= 60 and count <= 80: print("loop:",count * count) else: print("loop:",count) count +=1
九、Dead Loop
有一种循环叫死循环,一旦触发,就运行个天荒地老,海枯石烂
count = 0 while True: #true本身就是真 print("你是风儿我是沙,缠缠绵绵到天涯。。。",count) count +=1
十、循环终止语句
如果在循环的过程中,因为某些原因,不想继续循环了,这个时候就需要用到break 或 continue语句
- break用于完全结束一个循环,跳出循环体执行循环后面的语句
- continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环
break:
count = 0 while count <= 100: #只要count<=100就不断执行下面的代码 print("loop", count) if count == 5: break count += 1 #每执行一次,就把count+1,要不然就变成死循环了 print("---------out of while loop ---------")
count:
count = 0 while count <= 100 : count += 1 if count > 5 and count < 95: #只要count在6-94之间,就不走下面的print语句 continue print("loop ", count) print("---------out of while loop ---------")
练习:
#优化猜年龄游戏,允许用户最多猜3次,中间猜对了,直接跳出循环 age_of_oldboy = 38 count = 1 while count <=3: guess = int(input("输入年龄:")) if guess > age_of_oldboy: print("猜的太大了,往小里猜。。。。") elif guess < age_of_oldboy: print("猜的太小了,往大里猜。。。。") else: print("恭喜你猜对了。。。") break count +=1
#优化猜年龄游戏,允许用户最多猜3次,猜了3次后,再问是否还想玩,如果用户选y,再允许猜3次,以次往复 age_of_oldboy = 38 count = 0 while count <3: guess = int(input("输入年龄:")) if guess > age_of_oldboy: print("猜的太大了,往小里猜。。。。") elif guess < age_of_oldboy: print("猜的太小了,往大里猜。。。。") else: print("恭喜你猜对了。。。") break count +=1 if count == 3: msg = input("是否还想玩?输入(y|Y):") if msg == 'y' or msg == 'Y': count = 0 else: print("输入错误!")
while****else
while后面的else作用是:当while循环正常执行完,中间没有被break终止的话,就会执行else后面的语句
count = 0 while count <= 5 : count += 1 print("Loop", count) else: print("循环正常执行完啦") print("---------out of while loop ---------")
# 基础需求:
# 让用户输入用户名密码
# 认证成功后显示欢迎信息
# 输错三次后退出程序
1 #while循环实现 2 3 count = 0 4 while count < 3: 5 username = input("请输入你的姓名:") 6 password = input("请输入你的密码:") 7 if username == 'mike' and password == '123': 8 print("恭喜你,登录成功!") 9 break 10 else: 11 print("输入的用户名或密码错误,请重新输入!") 12 count += 1
1 #for 循环实现 2 for count in range(3): 3 username = input("请输入你的姓名:") 4 password = input("请输入你的密码:") 5 if username == 'mike': 6 if username == 'mike' and password == '123': 7 print("恭喜你,登录成功!") 8 break 9 else: 10 print("输入的用户名或密码错误,请重新输入!") 11 else: 12 print("用户名不存在!") 13 count += 1
# 升级需求:
# 可以支持多个用户登录 (提示,通过列表存多个账户信息)
1 # 可以支持多个用户登录 (提示,通过列表存多个账户信息) 2 3 f = open("account_db", "r") 4 accounts = {} 5 for line in f: #循环文件内容 6 u,p = line.split(',') 7 accounts[u] = p.strip() 8 print(accounts) 9 10 count = 0 11 while count < 3: 12 username = input("请输入用户名:") 13 password = input("请输入密码:") 14 if username in accounts: #判断用户是否在字典中存在 15 if password == accounts[username]: # 判断用户名对应的密码是否正确 16 print("欢迎你", username) 17 break 18 else: 19 print("输入用户名或密码错误") 20 21 else: 22 print("用户名不存在!") 23 count += 1 24 else: 25 print("输入错误信息太多,请稍后再试!")
# 用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
流程图:
1 f = open("account_db", "r") 2 accounts = {} 3 for line in f: # 循环文件内容 4 u,p = line.split(',') 5 accounts[u] = p.strip() 6 7 print(accounts) 8 # 加载锁定的用户列表 9 lock_file = open("lock_file", "r") 10 lock_users = [] 11 for line in lock_file: 12 lock_users.append(line.strip()) 13 14 count = 0 15 fist_input_val = None # 空,占位符 ,为了生成一个变量 16 17 same_to_first_input = True # 存储每次输入的用户名是否一致的状态 18 19 while count < 3: 20 username = input("请输入用户名:").strip() 21 password = input("请输入密码:").strip() 22 #判断用户是否被锁定 23 if username in lock_users: 24 print("该用户已锁定,请联系管理员") 25 exit() 26 27 if count == 0 : # 第一次循环 28 fist_input_val = username 29 30 # 第二次循环 31 if fist_input_val != username: # 代表第一次和第二次输入的用户名不一样 32 #记下对比的状态 33 same_to_first_input = False 34 print("-----------------") 35 if username in accounts: # 判断用户是否在字典中存在 36 if password == accounts[username]: # 判断用户名对应的密码是否正确 37 print("欢迎你", username) 38 break 39 else: 40 print("输入用户名或密码错误") 41 42 else: 43 print("用户名不存在!") 44 count += 1 45 else: 46 print("输入错误信息太多,请稍后重试!") 47 48 if same_to_first_input: # 代表三次输入的用户名一致 49 #要锁定这个用户 50 f = open("lock_file", 'a') 51 f.write("%s " % username) 52 f.close() 53 print("该用户的密码输入错误3次,用户已经被锁定!")