导言
for、range、if和while的用法常在编程题里考到,它们间可以通过灵活搭配实现很多功能。
需要用for语句循环的内容,要在前面加上四个空格的缩进。类似地,被if和while影响的语句,也需要加上四个空格的缩进。类似地,如果for里有if(嵌套),那么被if影响的语句前边,要在四个空格的基础上再加四个空格,以此类推(这可以推广到for、if和while的任意嵌套)。
浅浅举个例子吧:
x=0
for i in [1,3,2,2,5,2,0]:
if i==2:
print("第"+str(x+1)+"个数字是2")
x=x+1
输出:
第3个数字是2
第4个数字是2
第6个数字是2
for和range
for
for的语法
for 变量(变量的名称不一定是i,可以随便取) in 数组:
需要循环的内容
需要循环的内容...
不需要循环的内容...
for 语句可以循环“需要循环的内容”,并变量的值挨个改变,传递下去。
举例
for i in [1,3,2,2]:
print(i) #体会变量i的“挨个改变”
输出
1
3
2
2
range
range的语法
range(起始值,终止值,步长(可省略))
注意:
1 起始值,终止值,步长参数全都是整数,正负都无所谓。起始值和终止值都可以取0,但是步长不可以为0!!参数之间用","隔开,步长参数可以不加。如果不加步长参数,那么步长默认为1。起始值不一定要小于终止值,因为步长可以为负,即“从大到小”。
2 这里说的终止值是取不到的!!!如果把range(起始值,终止值)
理解为集合,那么它是这样一个集合:[起始值,终止值) (这里没有加步长参数,所以用“区间”表示了,然而它可以是从大到小的),而且这个集合里的元素全都是整数,没有小数。
3 range实质上是一个数组,因此可以用于for语句中。我们也可以把range()理解为等差数列。步长参数就是数列中的d,即相邻两项的差值。
举例1
for i in range(-2,3):
print(i)
输出
-2
-1
0
1
2
这印证了我之前说的:步长参数没加,所以每一项都较前一项大了1。终止值3取不到,实际终止在了在了2。
举例2
for i in range(5,10,3):
print(i)
输出
5
8
我们发现,这里没有取到9,因为步长的跨度太大了。8+3=11,超过了9。超过了就取不到。
举例3
for i in range(22,13,-1):
print(i)
输出
22
21
20
19
18
17
16
15
14
这里步长是-1,所以相当于一个从大到小的等差数列。终止值13也是取不到的,最小最小是14。
举例4
for i in range(22,13,-4):
print(i)
输出
22
18
14
同理~~~
if
语法
if (not) 条件1 [(and/or) (not)条件2] ... :
仅当 if 那行条件成立时才执行的语句
仅当 if 那行条件成立时才执行的语句...
elif (not) 条件3 [(and/or) (not)条件4] ... :
仅当 if 那行条件不成立且 elif 那行条件成立时才执行的语句
仅当 if 那行条件不成立且 elif 那行条件成立时才执行的语句...
else:
仅当 if 和 elif 条件都不成立才执行的语句
仅当 if 和 elif 条件都不成立才执行的语句...
不论条件是否成立都执行的语句...
if 语句可以根据某些条件成立与否来控制一些命令是否需要执行。需要注意的是,判断某变量是否等于某值,要用“==”,而不是“=”。
elif 和 else 是“进阶用法”。最基本的 if 结构是这样的:
if (not) 条件1 [(and/or) (not)条件2] ... :
条件成立时才执行的语句
条件成立时才执行的语句...
不论条件是否成立都执行的语句...
大多数情况下会加上else,用到elif的情况比较少。
常见条件的语法
if a==1:
print("a等于1")
if a!=1:
print("a不等于1")
if a<=1:
print("a小于等于1")
if a>1:
print("a大于1")
if a<=1 and b==3:
print("a小于等于1 而且 b等于3")
if a<=1 or b==3:
print("a小于等于1 或 b等于3,至少有一个成立")
if a<=1 and b==3 or c>4:
print("(a小于等于1 而且 b等于3 ) 或者 (c大于4) 其中至少有一个成立")
if a<=1 and b==3 or not c>4:
print("(a小于等于1 而且 b等于3 ) 或者 (c大于4的对立面,即c小于等于4) 其中至少有一个成立")
如果实际情况满足print中的条件,那么就会得到对应的输出。
当not,and和or在一起运算时,优先级是 not > and > or 。
举例
a=-4
b=10
c=2
if a<=1 and b==3 or not c>4:
print("(a小于等于1 而且 b等于3 ) 或者 (c大于4的对立面,即c小于等于4) 其中至少有一个成立")
输出
(a小于等于1 而且 b等于3 ) 或者 (c大于4的对立面,即c小于等于4) 其中至少有一个成立
举例1
num=1321
if num==1322:
print("cyx")
else:
print("not cyx")
输出
not cyx
举例2
num=12
if num%3==0:
print("数字 "+str(num)+" 可以被 3 整除")
elif num%4==0:
print("数字 "+str(num)+" 可以被 4 整除")
else:
print("数字 "+str(num)+" 既不可以被 3 整除,也不可以被 4 整除")
输出
数字 12 可以被 3 整除
很明显,看起来程序并没有符合编写者的愿望,因为 elif 下边的语句仅当 if 那行条件不成立且 elif 那行条件成立时才执行。当一个数字既可以被 3 整除,也可以被 4 整除时,只会输出它可以被 3 整除。
举例3
x=16
if x%3==0:
print("数字 "+str(x)+" 可以被 3 整除")
elif x%4==0:
print("数字 "+str(x)+" 可以被 4 整除")
else:
print("数字 "+str(x)+" 既不可以被 3 整除,也不可以被 4 整除")
输出
数字 12 可以被 4 整除
程序并不完美,但是结果是正确的。
举例4
a=7
if a%3==0:
print("数字 "+str(a)+" 可以被 3 整除")
elif a%4==0:
print("数字 "+str(a)+" 可以被 4 整除")
else:
print("数字 "+str(a)+" 既不可以被 3 整除,也不可以被 4 整除")
输出
数字 7 既不可以被 3 整除,也不可以被 4 整除
程序并不完美,但是结果是正确的。
举例5
a=12
if a%3==0:
print("数字 "+str(a)+" 可以被 3 整除")
if a%4==0:
print("数字 "+str(a)+" 可以被 4 整除")
if a%3!=0 and a%4!=0:
print("数字 "+str(a)+" 既不可以被 3 整除,也不可以被 4 整除")
输出
数字 12 可以被 3 整除
数字 12 可以被 4 整除
完美的程序,这下 a 取任何值都可以完美判断了。
while
while 和 for 都可以用来循环语句,但是它们循环的“条件”不同。
for 循环的次数是“固定”的,因为在循环中,那个变量会依次取到你给定的数组里的数(特殊情况不讨论啦)。变量从数组中的“第零个”取到“最后一个”。取到最后一个后呢,就不会再进行下一次循环了,即当次循环结束后,for 循环结束。
while 循环是根据某一个条件是否成立而判断是否要继续循环的。当你给定的条件成立,那么 while 循环继续,当你给定的条件不成立了,就不会进行下一次循环。
我先讲 if 语句也是有原因的……
语法
while (not) 条件1 [(and/or) (not)条件2] ... :
需要循环的语句
需要循环的语句...
不需要循环的语句...
我们需要注意的是,当一个命题成立,那么这个命题为“True”,而我们常用 0 和 1 来代表 False 和 True(if 语句同理,如: if 1:
永远判定为正确)。所以,如果这么写:
while 1:
需要循环的语句...
或者:
while True:
需要循环的语句...
又或者:
a=1 #或 a=True
while a:
需要循环的语句... #之后未修改 a 的值
将会得到一个无限循环。只有得到“break”命令时,才会终止。注意:True
和 False
必须有且仅有首字母大写。
举例1
a=True
while a:
print("1322")
输出
1322
1322
1322
1322
1322
1322
1322
1322
1322
...
举例2
a=0
b=0
while a<5:
print(a)
a=a+1
b=b+1
print("\n"+str(a)) #换行输出 a
print(b)
输出
0
1
2
3
4
5
5
我们发现,while 循环结束以后,a 和 b 的值都是 5。也就是说当 a=5 时,while 循环并没有立即退出,它完整地执行完毕了当前循环,即继续执行了 b=b+1
。当该次循环结束后,再进行条件的判断,发现 a=5 不满足 a<5,则循环结束,继续执行接下来的不需要循环的语句...
评论已关闭