目录
学习目标
今天的学习目标和学习内容很简单,学习的是条件语句和循环语句。
条件语句则有:
- if
- if - else
- if - elif - else
循环语句则分为了while循环和for循环: - while
- while - else
- for
- for - else
首先,我们先学习下条件语句的相关用法
条件语句
if 语句
if,英文就是如果,如果xxxx怎么怎么样,就去干啥啥啥。
if expression:
expr_true_suite
简单来说,只有当expression为真时,这条语句才会执行,否则便会跳过改代码块,执行后面的代码。
多重条件判断
可以用布尔操作符实现多重条件判断,and、or和and
if 2 > 1 and not 2 > 3:
print('Correct Judgement!')
If - else 语句
if expression:
expr_true_suite
else
expr_false_suite
可以直接通过解读便可以知道这个代码块的含义:如果expression为真,则执行expr_true_suite;否则执行expr_false_suite。举个例子
temp = input("猜一猜小姐姐想的是哪个数字?")
guess = int(temp) # input 函数将接收的任何数据类型都默认为 str。
if guess == 1:
print("你太了解小姐姐的心思了!")
print("哼,猜对也没有奖励!")
else:
print("猜错了,小姐姐现在心里想的是你(1)!")
print("游戏结束,不玩儿啦!")
如果你输入的是1就可以得到:
猜一猜小姐姐想的是哪个数字?1
你太了解小姐姐的心思了!
哼,猜对也没有奖励!
游戏结束,不玩儿啦!
如果不是1,则会是:
猜一猜小姐姐想的是哪个数字?520
猜错了,小姐姐现在心里想的是你(1)!
游戏结束,不玩儿啦!
另外,if语句可以嵌套if语句,但如果针对大型数据集来说,重复的嵌套会增加运行的时间。下面是一个简单的嵌套。
hi = 6
if hi > 2:
if hi > 7:
print('好棒!好棒!')
else:
print('切~')
这里需要注意的是,不要忘记缩进原则,else与哪一个if对应,就要与其有相同的缩进。下面的是一个例子。
temp = input("不不妨猜下小哥哥现在⼼心⾥里里想的是那个数字:")
guess = int(temp)
if guess > 8:
print("大了,⼤了")
else:
if guess == 8:
print("你这么懂小哥哥的⼼思吗?")
print("哼,猜对也没有奖励!")
else:
print("⼩了,⼩了")
print("游戏结束,不玩儿啦!")
if - elif - else 语句
简称elif语句,是用来判断多个表达式是否为真。
temp = input('请输⼊入成绩:')
source = int(temp)
if 100 >= source >= 90:
print('A')
elif 90 > source >= 80:
print('B')
elif 80 > source >= 60:
print('C')
elif 60 > source >= 0:
print('D')
else:
print('输⼊入错误!')
assert 关键词
为了检查我们的写的语句是否正确,我们可以在每个语句后面加一个assert,只有语句为真时,程序才能正常运行,否则程序会自动终止,并显示AssertionError
循环语句
while 语句
while循环的基本结构就是:
while 布尔表达式:
代码块
它会一直循环执行代码块,直到布尔表达式为假时才会停止。举个例子
count = 0
while count < 3:
temp = input("不妨猜⼀下⼩哥哥现在⼼里想的是那个数字:")
guess = int(temp)
if guess > 8:
print("⼤了,⼤了")
else:
if guess == 8:
print("你是小哥哥心⾥里的蛔虫吗?")
print("哼,猜对也没有奖励!")
count = 3
else:
print("小了,⼩了")
count = count + 1
print("游戏结束,不不玩⼉儿啦!")
执行之后可以得到下面的结果,填写的是8:
不妨猜下哥哥现在想的是那个数字:8
你是小哥哥心里的蛔虫吗?
哼,猜对也没有奖励!
游戏结束,不玩儿啦!
猜错3次之后会自动跳出循环:
不妨猜下哥哥现在想的是那个数字:1
小了小了
不妨猜下哥哥现在想的是那个数字:2
小了小了
不妨猜下哥哥现在想的是那个数字:3
小了小了
游戏结束,不玩儿啦!
while - else 语句
while 布尔表达式:
代码块
else:
代码块
当while语句执行完后便会去执行else语句中的代码块,但如果while中含有break关键词(终止),则不会继续执行else而是直接跳出循环。
for 循环
for循环是迭代循环,可以遍历任何有序序列和迭代对象。比如str、list、tuple、dict等。
for 迭代变量 in 可迭代对象:
代码块
每次循环,迭代变量被设置为可迭代对象的当前元素,举个例子
member = ['张三', '李四', '刘德华', '刘六', '周润发']
for each in member:
print(each)
# 结果
# 张三
# 李四
# ...
for i in range(len(member)):
print(member[i])
# 结果同上
for - else 循环
原理与while - else语句相同,执行完for中的代码块后,才会执行else中的代码块。
range()函数
range函数
range([start,] stop[, step=1])
举个例子就明白了
for i in range(2, 9): # 不不包含9
print(i)
结果为:
range()函数是一个左开右闭的函数,即从2开始一直输出到9(但不包括9)
for i in range(1, 10, 2): # 不不包含9
print(i)
# 得到的结果将会是
# 1 3 5 7 9
表示的是从1开始每过2位输出一次,直到10
enumerate()函数
enumerate(sequence, [start = 0])
sequence指的是一个序列、迭代器或者其他的迭代对象。而start表示下标起始位置。
举两例子。
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
lst = list(enumerate(seasons))
print(lst)
# [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
lst = list(enumerate(seasons, start=1)) # 下标从 1 开始
print(lst)
# [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
languages = ['Python', 'R', 'Matlab', 'C++'] for language in languages:
print('I love', language)
print('Done!')
'''
I love Python
I love R
I love Matlab
I love C++
Done!
'''
for i, language in enumerate(languages, 2):
print(i, 'I love', language)
print('Done!')
'''
2 I love Python
3 I love R
4 I love Matlab
5 I love C++
Done!
'''
从第二个例子可以看出,用enumerate不仅可以返回函数中的元素,还可以顺便给该元素一个索引值(默认值从0开始)。此外,用enumerate(A,j)还能确定索引起始值为j
break & continue & pass 语句
break语句就是用来跳出当前所在层的循环。
continue语句就是用来终止本轮循环并开始下一轮循环
pass语句表示的是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会报错,这时候就可以添加pass来解决。
推导式
推导式分为了列表推导式和元组推导式。
列表推导式
[ expr for value in collection [if condition] ]
举个例子
x = [-4, -2, 0, 2, 4]
y = [a * 2 for a in x]
print(y)
# [-8, -4, 0, 4, 8]
x = [i ** 2 for i in range(1, 10)]
print(x)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]
x = [[i, j] for i in range(0, 3) for j in range(0, 3)]
print(x)
# [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
元组推导式
( expr for value in collection [if condition] )
example:
a = (x for x in range(10))
print(a)
# <generator object <genexpr> at 0x0000025BE511CC48>
print(tuple(a))
# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
字典推导式
{ key_expr: value_expr for value in collection [if condition] }
example:
b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0} print(b)
# {0: True, 3: False, 6: True, 9: False}
集合推导式
{ expr for value in collection [if condition] }
Example
c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]} print(c)
# {1, 2, 3, 4, 5, 6}
Q & A
- 编写一个python程序来查找那些可以被7除以5的整数数字,介于1500-2700之间
t = 1500
for i in range(1500, 2700):
if i % 7 == 0 and i % 5 ==0:
print(i)
t +=1
- 龟兔赛跑预测
v1,v2,t,s,l = map(int,input().split())
if v1<=100 and v2<=100 and t<=300 and s<=10 and l<=10000 and l%v1==0 and l%v2==0:
s1,s2,i = 0,0,0
while s1<l and s2<l:
s1,s2,i=v1+s1,v2+s2,i+1
if s1==l or s2==l:
break
elif s1-s2>=t:
s2,i=s2+v2*s,i+s
if s1>s2:
print('R')
print(i)
if s1==s2:
print('D')
print(i)
if s1<s2:
print('T')
print(int(l/v2))
参考
[1] Datawhale. 《python编程语言_v4》
[2] 基础练习23- 龟兔赛跑预测(python答案)