#如果您不幸读到这篇文章,那欢迎指正
救救期末火葬场的孩子TAT
第四章 控制与结构
结构:顺序,选择,循环
选择结构不能循环使用……
基本结构:
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)
循环结构主要是多练多分析,以下是不擅长的程序
个人认为在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)
字符串形式来打印,但在这个方法会导致结果为两位数时,字节溢出
就像这样:
#右上角九九
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)
差不多就这样了,还有些小细节看错题批注就可以了!