导言

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”命令时,才会终止。注意:TrueFalse 必须有且仅有首字母大写。

举例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,则循环结束,继续执行接下来的不需要循环的语句...

评论已关闭