【Python错题】考前突击·控制与结构

#如果您不幸读到这篇文章,那欢迎指正
救救期末火葬场的孩子TAT
第四章 控制与结构
结构:顺序,选择,循环

目录

  • 1.选择结构if
    • 2.循环结构
      • 阶乘类
      • 三角形
        • 图案类*
        • 字母类
        • 右九九乘法表
      • 数学问题
        • 素数
        • 完数
        • 因数分解

1.选择结构if

选择结构不能循环使用……
基本结构:
if 条件:单条语句
if 条件:
^^^^^^语句块
if 条件:
^^^^^^语句块
else:
^^^^^^语句块

以下是示例程序
程序清单4.1 条件赋值

#程序清单4.1 条件赋值
a=eval(input('请输入一个数:'))
x=3*a-1 if a<=5 else 38-a #第一段在if前
print('x=',x)             #if else 中都没有冒号
			  #这样做的话【if和else必成行】

#程序清单4.2 北斗七星数数哈哈哈

#程序清单4.2 北斗七星
n=int(input('请输入一个七位数:'))
s=str(n)    #先把n转化为字符串以拆分位数
a=int(s[0])
b=int(s[1])
c=int(s[2])
d=int(s[3])
e=int(s[4])
f=int(s[5])
g=int(s[6])
if n==pow(a,4)+pow(b,4)+pow(c,4)+pow(d,4)+pow(e,4)+pow(f,4)+pow(g,4):#注意冒号
    print('%7d是北斗七星数'%n)
else:
    print('%7d不是北斗七星数'%n)

科普一下:
1位自幂数:独身数 0,1,2,3,4,5,6,7,8,9
3位自幂数:水仙花数 153,370,371,407;
4位自幂数:四叶玫瑰数 1634,8208,9474;
5位自幂数:五角星数 54748,92727,93084;
6位自幂数:六合数 548834;
7位自幂数:北斗七星数 1741725,4210818,9800817,9926315;
8位自幂数:八仙数 24678050,24678051,88593477;
9位自幂数:九九重阳数 146511208,472335975,534494836,912985153;
10位自幂数:十全十美数 4679307774

#程序清单4.3嵌套if示例

#程序清单4.3嵌套if示例
#成绩等级转换
x=eval(input('请输入一个百分制成绩:'))
if x<0 or x>100:
    print('成绩有误,请重试!')
else:
    if x<60:
        y='不及格'         #用y赋值,程序简洁
    elif x>=60 and x<70:
        y='及格'
    elif x>=70 and x<80:
        y='中'
    elif x>=80 and x<90:
        y='良'
    else:
        y='优'
    print('成绩:%.2f'%x)
    print('等级:',y)

2.循环结构

循环结构主要是多练多分析,以下是不擅长的程序
个人认为在python中for比while好用太多

阶乘类

阶乘初步

#阶乘初步
n=int(input('输入正整数:'))
s=1
for i in range(1,n+1):
    s*=i
print('n!=',s)

奇数阶乘:
需要用到嵌套for,内层for是为了每一个n!的计算
外层for每次都要t=1

N=int(input('输入一个奇数:'))
sum=0
if N%2==0 or N<1:		#确认是否为奇数
    print('数据有误,请重试!')	#判断过程可略
    N=int(input('输入一个奇数:'))
else:
    for i in range(1,N+1,2):
        t=1             #每次外层前都一定要t=1!!
        for j in range(1,i+1):
            t*=j
        sum+=t  
    print('1!+3!+5!+……+N!=%d'%(sum))

除式阶乘

x=float(input('输入实数x=:'))
n=int(input('输入整数n='))
s=0
t=1
for i in range(1,n+1):
    t*=i		#储分子存阶乘
    s+=(x**i)/t		#(x**t)是很危险的写法,但很方便
print('f(%.2f,%d)=%.f'%(x,n,s))

三角形

对三角形真的有够恐惧
明白它的基本思路是找出空白与图案的数学关系,但在结构隶属上没做好
python的重复打印很好用!!!

图案类*

#等腰三角形
空格数=n-i

#等腰三角形
n=int(input('输入整数:'))
for i in range(1,n+1):                  #一个五角星=一个空格
    print(' '*(n-i),'*'*(2*i-1),sep='') #以五行为例,找出空格规律

#右对齐
和等腰三角形思路一样,只不过打印的星号变少了

字母类

#字母类
n=int(input('输入整数:'))
for i in range(1,n+1):
    print(' '*(n-i),chr(64+i)*(2*i-1),sep='') #换成chr即可
    print()

右九九乘法表

#这个题目的难点在于:填充空格的表示,以及结果两位数
我本想如左乘法表一般用s=(str(i)+’’+str(j)+’=’+str(ij)
字符串形式来打印,但在这个方法会导致结果为两位数时,字节溢出
就像这样:
【Python错题】考前突击·控制与结构_第1张图片

#右上角九九
for i in range(1,10):
    print(' '*7*(i-1),end='')       #将填充写在外围,也就是每行开头
    for j in range(i,10):
        print('%d*%d=%2d'%(i,j,i*j),end=' ')
    print()                         #每行结束,也要写在外围

运行结果:

1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9 
       2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 
              3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 
                     4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 
                            5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 
                                   6*6=36 6*7=42 6*8=48 6*9=54 
                                          7*7=49 7*8=56 7*9=63 
                                                 8*8=64 8*9=72 
                                                        9*9=81 

#####哎?好像没有当初做的那种困难感了?0.0
#####是不是因为C好像会用嵌套然后我当初把python和C混起来了??

数学问题

主要是不太理解基本数学(σ^σ)
将涉及到:素数、完数、因数分解

素数

#找素数
for n in range(1,101):
    for i in range(2,n):        #素数的判别方法
        if n%i==0:
            break
    else:                       #else要与内for对齐
        print(n,end='\t')       #否则输出的只不过是每次的检验数
#判断素数
n=int(input('输入整数:'))
for i in range(2,n):
    if n%i==0:
        print('%d不是素数'%n)
        break
else:
    print('%d是素数'%n)

完数

#完数:1+2+3=6,6为完数;1+2+4≠8,8不是完数
N=int(input ('请输入一个自然数:'))
S=0
for i in range(1,N):    #收集因数
    if N%i==0:
        S+=i
if  S==N:
    print(N,'是完数')
else:
    print(N,'不是完数')

运行结果:

请输入一个自然数:6
6 是完数
>>> 
请输入一个自然数:7
7 不是完数
>>> 

因数分解

n=int(input('输入一个正整数n:'))
s=str(n)+'='
i=2
while (n//i)!=0:    #n不小于2才需要因数分解
    if n%i==0:      #判断i是否为因数
        n//=i       #因数定义
        s+=str(i)+'*'
    else:
        i+=1
print(s)

差不多就这样了,还有些小细节看错题批注就可以了!

你可能感兴趣的:(python,python)