头歌 python 练习五 循环结构

第1关: python圆周率计算

y=eval(input())
#开始
s = 0  # 初始化累加器
k = 0  # 初始化项的索引

# 开始
while True:
    term = (-1)**k / (2 * k + 1)  # 计算当前项
    if abs(term) < y:  # 检查项的绝对值是否小于 y
        break  # 如果小于 y,退出循环
    s += term  # 将当前项累加到 s
    k += 1  # 增加 k 的值
# 结束

s *= 4  # 乘以 4 得到 π 的近似值
#结束
print("{:.4f}".format(s))

第2关:银行利息计算

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

y=eval(input())
#开始

# 初始化变量
initial_amount = 100000  # 初始资金
annual_rate = 0.05  # 年利率
n = 0  # 存款年数

# 计算所需年数
while initial_amount < y:
    initial_amount *= (1 + annual_rate)  # 计算下一年的资金
    n += 1  # 年数增加


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

第3关:模体motify查找

任务描述
部分序列在不同基因组中共有,这种序列我们称为Motif。
事实上基因组中的Motif出现多次,这种情况称为重复。
给出一个长的DNA字符串s,和一个较短的DNA字符串t。
要求找出s中出现t的所有位置。注意位置从0开始计数。
输出t在s中出现的位置,即起始下标。如果有多次匹配,都需要输出。

s=input("输入长DNA")
t=input("输入模体")
#代码开始
positions = []
index = 0

# 使用find方法查找t在s中的所有位置
while index < len(s):
    index = s.find(t, index)  # 从当前索引位置开始查找
    if index == -1:  # 如果找不到,退出循环
        break
    positions.append(index)  # 找到的位置添加到列表
    index += 1  # 更新索引位置,继续查找下一个可能的位置

# 输出结果
if positions:
    for pos in positions:
        print(pos)
else:
    print("没有此模体")

第4关:苹果问题

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

n=eval(input())
#代码开始

remaining_apples = 1  # 最后带走的苹果数量

# 逆向推算
for _ in range(n):
    remaining_apples = (remaining_apples + 1) * 2 
#代码结束
x = remaining_apples
print("苹果数{}".format(x))

第5关:韩信点兵

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

a=eval(input("a"))
b=eval(input("b"))
c=eval(input("c"))
#代码开始
found_solution = False

for total in range(10, 101):  # 检查10到100之间的数字
    if (total - a) % 3 == 0 and (total - b) % 5 == 0 and (total - c) % 7 == 0:
        print(total)  # 找到符合条件的总人数
        found_solution = True
        break  # 找到一个结果就停止检查

if not found_solution:
    print("无解")
#代码结束

第6关:电商促销循环计算

任务描述
某电商双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("消费金额"))
    
#代码结束

第7关:分解质因数

任务描述
把一个合数用质因数相乘的形式表示出来,叫做分解质因数。

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

第8关:银行信息查询

任务描述
本关任务:编写一个能查询银行信息的小程序。
银行信息.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()

第9关:区县信息查询

本关任务:编写一个能查询湖南省的区县信息的小程序。
湖南区县.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()

作者:b-reeze_

物联沃分享整理
物联沃-IOTWORD物联网 » 头歌 python 练习五 循环结构

发表回复