Python程序设计 循环结构(二)

1.斐波那契数列

编写一个能计算斐波那契数列中第x个数的小程序。斐波那契数列(Fibonacci sequence),又称黄金分割数列、 因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。 有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,每个月的兔子数形成的数为斐波那契额数列 在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*),根据提示,在右侧编辑器补充代码,输入x,输出第x个斐波那契数列。 注意:斐波那契数列的第一项和第二项为1

x=eval(input("")) 
#代码开始
def sum1(x):
    if x == 1 or x == 2:
        return 1
    else:
        return sum1(x-1) + sum1(x-2)

for i in range(1,x+1):
    sum2 = sum1(i)

print(sum2)
#代码结束

2.统计一段英文语句中的单词数和句子数

编写一个小程序,输入一段英文短语,统计其中的单词数目和句子数目。要统计词语的数量,则统计当前字符是大写或小写英文字母,而前一个字符是空格或标点符号(句号(.)惊叹号(!)问号(?)逗号(,)分号(;)双引号(""))等的数目。 例如,输入英文短语如下,统计结果为57个单词和3个句子。 提示:对字符串的每个字符ch循环,若ch是句号(.)惊叹号(!)问号(?)时,则表示句子数的变量加一。若ch是大小写英文字母,且前一个字符是指定标点时,表示词语数的变量加一。前一个字符可以用一个变量保存,只要在循环语句的最后将ch赋值给该变量即可。提示:对于第一个字符,可以设置其前一个字符为空格。

x=input()
#代码开始
t=" "
jz = 0
cy = 0
for i in x:
    if i == "." or i == "?" or i == "!":
        jz += 1
    if(i.isalpha() and (t ==" " or t =="." or t=="!" or t=="?" or t=="," or t ==";" or t=="\"")):
        cy = cy + 1
    t = i

#代码结束
print("单词{}句子{}".format(cy,jz))

3.密码判断

输入用户名和密码,根据密码文件中所记录的用户名和密码信息,判断登录信息是否正确

密码文件的信息如下所示,每行显示逗号分隔的姓名和密码

甲乙,11111111 陈二,76895409 张三,12345678 李四,87654321 王五,88888888 赵六,99999999 欧阳小七,42110198

f1=open("sy5/密码.txt","r",encoding="utf-8")
x=input("用户名")
y=input("密码")
#代码开始
for i in f1:
    i = i.strip("\n")
    yhm = i.split(",")[0]
    mm = i.split(",")[1]

    if x == yhm and y == mm:
        print("密码正确")
        break
else: 
    print("用户名或密码错误")
       
#代码结束

4.通过数列求自然常数e

编写程序,根据近似公式 e≈1+1/(1!)+1/(2!)+1/(3!)+… +1/(n!) 计算 e 的近似值,要求直至最后一项的值小于 1e-7 次方为止

s=1
#代码开始
t = 1
n = 1
m = 1
while(t>1e-7):
    t = 1 / n
    s = s + t
    m = m + 1
    n = n * m
#代码结束
print("e值为{:.8}".format(s))

5.双倍余额递减法计算固定资产折旧

编写一个使用双倍余额递减法计算固定资产折旧的小程序。

双倍余额递减法进行固定资产折旧的规则:双倍余额递减法是在不考虑固定资产预计净残值的情况下,根据每年年初固定资产净值和双倍的直线法折旧率计算固定资产折旧额的一种方法。它的基本规则是:以固定资产使用年数倒数的2倍作为它的年折旧率,以每年年初的固定资产账面余额作为每年折旧的计算基数,但由于在固定资产折旧的初期和中期时不考虑净残值对折旧的影响,为了防止净残值被提前一起折旧,因此现行会计制度规定,在固定资产使用的最后两年中,折旧计算方法改为平均年限法,即在最后两年将固定资产的账面余额减去净残值后的金额除以2作为最后两年的应计提的折旧。 例:某医院有一台机器设备原价为600000元,预计使用寿命为5年,预计净残值24000元。 年折旧率=2/5=40%

yj=eval(input("原价"))
cz=eval(input("残值"))
n=eval(input("年限"))
#代码开始

a = 1 / n * 2
for i in range(1, n+1):
    if n - i < 2 :
        s = (yj - cz) / 2
        
    else:
        s = yj * a
        yj -= s
    print("第{:2d}年折旧{:.2f}".format(i,s))
#代码结束

6.销售统计

