同济大学Python程序设计基础
实验四
1.显示右规律字符图,如图2.4.1所示。
提示:要利用chr函数将字母编码值转换成字母。
代码片
.
for i in range(1,10):
print(i*' '+chr(int(64+i))*(20-2*i))
i=i+1
input().raw_input("Press")
检查表达式输入中圆括号配对问题。要求对文本框输入的算术表达式,检验其圆括号配对情况,并给出相应信息如图2.4.2所示。
提示:利用for 语句通历整个表达式,对取出的每个字符判断,对于是左或右括号,进行相应的计数,所有字符都遍历了,根据计数确定表达式配对情况。
代码片
.
str=input("输入表达式:")
m=0
n=0
for i in str:
if(i=='('):
m=m+1
if(i==')'):
n=n+1
if(m<n):
print("右括号多于左括号")
elif(m>n):
print("左括号多于右括号")
else:
print("括号使用正确")
输入一字符句子,各单词间空格分隔,显示最长的单词和长度。
提示:利用字符串的split方法,将单词分离到列表中;然后对列表遍历利用字符串函数求出最长单词。
代码片
.
str=input("输入字符句子:")
ls=list(str.split())
max=ls[1]
for i in ls:
if(len(max)<len(i)):
max=i
print("最长单词为%s"%max)
输入任意位的正整数,利用while语句将输入的数按逆序显示。即若输入x=15356,则输出nx=65351。
提示:实现的方法是将一个十进制数x不断除以十取余、x整除十,并将余数连接到逆序数中,直到x为0。
代码片
.
a=int(input("请输入任意位正整数x="))
c=0
while (a//10)!=0:
b=a%10
c=c*10+b
a=a//10
c=c*10+a
print("逆序数nx=%d"%c)
计算S=1+1/2+1/4+1/7+1/11+1/16+1/22+1/29+K
当第i项的值<10的-4次方时结束。
提示:找出规律,第i项的分母是前一项的分母加上表示有分母项开始计数,即分母通项为:t(i)=t(i-1)+i
代码片
.
n=1
sum=0
i=1
while(1/n>=1E-4):
sum=sum+1/n
n=n+i
i=i+1
print("S=1+1/2+1/4+1/7+1/11+1/16+1/22+1/29+K=%f"%sum)
计算π的近似值,π的计算公式为:
求n=1000时的结果,并与数学库提供的常数pi进行比较,为提高精度,如何设置n的值?
代码片
.
import math
pi=2
for n in range(2,1001):
pi=pi*(n**2)/((n-1)*(n+1))
n=n+2
print("n=1000时Π的近似值为%f"%pi)
pi=2
n=2
while(abs(math.pi-pi)>1E-5):
pi=pi*(n**2)/((n-1)*(n+1))
n=n+2
print("Π更精确的近似值为%f,此时n=%d"%(pi,n))
编一程序,显示出所有的水仙花数。所谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。例如,153是水仙花数,因为153 =1e3+5e3+3e3。
提示:解该题的方法有两种:
①利用三重循环,将三个一位数连接成一个3位数进行判断。②利用单循环将一个3位数逐位分离后进行判断。
代码片
.
print("水仙花数有:")
for i in range(100,1000):
a=i%10
b=(i//10)%10
c=(i//100)%10
if i==a**3+b**3+c**3:
print(i)
计算机来判断肇事车辆。交通事故中肇事车辆撞人后逃逸,警方在现场找到3位目击证人询问肇事车辆5位数的车牌号码。甲说只看清最左两位为27;乙说只看清最后位是3;丙说牌号是67的倍数。
提示:利用枚举法求解。确定需要枚举的数字有几位,枚举的几位数字间的关系验证是否是问题的解。
代码片
.
n=0
for i in range(27003,27994):
if i%67==0 and i%10==3:
print("车牌号为%d"%i)
i=i+10
n=n+1
print("需要枚举的数字有%d个"%n)
猜数游戏。计算机随机产生一个1~100之间的整数,由用户去猜,猜中即胜;猜不中,显示提示信息,继续猜,直至猜中,显示相关信息和次数,如图2.4.3所示。
提示:利用循环来解决,利用随机函数产生一个数,与用户输入的数进行比较,用户输入的数应利用二分法法则提高命中利率。若最多猜5次,又如何实现?
代码片
.
import random
x=random.randint(1,100)
print("1.无限制猜数")
n=0
while 1:
n=n+1
a=int(input("输入猜测的数:"))
if(a<x):
print("%s 小了"%a)
elif(a>x):
print("%s 大了"%a)
else:
break
print("%s 恭喜你猜对了!你猜了%s次"%(x,n))
print("2.有限制:最多猜5次")
y=random.randint(1,100)
flag=0
for n in range(0,5):
n=n+1
b=int(input("输入猜测的数:"))
if(b<y):
print("%s 小了"%b)
elif(b>y):
print("%s 大了"%b)
else:
flag=1
print("%s 恭喜你猜对了!你猜了%s次"%(y,n))
break
if flag==0:
print("抱歉,您最多猜5次")
代码片
.
a=float(input("请输入任意数a:"))
x0=1
while 1:
x1=2*x0/3+a/(3*x0*x0)
if abs(x1-x0)<1E-5:
print("%f的立方根为%f"%(a,x1))
break
else:
x0=x1