Task02:条件循环结构
思维导图
代码
条件语句代码
1.含一个不带循环的猜数小游戏和成绩等级
#猜数游戏,不限次数
temp = input('猜数:')
guess = int(temp)
if guess > 8:
print('大了')
else:
if guess == 8:
print("right")
print("猜对了也没有奖励")
else:
print("小了")
print("game over")
#对于需要自行输入的,不要忘了一个分支叫输入错误
temp = input('请输入成绩:')
source = int(temp)
if 100 >= source >= 90:
print('A')
elif 90 > source > 80:
print('B')
elif 80 >= source >= 60:
print('C')
elif source < 60:
print('D')
else:
print('输入错误')
循环语句代码
1.猜数游戏和string的输出
#猜数游戏三局
count=0
while count<3:
temp=input('请输入数字')
guess=int(temp)
if guess>8:
print("大了")
else:
if guess==8:
print("猜对了")
count=3
else:
print("小了")
count=count+1
print("游戏结束")
string='abcd'
while string:
print(string)#print的内容不要随便加'',变量是不需要加''的
string=string[1:]
#以字符串为空结束
2.有序序列的输出(用for)
#列表的输出
member = ['张三', '李四', '王五', '赵六']
for i in member:
print(i, end='&')
member = ['张三', '李四', '王五', '赵六']
for i in range(len(member)):
print(member[i], end='&')
#循环输出字典的key和value
dic={'a':1,'b':2,'c':3}
for key,value in dic.items():
print(key,value,sep=':')
#仅输出dict的value
dic={'a':1,'b':2,'c':3,'d':4}
for value in dic.values():
print(value)
综合题目(1个):
可以用来引申为填写密码的代码~
只有3次输入密码的机会
passwdList = ['123', '345', '890']
valid = False
count = 3
while count > 0:
password = input('enter password:')
for item in passwdList:
if password == item:
valid = True
break
if not valid:
print('invalid input')
count -= 1
continue
else:
break
小知识点
enumerate()函数
1.用法
enumerate(sequence,[start=])
相当于为有序的序列标号
示例:将季节与数字对应起来~
seasons=['Spring','summer','fall','winter']
lst=list(enumerate(seasons,start=1))
print(lst)
2.与for连用
用法:for i,a in enumerate(A): do sth with a
不仅可以返回A的元素还可以返回该元素的索引值。
还可以确定索引的起始值。
languages=['python','R','Matlab','C++']
for language in languages:
print('l love ',language)
print('Done')
for i,language in enumerate(languages,3):
print(i,'l love',language)
print('Done!')
break语句
跳出当前所在层的循环:注意是循环,不是条件
import random #通过引用random库来生成随机数
secret=random.randint(1,10)
while True:
temp=input('猜一下小哥哥心中的数')
guess=int(temp)
if guess>secret:
print('大了')
else:
if guess==secret:
print('right')
break#是跳出循环,不是跳出条件语句
else:
print('小了')
print('游戏结束,不玩儿啦')
continue语句
for i in range(10):#range(10)是0到9
if i % 2 != 0:
print(i)
continue#终止本轮循环,进入下一轮循环
i+=2
print(i)
此处的i进行了追踪,终止循环的结果就是不print i+=2.并且i+=2,是不影响循环的i的大小的,只有一个print输出的作用。
推导式
推导式的表达非常简便,列表最常用。
#列表推导式
x=[-4,-2,0,2,4]
y=[a*2 for a in x]
print(y)
x=[i**2 for i in range(1,10)]
print(x)
x=[(i,i**2) for i in range(5)]
print(x)
x=[i for i in range(100) if (i%2)!=0 and (i %3)==0]
print(x)
a=[(i,j) for i in range(0,3) for j in range(0,3)]
print(a)
x=[[i,j] for i in range(0,3) for j in range(0,3)]
print(x)
x[0][0]=10
print(x)
a=[(i,j) for i in range(0,3) if i <1 for j in range(0,3) if j>1]
print(a)
#元组推导式要输出成tuple
a=(x for x in range(10))
print(a)
print(tuple(a))
#字典推导式
b={i:i%2==0 for i in range(10) if i%3==0}
print(b)
#集合表达式的推导
c={i for i in [1,2,3,3,2,1] }
print(c)
习题
1.写出1500到2700之间的7和5的公倍数
#方法1
for i in range(1500, 2700):
if i % 5 == 0 & i % 7 == 0:
print(i)
i=i+1
else:
i=i+1
#方法2
x=[i for i in range(1500,2700) if (i % 5) == 0 & (i % 7) == 0]
print(x)
2.龟兔赛跑,兔子的速度为v1,乌龟的速度为v2,一旦任意一秒结束,兔子发现自己领先t米或以上,就会停下来休息s秒,跑道总长为l。
输入:五个正整数:v1,v2,t,s,l
输出:T:乌龟获胜R:兔子获胜D:同时到达
v1, v2, t, s, l = map(int, input().split())
i = 0
S1 = 0
S2 = 0
j = 0
while S1 < l and S2 < l:
if S1 - S2 >= t:
S1 = v1 * i
S2 = v2 * (i + s)
i = i + s
j = j + 1
print(i, j, S1, S2)
else:
i = i + 1
S1 = v1 * (i - j * s)
S2 = v2 * i
print(i,j,S1,S2)
if S1 > S2:
print('R')
elif S1 < S2:
print('T')
else:
print('D')
注意事项:
1.同时在键盘敲入多个变量用map(int, input().split())
2.while S1 < l and S2 < l:不能写成while S1 < l & S2 < l:
3.如果写成
则第一个的if执行时第二个if的else也会执行。
4.本题用路程作为条件比时间作为条件合理。