一、循环结构
- 应用场景:如果在程序中我们需要重复的执行某条或某些指令,例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向奔跑的指令。当然你可能已经注意到了,刚才的描述中其实不仅仅有需要重复的动作,还有我们上一个章节讲到的分支结构。再次,我们需要了解一下循环结构,有了循环结构我们就可以轻松的控制某件事或者某些事重复、重复、再重复的发生。在Python中构造循环结构有两种做法,一种是’for-in’循环,一种是’while’循环。
- for-in循环:如果明确的知道循环执行的次数或者是要对一个容器进行迭代,那么我们推荐使用’for-in’循环。
例:用for循环实现1~100之间的偶数求和:
sum = 0
for x in range(2,101,2):
sum += x
print(sum)
例:输入乘法口诀表(九九表)
for i in range(1,10):
for j in range(1,10):
if i >= j:
print('%d * %d = %d' %(i,j,i*j),end = ' ')
else:
print('')
break
需要说明的是上面代码中的’range’类型,‘range’可以用来产生一个不变的数值序列,而这个序列通常都是用来循环的,如:‘range(101)’可以产生0到100的整数序列;‘range(1,100)’可以产生一个1到99的整数序列;‘range(1,100,2)’可以产生1到99的奇数序列,其中的2是步长,即数值序列的增量。
3. while循环:如果要构造不知道具体循环次数的循环结构,我们推荐使用‘while’循环,‘while’循环通过一个能够产生或转换出‘bool’值的表达式来控制循环,表达式的值为‘True’循环继续,表达式的值为‘False’循环结束。
例:猜数字游戏
计算机出一个1~100之间的随机数由人来猜
计算机根据人猜的数字分别给出提示大一点/小一点/猜对了
import random
an = random.randint(1, 100)
count = 0
while True:
count += 1
num = int(input('请输入: '))
if num < an:
print('请大一点')
elif num > an:
print('请小一点')
else:
print('恭喜你猜对了!')
break
print('你总共猜了%d次' % counter)
if count > 7:
print('你的IQ有点低')
说明:上面的代码中使用了‘break’关键字来提前终止循环,需要注意的是‘break’只能终止它所在的那个循环,这一点在使用嵌套的循环结构(下面会讲到)需要引起注意。除了‘break’之外,还有另一个关键字是‘continue’,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。和分支结构一样,循环结构也是可以嵌套的,也就是说在循环中还可以构造循环结构。
二、函数使用
1.函数的作用:不知道大家是否注意到,在上面的代码中,我们做了3次求阶乘,这样的代码实际上就是重复代码。编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”,要写出高质量的代码首先要解决的就是重复代码的问题。对于上面的代码来说,我们可以将计算阶乘的功能封装到一个称之为“函数”的功能模块中,在需要计算阶乘的地方,我们只需要“调用”这个“函数”就可以了。
2. 定义函数:在Python中可以使用‘def’关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数,这一点和数学上的函数非常相似,程序中函数的参数就相当于是数学上说的函数的自变量,而函数执行完成后我们可以通过‘return’关键字来返回一个值,这相当于数学上说的函数的因变量。
例:查询添加用户:
def add(name):
Names = ['aa','bb','cc']
if name in Names:
chaxun()
else:
print('该用户不存在')
def chaxun():
print('等待同意')
r = input('是否留言[y/n]')
if r == 'y':
input('请输入留言:')
def Start():
name = input('请输入用户名字:')
add(name)
Start()
作业
#1题
def add(a,b,c):
pan_bie = (b*b-4*a*c)**(1//2)
if a != 0 and pan_bie > 0:
r1 = (-b+pan_bie)//(2*a)
r2 = (-b-pan_bie)//(2*a)
print('根是:',r1, r2)
elif a != 0 and pan_bie == 0:
r = (-b)//(2*a)
print('根是',r)
else:
print('The equation has no real roots')
def Start():
a = int(input('请输入数字:'))
b = int(input('请输入数字:'))
c = int(input('请输入数字:'))
add(a,b,c)
Start()
#2题
import random
a = random.randint(0,100)
b = random.randint(0,100)
print(a,b)
def he(sum):
if sum == a + b:
print('程序报告结果为真')
else:
print('程序报告结果为假')
def Start():
sum = int(input('请输入俩个整数的和:'))
he(sum)
Start()
#3题
def xing_qi(day):
day = day % 7
if day == 0 :
print('今天是星期日')
elif day == 1 :
print('今天是星期一')
elif day == 2 :
print('今天是星期二')
elif day == 3 :
print('今天是星期三')
elif day == 4 :
print('今天是星期四')
elif day == 5 :
print('今天是星期五')
elif day == 6 :
print('今天是星期六')
def Start():
day = int(input('请输入今天的数字:'))
xing_qi(day)
Start()
"""
#4题
def pai_xu(a,b,c):
d = [a,b,c]
d.sort()
print(d)
def Start():
a = int(input('请输入数字:'))
b = int(input('请输入数字:'))
c = int(input('请输入数字:'))
pai_xu(a,b,c)
Start()
#5题
def good(weight_1,money_1,weight_2,money_2):
value_1 = money_1 // weight_1
value_2 = money_2 // weight_2
if value_1 < value_2:
print('第一种大米实惠')
elif value_1 > value_2:
print('第二种大米实惠')
else:
print('俩种大米一样')
def Start():
weight_1 = float(input('请输入第一种大米的重量:'))
money_1 = float(input('请输入第一种大米的价钱:'))
weight_2 = float(input('请输入第二种大米的重量:'))
money_2 = float(input('请输入第二种大米的价钱'))
good(weight_1,money_1,weight_2,money_2)
Start()
#6题
def tian_shu(year,month):
if year > 0 and 0 < month <=12:
if month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:
print('%d年%d月有31天'%(year,month))
elif (year%4 == 0) and month == 2:
print('%d年%d月有29天'%(year,month))
elif (year%4 != 0) and month == 2:
print('%d年%d月有28天'%(year,month))
elif month == 4 or month == 6 or month == 9 or month == 11:
print('%d年%d月有30天'%(year,month))
else:
print('输入有误')
def Start():
year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
tian_shu(year,month)
Start()
#7题
import random
a = random.randint(0,1)
print(a)
def zheng_fan(b):
if b == a:
print('您猜对了')
else:
print('您猜错了')
def Start():
b = int(input('请输入您的猜测(0是正面;1是反面):'))
zheng_fan(b)
Start()
#8题
import random
a =random.randint(0,2)
print(a)
def ren(b):
if (b == 0 and a == 2) or (b == 1 and a == 0) or (b == 2 and a == 1):
print('恭喜你赢了')
elif b == a:
print('平局,再接再厉')
else:
print('计算机赢了')
def Start():
b = int(input('请输入一个数字(0:剪刀;1:石头;2:布):'))
ren(b)
Start()
#9题
def xing_qi(q,m,j,k):
h = (q+(26*(m+1)//10)+k+(k//4)+(j//4)+5*j)%7
print('它是一周的星期%d'%(h))
def Start():
q = int(input('这是一个月的哪一天:'))
m = int(input('月份:'))
j = int(input('世纪数:'))
k = int(input('一个世纪的某一年:'))
xing_qi(q,m,j,k)
Start()
#10题
import random
da_xiao = random.choice(['Ace','2','3','4','5','6','7','8','9','10','Jack','Queen','King'])
hua_se = random.choice(['梅花','红桃','方块','黑桃'])
def chou(a):
print('你选择的牌是',da_xiao,hua_se)
def Start():
a = input('是否抽取:[y/n]')
chou(a)
Start()
#11题
def shu_zi(hui_shu):
if hui_shu // 100 == hui_shu % 10:
print('%d是回文数'%(hui_shu))
else:
print('%d不是回文数'%(hui_shu))
def Start():
hui_shu = int(input('请输入三位数字:'))
shu_zi(hui_shu)
Start()
#12题
def chang(a,b,c):
if (a + b >c) and (a + c > b) and (b + c > a):
zhou_chang = a + b + c
print('周长是:%d'%(zhou_chang))
else:
print('输入是非法的')
def Start():
a = int(input('请输入数字:'))
b = int(input('请输入数字:'))
c = int(input('请输入数字:'))
chang(a,b,c)
Start()