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
whileflag: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 =0for 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
结果为: 07 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=numfor i inrange(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=0for 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 =0for i in range(1,2501,2):
sum+=iprint(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*=ix+=sumprint(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+="{}*{}={:66}".format(s))
作业2:打印下面的菱形
作业3:打印100内的斐波拉契数列
作业4:求斐波拉契数列第101项
作业5:求10万内的所有素数