同济大学Python程序设计基础 实验四:循环结构

同济大学Python程序设计基础

实验四

第一题

1.显示右规律字符图,如图2.4.1所示。
同济大学Python程序设计基础 实验四:循环结构_第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所示。
同济大学Python程序设计基础 实验四:循环结构_第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所示。

同济大学Python程序设计基础 实验四:循环结构_第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次")

第十题

用迭代法求
在这里插入图片描述

求立方根的迭代公式为:
在这里插入图片描述

提示:x的初值是任意的,迭代到|xi+1-xi| 同济大学Python程序设计基础 实验四:循环结构_第4张图片

代码片.

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

你可能感兴趣的:(python,字符串,python,算法)