开发者学堂课程【Python 开发基础入门:Python 入门必备-逻辑判断综合案例讲解】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/556/detail/7654?
Python 入门必备-逻辑判断综合案例讲解
目录:
一、练习
二、范例
一、练习
1. 打印一个边长为n的正方形口求100内所有奇数的和
2. 求一百以内所有奇数和
3.判断学生成绩,成绩等级A~E。其中,90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'
4.求1到5阶乘之和
5.给一个数,判断它是否是素数(质数)
6.质数:一个大于1的自然数只能被1和它本身整除
二、范例
1.打印一个边长为n的正方形,要求要一个空心正方形。
让行距拉起来以后变成一个矩型,用大部分增加正方一点。第一行打印,一排过去,第二行空格,然后重复了好几下之后,最后又打印一行,跟第一行一样,发现中间有重复,那个就是迭代,就是for循环。还发现第一行和最后一行不一样,就是解决问题办法,来解决问题的办法关键迭代和for循环。
打印一个边长为n的正方形,中间有重复,就是叠代。
1)
n
=int(input('正方形边数'))
#4 这里假设n等于4
print('*'*n)
#****
for i in range(n-2):
print('
*
',
‘
'*(n-2),'*')
p
rint('*'*n
)#****
假设是个四边形,用最简单来带,先打印然后最后打印,中间n-2然后做迭代然后去凑。找到规律并用到循环。
2)
#打印一个边长为n的正方形
n=int (input ("Input the square"s length>>>""))
sepTop = "*"
sepMid = "* "
for i in range (0,n):
sepTop t- "\t* "
sepMid += "\t"中间加/t凑个星。
else:
sepMid +=“*"
print (sepTop)
print (sepMid)
#for i in range(o,n-1):
#print (sepaMid)
else:
#print("\n")
#print(sepTop)
for i in range(0,n-1):
print ("\n")
print (sepMid)
else :
print ( "\n")首行凑齐就可以打印
print ( septop)
运行结果:
Input the square
’
s length>>>5
最后凑一个所谓top,在里面设计了中间的和顶上的,用上了for else,这些东西在循环中不停迭代,再把它凑出来没有用再用break,上面只有能够迭代就行,这个数假设给了个3,这里都正常执行,再用else语句没在打印。
3)
print (sepTop)
a=int(input('>>>" ))
i=0
while i<-(a-1) :
if i==o or i==( a-1): 这个就是迭代条件
print ('*’*a)
else:
print ( '*‘+’ ‘* (a-2)+'* ')
i+=1
这里可以更间简单和美观用for循环,有更好的写法,当知道能循环多少次的时候用for循环。
4)
number=int (input ( "Please input a number : ")
)
print
(
“
*
”
*
number)
for i in range (number-2
)
:
#3
for j
in range ( number) :
#如果碰到0=number5,j是0-4,number还是5,如果j=0或者等于5的时候,j的取值范围是,range的取值范围是0-4
If j==0 or j==(number):这个条件没有起作用
print ( '*'+’
‘* (number-2)+’*')
else:
print ( ‘
*
’*number)
代码执行结果:
Please input a number:5
1、这两种嵌套,复杂程度过高。
2、这个程序虽然能实现,但两层嵌套的效率可能会低一点,当引入嵌套程度更多的时候,他的效率不一定会高。
3、所以j不能等于5,没有用到,j=0的时候才打印,j=1234就循环走了。有许多无用代码要把它去掉。
5)
X=
int( input( "number")
)
print(
x
*”
*
”)
for i in range(x-2
)
:
Printf
(
"
*
"十
(
x-2
)
*"
"+”
*
"
)
print (x
*
”
*
”
)
2.for i in range ( o,n) :
sepTop += "\t* "
sepMid += "\t "
else:
sepMid +="*"
print (sepTop)
for i in range (o,n-1) :
print ( "\n")
print (sepMid)
else:
print ( "\n")
print (sepTop)
2.这个题可以变成一种对称,当然也有非对称的地方,对称的地方可以变化:
范例答案:
1)
n = 5
print(
‘
*'*n)
for i in range(n-2):
print(
‘
*'+'*(n-2)+'*')
print(
‘
*'*n)
2)
Range函数的新方式
边为3,则-1 0 1 => range(-1,2)
边为4,则-2-10 1 => range(-2,2)range函数就是-2 - 2
边为5,则-2 -1 0 1 2 => range(-2,3)通过这样的推特过程把range函数推出来
n=5
e = -n//2
for i in range(e,n+e):(这里-1-1没办法)
if i == e or i == n+e-1:这里是底
print(’*’*n)
else:
print('*'+
‘
'*(n-2)+'*')
最有价值的不在效率,而在它的思维过程。
左边已经写的够高效的,range函数还有其他玩法。写程序,不要局限于现有的方法。
要打破原来的方法,现在手段很多,但是以后发现原来这个手段发现这个场景下这种手段最好用,那就把左边已经是很精简了。搞这么复杂说明有些场景下,用对称性来解决问题的时候,会发现写的会比较漂亮。但是因为一些特殊性,当然可以在这上面再做一些改动。
2.求一百以内所有奇数和(2500 (累加)
sum = 0
for a in range ( 1,100,2) :
sum+= a
print (sum)
1)
J=0
for i in range (0,100):
if i%2!=0 :
j+=1
print ("sum = ",J)
运行结果:
Sum=2500
奇偶的时候因为每一次在这儿要算一次。但是这是一种实现,这没有问题就没有问题,所以这块就是跳过一些无用功。
2)
b = o
for i in range ( 1,100,2):
b += i
print (b
)
能跳过就跳过
3)
sum=0
for i in range (1,100,2):
sum +=i
print(sum)
变量用sum的好,请注意之后对格式有要求,比如两边留空格
代码风格看出写没写过代码
4)
#打印100以内奇数之和
sum
=0
for
a
in range (i,100, 2):
sum+
=a
print(sum)
如果已经跳过去,就不用算了
score = int(input('input a score: " ) )
if score >=70:
if score <=79:
print( ‘C')
elif score <= 89:
print ('B')
else :
print ( 'A')
else :
if score >=60:
print ( 'D')
else :
print ( 'E')
3. 判断学生成绩,成绩等级A~E。其中,90分以上为'A',80~89分为'B',70~79分为C',60~69分为'D',60分以下为E'
这个问题,其实就是做一下判断,90 80 70 60分如果说要不要迭代,发现好像这个方式也不合适,因为每次打印东西不太一样,也就说每一个区间它的规律的似乎有,但是又没什么太多规律。
abcde上看是有规律,90,80,70,60也有规律。规律其实存在的,可以写出一个迭代版本,就在循环里面它是有规律的,只是做太不划算了。
1)
a=int (input("请输入学生成绩:"))
if a>=80:
If a>90:
print(
‘
A
’
)
else :
print ( 'B
’
)
elif a>=60:
if a>70:
print ( 'C
’
)
else:
print ('D
’
)
else:
print ( 'E')
对于大的空间搜索的问题,要考虑要不要折半。
直接看到是不是大于90,有的时候要考虑一下,这里本来就是有限个判断。就说现在有的时候,不要过多的去想。
但是对于一个大的空间中去搜索的问题,这个时候发现是不是在很大一个区间内来回变化?
这个时候就不确定他应该是在哪儿,建议用折半的思想来说搜索效率更高,这个边界由自己来定义。
要判断这个数是几位数,会发现在很大区间来回变换,用折半思想会发现搜索效率更高。
2)
score = int(input ( 'input a score: "))
if score >=70:
ifscore <-=79:
print ('C')
elif score <= 89:
print('B')
else:
print ( 'A')
else:
if score >= 60:
print ('D')
else :
print ( 'E')
不管是正的,逆的都可以的,也用是折半,这种小空间用不用都行。
3)
Num
=
int
(
input(
“
Please num : "
))
while
0
<
=
num <
=
100:
if num < 60:
print ("
E
")
break
elif num< 70:
print ("D")
break
elif num < 80:
print ("C")
elif num < 9
0
:
print (""B")
break
else:
print ("A")
Break
因为有 if 有 else 总有一个分支是可以循环的,一进去就 break 了。他用的这个where 条件,因为条件是肯定式,这进去以后如果小于60就是e,小于70,小于八十,如果严格90及90以上等于a,就要加等号了。
对于刚才,给一个数,判断它是否是素数(质数)
质数:一个大于1的自然数只能被1和它本身整除这里
牵扯到算法的问题,但是要把质数算出来。