流程控制
一、判断语句
1、if语句(单一条件分支)
-
格式
if 表达式: 语句
-
逻辑
当程序运行到if语句时,首先计算“表达式”的值,如果“表达式”的值为真,则执行“语句”。如果“表达式”的值为假,则结束if语句继续向下执行
特点 :只有条件为真才会走
-
代码
if 1: print("lucky is a good man") print("lucky is a nice man")
if 1: print("lucky is a good man") # 语句嵌套 if 1-1: print("lucky is a cool man")
2、if-else语句(双向条件分支)
-
格式
if 表达式: 语句1 else: 语句2
-
逻辑
当程序运行到if-else语句时,首先计算“表达式”的值。如果“表达式”的值为真,则执行“语句1”,执行完“语句1”结束整个if-else语句继续向下执行。如果“表达式”的值为假,则执行“语句2”,执行完“语句2”结束整个if-else语句继续向下执行
-
代码
if 0: print("lucky is a good man") else: print("lucky is a nice man")
if语句的简写
num = 5
print("hello" if num==5 else "world")
1 if 5>3 else 0
3、if-elif-else语句(多向条件分支)
-
格式
格式: if 表达式1: 语句1 elif 表达式2: 语句2 elif 表达式3: 语句3 …… elif 表达式n: 语句n else: 语句e
-
注意
最后的else部分可有可无
-
逻辑
当程序运行到if-elif-else语句时,首先计算“表达式1”的值,如果“表达式1”的值为真则执行“语句1”,执行完“语句1”则结束整个if-elif-else语句继续向下执行。如果“表达式1”的值为假则计算“表达式2”的值,如果“表达式2”的值为真则执行“语句2”,执行完“语句2”则结束整个if-elif-else语句继续向下执行。如果“表达式2”的值为假则计算“表达式3”的值,如此直到某个表达式的值为假才停止,如果没有表达式为真且有else语句则执行“语句e”,否则结束整个if-elif-else语句继续向下执行
-
代码
从控制台输入一个数字,如果是1则输出星期一,2则输出星期二,依次类推
num = int(input()) # 全部使用if语句可以实现 if num == 1: print("星期一") if num == 2: print("星期二") if num == 3: print("星期三") if num == 4: print("星期四") if num == 5: print("星期五") if num == 6: print("星期六") if num == 7: print("星期日")
num = int(input()) # 使用if-elif-else语句 if num == 1: print("星期一") elif num == 2: print("星期二") elif num == 3: print("星期三") elif num == 4: print("星期四") elif num == 5: print("星期五") elif num == 6: print("星期六") elif num == 7: print("星期日") else: print("输入有误")
4、if-elif-else精髓
-
精髓:每一个elif都是对它上面所有表达式的否定
从控制台输入一个年龄
小于等于0 输入有误
0~3 婴儿
4~8 童年
9~18 少年
19~29 青年
30~39 壮年
40~49 中年
50~150 老年
150以上 老妖怪
- 普通人刚学习编程写法
```python
age = int(input())
if age <= 0:
print("输入有误")
elif 0 < age and age <= 3:
print("婴儿")
elif 4 <= age and age <= 8:
print("童年")
elif 9 <= age and age <= 18:
print("少年")
elif 19 <= age and age <= 29:
print("青年")
elif 30 <= age and age <= 39:
print("壮年")
elif 40 <= age and age <= 49:
print("中年")
elif 5 <= age:
print("妖怪")
-
体验精髓
if age <= 0: print("输入有误") elif age <= 3: print("婴儿") elif age <= 8: print("童年") elif age <= 18: print("少年") elif age <= 29: print("青年") elif age <= 39: print("壮年") elif age <= 49: print("中年") else: print("妖怪")
二、循环语句
1、为什么要使用循环?
循环做某件事情
print("lucky is a good man")
print("lucky is a good man")
print("lucky is a good man")
print("lucky is a good man")
print("lucky is a good man")
2、while语句
-
格式
while 表达式: 语句
注意:如果条件为真就一直执行 也就是死循环
-
逻辑
当程序执行到while语句时,首先计算“表达式”的值。如果表达式的值为假则结束整个while语句继续向下执行,如果“表达式”的值为真则执行“语句”,执行完“语句”再次计算“表达式”的值。如果表达式的值为假则结束整个while语句继续向下执行,如果“表达式”的值为真则执行“语句”,执行完“语句”再次计算“表达式”的值。如此循环往复直到“表达式”的值为假才停止循环
-
实现多次打印
index = 0 while index < 5: print("lucky is a good man", index+1) index += 1
-
计算1+2+3+……+100的和
5的和
4的和+5
3的和+4+5
2的和+3+4+5
1的和+2+3=4+5
1+2+3+4+5sum = 0 while num <= 100: sum = sum + num num += 1 print("sum = %d"%sum)
打开程序异步模式
import os
import time
os.system("calc") #同步模式,一个程序执行结束,执行下一个
os.system("start calc") #异步模式
time.sleep(1) #暂停1秒
3、while-else语句
-
格式
while 表达式: 语句1 else: 语句2
-
逻辑
当“表达式”的值为假时会执行“语句2”,执行完“语句2”结束整个while-else语句继续向下执行
-
代码
num = 1 sum = 0 while num <= 5: sum = sum + num num += 1 else: print("%d不符合条件"%num) print("sum = %d"%sum)
-
whlie的简写
flag = 1 while (flag<=3): print ('欢迎');flag+=1
4、for语句
-
格式
for 变量名 in 集合: 语句
-
逻辑
当程序执行到for语句时,按顺序从“集合”中获取元素,“变量”保存当前循环得到的集合中的元素值,再去执行“语句”。如此循环往复,直到取完“集合”中所有元素才停止
-
实现多次打印
for x in [1,2,3,4,5]: print("----------%d"%x)
-
range()
原型:range([start, ]stop[, step])
range(stop)
range(start, stop)
range(start, stop, step)
功能:生成集合
参数:
start:表示列表起始值,包含, 默认为0
stop:表示列表结束值,但是不包含
step:阶跃值, 默认为1print(list(range(10))) print(list(range(1, 10))) print(list(range(1, 10, 2)))
-
使用range()实现多次打印
for x in range(5): print("lucky is a good man")
-
计算1+2+3+……+100的和
sum = 0 for x in range(1, 101): sum += x print("sum = %d"%sum)
-
遍历列表
words = ["good", "nice", "cool", "handsome"] # 遍历列表,获取到的是列表中的元素的值 for word in words: print(word) # 同时遍历列表的下标和元素 for index, word in enumerate(words): print(index, word)
5、死循环
概念:条件始终为真的循环称为死循环
while 1:
print("lucky is a good man")
三、关键字(pass&break&continue)
1、pass
作用:当语句要求不希望任何命令或代码来执行时使用
说明:
- pass语句表示一个空操作,在执行时没有任何的响应,pass的位置最终应该有代码来执行,只不过暂时写不出来
- 可以使用在流程控制和循环语句中
if 1:
pass
2、break
作用:退出循环
注意:只能跳出距离最近的for或者while循环
-
for
for x in range(10): if x == 5: # 结束循环(跳出循环) break print("x = %d"%x)
for x in range(3): for y in range(5): if y == 3: break print("******", y) print("-------", x)
-
while
while循环语句可以有else子句,表达式为假时会被执行,但是使用break终止while循环后else中的子句不执行
num = 0 while num < 8: print("num = %d"%num) num += 1 if num == 8: break else: print("--------else")
3、continue
作用:跳过本次循环后面的剩余语句,然后继续下一次循环
注意:只能跳过距离最近的for或者while循环
-
for
for x in range(10): if x == 5: continue print("x = %d"%x)
-
while
num = 0 while num < 10: if num == 5: num += 1 continue print("num = %d"%num) num += 1
四、遍历字典和set集合
1、遍历字典
定义一个学生字典
stu = {"name": "lucky", "age": 18, "sex": "男", "height": 173.5, "weight":80, "id": 1}
-
for key in stu
遍历字典的key
for key in stu: print(key, stu[key])
-
for value in stu.values()
遍历字典元素
for value in stu.values(): print(value)
-
for key, value in stu.items()
遍历字典的Key和Value
for key, value in stu.items(): print(key, value)
-
for index, key in enumerate(stu)
枚举遍历,可以得到类似下标的顺序值,但是注意,字典是无序的
for index, key in enumerate(stu): print(index, key)
2、遍历set集合
定义一个集合
s = set([1,2,3,4,5])
-
for key in s
for key in s: print("--------", key)
-
for index, key in enumerate(s)
for index, key in enumerate(s): print(index, key)
五、案例
1、中奖的概率
import random
num = 432
# for i in range(100,500):
i= 0
while True:
Winning = random.randrange(100,500) #产生一个区间范围的随机数
I+=1
if num == Winning:
print("中奖了 中奖号码是{}".format(num))
break
print(i)
2、求一个范围的 偶数 基数
#求偶数
for i in range(1,101):
if(i%2==0):
print(i)
#等同于
for i in range(1,101):
if i%2==1:
continue
print(i)
#求基数
for i in range(1,101):
if(i%2!=0):
print(i)
3、淘汰某一行 淘汰某一列
for i in range(8):
if i == 5:#淘汰某一行
continue
for j in range(10):
if j==5: #淘汰某一列
continue
print(j, end=" ")
print(' ')
4、 判断俩个数的大小 如果x>y 将俩个变量交换
x = 3
y = 1
if(x>y):
z = x
x = y
y = z
print(x,y)
不使用临时变量
我们也可以不创建临时变量,用一个非常优雅的方式来交换变量:
x,y = y,x
5、猜数字
num2 = 10.1
while True:
try:
num = eval(input("请输入你要猜的数字"))
if num == num2:
print("您猜的真准")
break
elif num>num2:
print("您输入的数字太大了")
else:
print("您输入的数字太小了")
except:
print("请输入正确的数字")
6、三角形
(1)、for实现左侧正三角形
#左侧正三角形
for j in range(1,10):
for i in range(1,j+1):
print(i,end='')
print('')
(2)、for实现右侧正三角形
#右侧正三角形
for j in range(1,10):
for x in range(1,10-j):
print(' ',end='')
for i in range(1,j+1):
print(i,end='')
print('')
(3)、for实现左侧倒三角形
#左侧倒三角形
mylist = list(range(1,10))
mylist.reverse()
for j in mylist:
for i in range(1,j+1):
print(i,end='')
print('')
(4)、for实现右侧倒三角形
#右侧倒三角形
mylist = list(range(1,10))
mylist.reverse()
print(mylist)
for j in mylist:
for x in range(1,10-j): #输出空格
print(' ',end='')
newlist = list(range(1,j+1))
newlist.reverse()
for i in newlist:
print(i,end='')
print('')
(5)、while实现左侧正三角形
#while三角形 左正三角形
j = 1
while j<=9:
i = 1
while i<=j:
print(i,end='')
I+=1
j+=1
print('')
(6)、while实现右侧正三角形
#右侧正三角形
j = 1
while j<=9:
k = 1
while k<=9-j:
print(' ',end='')
k+=1
i = j
while i>=1:
print(i,end='')
I-=1
j+=1
print('')
(7)、while实现左侧倒三角形
#左侧倒三角形
j = 9
while j>=1:
i = 1
while i<=j:
print(i,end='')
I+=1
j-=1
print('')
(8)、while实现右侧倒三角形
#右侧倒三角形
j = 9
while j>=1:
k = 1
while k<=9-j:
print(' ',end='')
k+=1
i = j
while i>=1:
print(i,end='')
I-=1
j-=1
print('')
7、猜21点游戏
import random,time
user1 = input('请输入玩家1的名称')
user2 = input('请输入玩家2的名称')
# 存储赢的次数的字典
user_info = {user1:{'win':0},user2:{'win':0}}
while True:
computer1_num = random.randint(1, 10)
computer2_num = random.randint(1, 10)
# 获取俩个用户想要输入的数字
user1_num = input('{}:请输入一个数字(按q退出游戏)'.format(user1))
user2_num = input('{}:请输入一个数字(按q退出游戏)'.format(user2))
# 如果有人输入了q则代表结束
if user1_num == 'q' or user2_num == 'q':
print('欢迎下次在玩')
break
user1_sum = int(computer1_num) + int(computer2_num) + int(user1_num)
user2_sum = int(computer1_num) + int(computer2_num) + int(user2_num)
print('底牌数字为:',computer1_num,computer2_num)
if abs(user1_sum-21) > abs(user2_sum-21):
print('{}:点数为:{} {}:点数为:{} 结果:{}获胜'.format(user1,user1_sum,user2,user2_sum,user2))
user_info[user2]['win'] += 1
else:
print('{}:点数为:{} {}:点数为:{} 结果:{}获胜'.format(user1, user1_sum, user2, user2_sum, user1))
user_info[user1]['win'] += 1
print('计算机正在重新洗牌')
time.sleep(2)
8、 登录
dbUserName = 'admin'
dbUserPass = '123456'
while True:
loginName = input('请输入用户名') #动态获取用户名
loginPass = input('请输入密码') #动态获取用户输入的密码
state = 1 #给一个用户名的状态值 默认为1
if loginName != dbUserName: #判断用户名是否不存在
print("该用户名不存在")
state = 2
if state == 1: #判断用户名的状态值 如果为1 证明 用户名正确 所以该判断下面的密码了
if dbUserPass == loginPass: #判断密码是否正确
print('欢迎',loginName)
break
else:
print("请输入正确的密码")
#作业:加上验证码 验证码的要求 随机数(不能每次都是一样的)
dbUserName = 'admin'
dbUserPass = '123456'
while True:
loginName = input('请输入用户名') #动态获取用户名
loginPass = input('请输入密码') #动态获取用户输入的密码
if loginName == dbUserName: #判断用户名是否和之前已经注册过的用户名相同(有人就是该用户是否存在)
if loginPass == dbUserPass:#如果用户名正确 判断密码是否正确
print("欢迎",loginName)
break #r如果密码正确跳出循环体
else:
print("请输入正确的密码")
else:
print("该用户不存在!请输入正确的用户名")
print("我是登录成功以后的内容")
9、 阶乘
# 通过用户输入数字计算阶乘
# 获取用户输入的数字
num = int(input("请输入一个数字: "))
factorial = 1
# 查看数字是负数,0 或 正数
if num < 0:
print("抱歉,负数没有阶乘")
elif num == 0:
print("0 的阶乘为 1")
else:
for i in range(1,num + 1):
factorial = factorial*i =1*1*2*3*4
print("%d 的阶乘为 %d" %(num,factorial))
10、使用系统命令 拿while循环
import os
while True:
cmd = input("cmd")
if cmd=="记事本":
os.system("notepad")
elif cmd=="进程":
os.system("tasklist")
elif cmd=="退出":
break
else:
os.system("echo other")
11、冒泡排序
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
def bubbleSort(arr):
n = len(arr)
# 遍历所有数组元素
for i in range(n):
# Last i elements are already in place
for j in range(0, n-i-1):
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
arr = [64, 34, 25, 12, 22, 11, 90]
bubbleSort(arr)
print ("排序后的数组:")
for i in range(len(arr)):
print ("%d" %arr[I]),
执行以上代码输出结果为:
排序后的数组:
11
12
22
25
34
64
90
12、判断闰年
闰年的判定方法:
①、普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年)
②、世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
year = int(input("输入一个年份: "))
if (year % 4) == 0:
if (year % 100) == 0:
if (year % 400) == 0:
print("{0} 是闰年".format(year)) # 整百年能被400整除的是闰年
else:
print("{0} 不是闰年".format(year))
else:
print("{0} 是闰年".format(year)) # 非整百年能被4整除的为闰年
else:
print("{0} 不是闰年".format(year))