循环输入商品编号、数量和价格,进行累加。 只到输入商品编号为0000为止。 输出商品种类、数量总计和金额总计。

spbh=input("输入商品代码")
s=0
c=0
sl=0
#代码开始
while(spbh != "0000"):
    a = input("输入商品价格")
    b = input("输入商品数量")
    c = c + 1
    sl = sl + int(b)
    s = s + int(a) * int(b)
    spbh = input("输入商品代码")

#代码结束
print("商品种类{}数量总计{}金额总计{:.2f}".format(c,sl,s))

7.投资年限计算

编写一个计算投资年限的小程序 某客户每年年初在银行存入一笔固定金额的钱m,在年底,将本金和利息取出.在第二年年初,将该笔钱与新存入的钱m一起,再存入银行。输入每年存款m、年利率r,再输入用户要得到的金额x,计算该客户需要存放多少年y才能得到需要的金额。 例如,输入存款10000,年利率0.1,金额100000,输出7 输入存款50000,年利率0.05,金额500000,输出8。

m=eval(input("存款"))
r=eval(input("年利率"))
x=eval(input("金额"))
#代码开始
s = 0
n = 0
while(s < x):
    s = (s + m) * r + s + m
    n = n + 1
#代码结束
print(n)

8.诗人作品统计

在唐诗.txt文件,如下图所示。每首诗的标题为序号诗人冒号诗名。编写程序,输入诗人姓名,显示该诗人所写的诗的标题,以及作品数,如图所示。 如果该诗人没有作品,显示无作品。

f1=open("sy5//唐诗.txt","r")
x=input("输入作者")
#代码开始
t = True
s = 0
for i in f1:
    i = i.strip("\n")
    n = i[3:3 + len(x)]
    if (n == x):
        t = False
        print(i)
        s = s + 1
if (t == True):
    print("无作品")
else:
    print("作品数 %d" % s)
#代码结束

9.python圆周率计算

用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数y为止 注意:不包括最后一项,测试输入 0.0001, 程序输出 3.1414

y=eval(input())
#开始
s = 1
n = 1
t = 1
p = 0
while True:
    p = p + t
    n = n + 2
    s = s * -1
    t = s / n
    if abs(t) <= y:
        break

s = p * 4
#结束
print("{:.4f}".format(s))

10.银行利息计算

某人有资金100000元,他存入银行一年期的大额存款,年利率为5%,一年后又将所有资金转存。若银行利率一直不变,求想获得指定金额的资金,存款至少需要多少年。 测试输入120000 输出4

y=eval(input())
#开始
s = 100000
n = 0
while(1):
    s = s + s * 0.05
    n += 1
    if s >= y:
        break

#结束
print("{:d}".format(n))

11.模体motify查找

