Python程序设计与算法基础教程·第四章上机实践

Python版本 3.6

这一章的题是真的多。。

  • 4.1
# -*- coding: utf-8 -*-
n=int(input('键入需要的杨慧三角行数:'))
s1=[1]
for i in range(1,n+1):
    print(str(s1).center(100))
    s1.append(0)
    s2=s1.copy()
    s2.reverse()
    for j in range(0,i):
        s2[j]+=s1[j]
    s1=s2

我把题目要求改了一下,效果如下:
Python程序设计与算法基础教程·第四章上机实践_第1张图片

  • 4.2
# -*- coding: utf-8 -*-
import math
a=b=-1
while(a<=0 or b<=0):
    a=float(input('输入直角三角形的直角边A(>0):'))
    b=float(input('输入直角三角形的直角边B(>0):'))
c=math.sqrt(a*a+b*b)
l=a+b+c#周长
s=a*b/2
si1=a/c
si2=b/c
d1=round(math.asin(si1)*180/math.pi,0)
d2=round(math.asin(si2)*180/math.pi,0)
print(str.format('直角三角形的三边分别为:A={:0.1f},B={:0.1f},C={:0.1f}',a,b,c))
print(str.format('三角形的周长={:0.1f},面积={:0.1f}',l,s))
print(str.format('三角形锐角的两个度数分别为{:0.1f}和{:0.1f}',d1,d2))

第二题还是简单

  • 4.3
# -*- coding: utf-8 -*-
import random
a=random.randint(0,100)
b=random.randint(0,100)
c=random.randint(0,100)
print(str.format('原始值:a={},b={},c={}',a,b,c))
print(str.format('(方法一)升序值:a={},b={},c={}',min(a,b,c),a+b+c-min(a,b,c)-max(a,b,c),max(a,b,c)))
if a>b:a,b=b,a
if a>c:a,c=c,a
if b>c:b,c=c,b
print(str.format('(方法二)升序值:a={},b={},c={}',a,b,c))

我在后面的题里用到了这个排序

  • 4.4
# -*- coding: utf-8 -*-
s=-1
while s<=0:
    s=float(input('请输入有固定工资收入的党员的月工资:'))
if s<=400:d=s*0.005
elif s<=600:d=s*0.01
elif s<=800:d=s*0.015
elif s<=1500:d=s*0.02
elif s>1500:d=s*0.03
print(str.format('月工资={},交纳党费={}',s,d))

好奇这是哪一年的标准,这么便宜

  • 4.5
# -*- coding: utf-8 -*-
x=float(input('请输入操作数x:'))
y=float(input('请输入操作数y:'))
z=input('请输入操作符:')
if z=='/' and y==0:
    print('分母=0,零除异常')
elif z=='%' and y==0:
    print('分母=0,零除异常')
else:
    if z=='+':r=x+y
    if z=='-':r=x-y
    if z=='*':r=x*y
    if z=='/':r=x/y
    if z=='%':r=x%y
    print(str.format('{}{}{}={}',x,z,y,r))

我觉得Python做输入判断没有必要,所以我就没做

  • 4.6
# -*- coding: utf-8 -*-
a=float(input('请输入三角形的边a:'))
b=float(input('请输入三角形的边b:'))
c=float(input('请输入三角形的边c:'))
a,b,c=min(a,b,c),a+b+c-min(a,b,c)-max(a,b,c),max(a,b,c)
if a<=0 or b<=0 or c<=0 or a+b<=c or a+c<=b or b+c<=a:print('无法构成三角形!')
elif a==b==c:print('该三角形为等边三角形!') 
elif ((a==b!=c)or(a==c!=b)or(c==b!=a))and(a*a+b*b==c*c):
    print('该三角形为等腰直角三角形!')
elif (a==b!=c)or(a==c!=b)or(c==b!=a):print('该三角形为等腰三角形!')
elif a*a+b*b==c*c:print('该三角形为直角三角形!')
else:print('该三角形为普通三角形!')

不做输入判断的话,就得靠用户不乱来了,这题我加了个等腰直角,虽然。。。肯定没人能输入,试试?

  • 4.7
# -*- coding: utf-8 -*-
h=-1
f=1
while h<0:
    h=int(input('请输入总头数:'))
while f%2==1:
    f=int(input('请输入总脚数(必须是偶数):'))
r=f/2-h
if r>h or r<0:
    print('方法一无解!')
else:  
    print(str.format('方法一:鸡:{}只,兔:{}只',int(h-r),int(r)))
for r in range(0,h+1):
    if r*2+(h-r)*4==f:
        print(str.format('方法二:鸡:{}只,兔:{}只',r,h-r))
        break
    if r==h:print('方法二无解!') 

我选择皮一下
Python程序设计与算法基础教程·第四章上机实践_第2张图片

  • 4.8
# -*- coding: utf-8 -*-
def fac(a,b=1):#定义阶乘函数
    return b if a==1 or a==0 else fac(a-1,a*b)
r=0
i=0
x=float(input('请输入X:'))
while abs((x**i)/fac(i))>=10**-7:
    r+=(x**i)/fac(i)
    i+=1
print('Pow(e,x)=',r)

学会了函数的默认参数,精度要写到10的-7

  • 4.9
# -*- coding: utf-8 -*-
a=-1
while(a<0):
    a=float(input('输入非负实数a:'))
r=a/2+0.5
if a==0:print('0的算术平方根=0')  
else:
    while r-(r+a/r)/2>=10**-6:
        r=(r+a/r)/2
    print(a,'的算术平方根=',r)

把精度再调高一点,基本就是结果了
Python程序设计与算法基础教程·第四章上机实践_第3张图片
下面那个结果我把精度调整为了10的-20次方

  • 4.10
# -*- coding: utf-8 -*-
i=3
print('0~1000中用3除余2,用5除余3,用7除余2的数有:')
while 7*i+2<=1000:
    if(7*i+2)%5==3 and (7*i+2)%3==2:
        print(7*i+2,end=' ')
    i+=1

这道题的话,我没有一个一个的累加,而是累加七,这样要更快

  • 4.11
# -*- coding: utf-8 -*-
r=0
h=100
for i in range(1,20):
    print('小球在第',i,'次落地时,共经过',r,'米')
    r+=h
    h/=2
    print(str.format('第{}次反弹{}米',i,h))

这道题书上的结果很迷啊,我把第一段的100去掉后才差不多,但是。。。
Python程序设计与算法基础教程·第四章上机实践_第4张图片
书上的第十次是199.80米,反弹0.20米,可结果是第11次和第9次

  • 4.12
# -*- coding: utf-8 -*-
r=1
for i in range(8,0,-1):
    print(str.format('第{}天桃子数为:{}',i,r))
    r=(r+1)*2

简单,不做评价

  • 4.13
# -*- coding: utf-8 -*-
import random
n=random.randint(1,10)
t=1
r=0
for i in range(1,n+1):
   r+=t
   t=10*t+1
print(str.format('n={} Sn={}',n,r))

也是简单

你可能感兴趣的:(学习笔记)