Python 条件分支(if语言,for语句,while语句)
if语句
if condition:
代码块
condition必须是一个bool类型,这个地方有一个隐式转换bool(condition)
if 1<2:
print('1 less than 2')
代码块也就是类似于if语句的冒号后面的就是一个语句块,在if,for,def,Class等的后面。
多条件分支:
if……elif……else语句。
a = 5 if a<0: print('negative') elif a==0: print('zero') else: print('positive') 结果为: positive
#分支嵌套
score = 80 if score<0: print('wrong') else: if score==0: print('egg') elif score <= 100: print('right') else: print('too big')
结果为:
right
#练习,给定一个不超过5位数的正整数,判断其有几位。,这个题还可以运用整除的方法。a//10000等于0说明是4位数,除1000等于0说明是4位数。
但是没有下面的这个比较好,因为这个有计算。
val = input('>>>') val = int(val) if val >= 1000: #fold,折半 if val>=10000: print(5) else: print(4) else: if val>=100: print(3) elif val >= 10: print(2) else: print(1)
val = int(input("请输入一个不超过5位数的数字:"))
if val >10000:
print("你输入的数字是5位数")
elif val>1000:
print("你输入的数字是4位数")
elif val>100:
print("你输入的数字是3位数")
elif val >10:
print("你输入的数字是2位数")
else:
print("你输入的数字是1位数")
练习1:输入2个数字,输出最大值。
print('请输入两个数字》') a = int(input("一个数字:"))#input获得的是一个字符串,需要转换 b = int(input("另一个数字:")) if a > b: print("a大") elif a ==b: print(a==b) else: print("b大")
上面的折半多此一举了。
while 循环
while condition:
block
当条件满足即condition为True,进入循环体,执行block 。要注意不要进入死循环。
如果变成-10了,就变成死循环了。要改循环的时候加等就可以了。
flag=10 while flag: print(flag) flag -= 1 结果为10到1
count = 1 while count <= 10: print( count) count = count + 1 if count == 5: break # 彻底停止循环. 不会执行后面的else else: # while条件不成立的时候执行 print("这里是else") 结果为: 1 2 3 4
应该注意, 负数也是真。while -1 。
for循环
or element in iteratable:
block
当可迭代对象中有元素可以迭代,进入循环体,执行block 。
for i in range(10): print(i+1) 结果为: 1-10
如果要倒序打印:
for i in range(10,0,-1):
print(i)
range函数作业极大,range(stop),这是从0开始的。左包右不包。range函数返回的是一个range对象,它是一个可迭代对象。
range(start,stop,step),step是步长。
循环 continue语句
中断当前循环的当次执行,继续下一次循环
for i in range(0,10): if i & 1:#这是与 continue print(i) 结果为: 0,2,4,6,8
for i in range(10):
if not i%2:
print(i)
结果为:
0
2
4
6
8
for i in range(0,10,2):
print(i)
循环 break语句
终止当前循环
#举例:计算1000一类的被7整除的前20个数(for循环)
count = 0 for i in range(0,1000,7): print(i) count += 1 if count >= 20: break
j = 0
for i in range(1,1001):
if i%7==0 and j<20:
print(i)
j+=1
结果为: 0 7 14 21 28 35 42 49 56 63 70 77 84 91 98 105 112 119 126 133
continue和break是循环的控制语句,只影响当前循环,包括while、for循环 ,如果循环嵌套, continue和break也只影响语句所在的那一层循环 ,continue和break 不是跳出语句块,所以 if cond: break 不是跳出if,而是终止if外的break所在的循环。
三目运算表达式(里面的语句块只有一句,多于一句就不行了。)
给定一个不超过5位的正整数,判断该数的位数,依次打印出个位、十位、百位、千位、万位的数字
num = int(input("请输入一个不大于5位数的数字:")) if num>10000: a=5 print("你输入的是{}位数".format(a)) elif num > 1000: a=4 print("你输入的是{}位数".format(a)) elif num>100: a=3 print("你输入的是{}位数".format(a)) elif num>10: a=2 print("你输入的是{}位数".format(a)) else: a=1 print("你输入的是{}位数".format(a)) c = num for i in range(a): n = c // 10 print(c - n*10) c=n
给定一个不超过5位的正整数,判断该数的位数,依次从万位打印到个位的数字
num = int(input("请输入一个不大于5位数的数字:")) if num>10000: a=5 print("你输入的是{}位数".format(a)) elif num > 1000: a=4 print("你输入的是{}位数".format(a)) elif num>100: a=3 print("你输入的是{}位数".format(a)) elif num>10: a=2 print("你输入的是{}位数".format(a)) else: a=1 print("你输入的是{}位数".format(a)) pre = 0 for i in range(a,0,-1): cur = num//(10**(i-1)) print(cur - pre*10) pre = cur
循环 else子句
while condition:
block
else:
block
for element in iteratable:
block
else:
block
如果循环正常的执行结束,就执行else子句;如果使用break终止,else子句不会执行。
练习1:打印一个边长为N的正方形
上面这个用到了对称。
练习2:求100内所有奇数的和(2500)
sum = 0 for i in range(1,2501,2): sum+=i print(sum)
练习3:判断学生成绩,成绩等级A-E。其中90分以上为A,80-89为B,70-79为C,60-69为D,60分以下为E
score = int(input("请输入学生的成绩:")) if score>=90: print("成绩为A") elif score>=80: print("成绩为B") elif score>=70: print("成绩为C") elif score>=60: print("成绩为D") else: print("成绩为E")
练习4:求1到5阶乘之和。
x = 0
sum = 1 for i in range(1,6): sum*=i
x+=sum print(sum)
练习5:给定一个数,判断它是否为素数(质数),质数是一个大于1的自然数只能被1和它本身整除。
#最简单的思路,按照定义来,假设有一个数(n>1),从2开始判断,一直判断到N-1.
value = int(input("请输入一个数》》")) if value>1: for i in range(2,value): if value%i==0: print("不是质数") break else: print("是质数") else: print("不是质数")
作业1:打印99乘法表
上面这是最原始的逻辑。最重要的是找到边界。
print函数默认分隔符是空格,以换行结尾。
这个是对齐了的。
大于,小于是右打印,还是左打印。20是20空格。
for i in range(1,10): s = "" for j in range(i,10): s+="{}*{}={:<{}}".format(i,j,i*j,2 if j<4 else 3) print("{:>66}".format(s))
作业2:打印下面的菱形
作业3:打印100内的斐波拉契数列
作业4:求斐波拉契数列第101项
作业5:求10万内的所有素数