部分序列在不同基因组中共有,这种序列我们称为Motif。 事实上基因组中的Motif出现多次,这种情况称为重复。 给出一个长的DNA字符串s,和一个较短的DNA字符串t。 要求找出s中出现t的所有位置。注意位置从0开始计数。 输出t在s中出现的位置,即起始下标。如果有多次匹配,都需要输出。 例如输入 GATATATGCATATACTT ATAT 输出 1 3 9 输入 GATATATGCATATACTT CTAG 输出没有此模体,提示:x.find(y,beg,end) find() 方法检测字符串x中是否包含子字符串y ,如果指定 begin(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串,返回开始的索引值,否则返回-1。未指定begin和end的范围,则默认整个字符串内检索 beg默认为0,end默认为字符长度。

s=input("输入长DNA")
t=input("输入模体")
#代码开始
b = 0
c = 0
for i in range(len(s)):
    a = s.find(t,i)
    if a < 0 or b == a:
        continue
    elif a > 0 and b!= a:
        b = a
        c += 1
        print(a)

if c == 0:        
    print("没有此模体")

#代码结束

12.苹果问题

在宫廷举办的数学竞赛中,斐波那契曾提出过如下的“苹果问题”:一个人经过n道门进入苹果园,摘了许多苹果。离开果园时,给第一个守门人一半苹果加1个;给第二个守门人余下的一半苹果加1个;对其他守门人也是如此这般,最后他带1个苹果离开果园.请问他当初一共摘了多少苹果。 输入n,计算他当初摘的苹果数 例如,输入7,输出384

n=eval(input())
#代码开始
x = 1 
for i in range(1,n+1):
    x = (x + 1) * 2  
#代码结束
print("苹果数{}".format(x))

13.韩信点兵

相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾(余下的人数)就知道总人数了。 输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。 已知总人数不小于10,不超过100 

a=eval(input("a"))
b=eval(input("b"))
c=eval(input("c"))
#代码开始
for i in range(10,101):
    if i % 3 == a and i % 5 == b and i % 7 == c:
        print(i)
        break
else:
    print("无解")
#代码结束

14.电商促销循环计算

某电商双11促销活动。消费金额每满200元减免30元,上不封顶。 若用户是vip,则对优惠后的金额再享受95折优惠。 编写程序,用户可反复输入消费金额和是否vip(y表示是n表示否),计算并显示实际付款和优惠金额,直到用户输入消费金额0为止。(显示保留两位小数)

x=eval(input("消费金额"))
#代码开始

while True:
    if x == 0:
        break
    s = x
    if x >= 200:
        a = x // 200
        s = x - 30 * a

    sf = input("是否vip")
    if sf == "y":
        s = s * 0.95
    else:
        s = s
    print("实际付款{:.2f}优惠{:.2f}".format(s,x-s))

    x = eval(input("消费金额"))
    
#代码结束

15.分解质因数

把一个合数用质因数相乘的形式表示出来,叫做分解质因数。 例如 54=2*3*3*3 80=2*2*2*2*5 输入一个合数,将其显示为质因数相乘的形式 例如,输入150 显示 150=2*3*5*5

n=eval(input())
#代码开始
m = n
i = 2
s = 1
print("%d=" % n, end="")
while True:
    if m%i==0:
        m = m / i
        s = s * i
        print("%d" % i, end="")
        if s == n:
            print()
        else:
            print("*",end="")
    else:
        i += 1
    if i == n + 1:
        break

#代码结束

16.银行信息查询

编写一个能查询银行信息的小程序。 银行信息.csv文件如下所示:每行显示银行的编号,名称,省份,城市和类别信息。

编写程序,输入银行的名称和城市,将该城市的包含查询关键字的银行信息显示出来,并显示序号。最后显示银行数目。 若没有符合条件的数据,显示无符合条件的银行。 注意; 模糊查询即可(该行包含城市名和银行的名称即显示) 序号和银行信息之间有空格

f1=open("lx2//银行信息.csv","r",encoding="utf8")
x=input("银行名称")
y=input("城市")
#代码开始
n = 1
for i in f1:  
        i = i.strip("\n").split(",") 
        if len(i[3]) > 3:  
                if x == i[4][-4:] and y == i[3][0:-1]:   
                        print(n, end=" ")
                        print(i[0],i[1],i[2],i[3],i[4],sep=",")
                        n = n + 1
                elif x == i[4][-4:] and y == i[3][0:2]:
                        print(n,end=" ")
                        print(i[0],i[1],i[2],i[3],i[4],sep=",")   
                        n = n + 1          
        else:
                if x ==i[4][-4:] and y == i[3]:
                        print(n,end=" ")
                        print(i[0],i[1],i[2],i[3],i[4],sep=",")
                        n = n + 1

                                
if n-1 == 0:
        print("无符合条件的银行")  
else:         
        print("共%d个银行" % (n - 1))
          
#代码结束 
f1.close()

17.区县信息查询

编写一个能查询湖南省的区县信息的小程序。 湖南区县.csv文件如下所示:每行显示城市名称、区县名称和街道乡镇名称

编写程序,输入区县名称,将该区县的每行信息显示出来,并显示序号。最后显示该区县的街道的数目、乡的数目和镇的数目 (提示:根据该行结尾的字符判断该行为街道、乡或镇。注意每行结尾有换行符) 若没有符合条件的数据,显示没有此区县信息 注意; 序号和信息之间有空格

f1=open("lx2//湖南区县.csv","r",encoding="utf8")
s=input("区县名称")
#代码开始
n = 1
count1 = 0
count2 = 0
count3 = 0
c = 0
for i in f1:
    i = i.strip("\n").split(",")
    if s == i[1]:
        c += 1
        print(n,end=" ")
        print(i[0],i[1],i[2],sep=",")
        n = n + 1
        if i[2][-1] == "道":
            count1 += 1
        elif i[2][-1] == "乡":
            count2 += 1
        elif i[2][-1] == "镇":
            count3 += 1
if c > 0:
    print("{}个街道{}个乡{}个镇".format(count1,count2,count3))
else:
    print("没有此区县信息")
#代码结束
f1.close()

  • 45
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值