educoder实验五:循环结构实践指南

第1关:斐波那契数列

任务描述

本关任务:编写一个能计算斐波那契数列中第x个数的小程序。

相关知识

为了完成本关任务,你需要掌握:1.什么是斐波那契数列,2.for循环

什么是斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、 因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。 有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,每个月的兔子数形成的数为斐波那契额数列 在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n – 1)+F(n – 2)(n ≥ 3,n ∈ N*)

for循环

在python中,对于for循环,可以设置遍历结构为range函数 for i in range(初值,终值): <语句块>
i从初值取值到终值-1,每次执行一次循环体

编程要求

根据提示,在右侧编辑器补充代码,输入x,输出第x个斐波那契数列。 注意:斐波那契数列的第一项和第二项为1

测试说明

平台会对你编写的代码进行测试:

测试输入:6 预期输出: 8

测试输入:1; 预期输出: 1 测试输入:10; 预期输出: 55


勿以恶小而为之,勿以善小而不为。 开始你的任务吧,祝你成功!

代码:​​​​​​​

x=eval(input("")) 
a,b=1,1
for i in range(1,x):
    a,b=b,a+b
print(a)

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

任务描述

本关任务:编写一个小程序,输入一段英文短语,统计其中的单词数目和句子数目。

相关知识

为了完成本关任务,你需要掌握:1.如何判断英文语句中的单词数和句子数,2.如何遍历字符串。

获取判断英文语句中的单词数目和句子数目

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

遍历字符串

for c in s: <语句块>

从字符串s中逐一提取字符,放在字符变量c中, 对于所提取的每个字符执行一次循环体

编程要求

根据提示,在右侧编辑器补充代码,统计输入的英文中的单词数目和句子数目。

测试说明

平台会对你编写的代码进行测试:

测试输入:The government of Beijing has spent a large amount of money on building these bridges. For their own safety, pedestrians should be encouraged to use them instead of risking their lives by dashing across the road. Old people , however , may find it a little difficult climbing up and down the steps, but it is still much safer than walking across the road with all the danger of moving traffic. 预期输出: 单词69句子3

测试输入:One morning a fox saw a cock.He thought,"This is my breakfast." He came up to the cock and said,"I know you can sing very well.Can you sing for me?" 预期输出: 单词33句子4

提示: 可以用一个字符变量保存前一个字符(当前字符前的字符)


路漫漫其修道远,吾将上下而求索。 开始你的任务吧,祝你成功!

代码:

x=input()
x,a,cy,jz=" "+x," ",0,0
for i in x:
    if str.isalpha(i) is True and a in' .!?,;"':
        cy=cy+1
    a=i
for i in x:
    if i in'.!?': 
        jz=jz+1
print("单词{}句子{}".format(cy,jz))

第3关:密码判断

任务描述

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

密码文件的信息如下所示,每行显示逗号分隔的姓名和密码 甲乙,11111111 陈二,76895409 张三,12345678 李四,87654321 王五,88888888 赵六,99999999 欧阳小七,42110198

相关知识

为了完成本关任务,你需要掌握:1.如何打开文件,2.如何遍历文件,3.如何截取字符串。

打开文件

<file对象名>=open(<文件名>,<打开模式>)

打开一个文件,并创建一个file类对象 文件名在当前文件夹下,直接输入文字的名字 当以读的方式打开文件时,设置打开模式为”r”

遍历文件

遍历结构是文件 遍历文件fi的每一行 for line in fi: <语句块>
line是每行读出的字符串

注意:line字符串的结尾为换行符'\n'

截取字符串

str.find(指定字符)返回指定字符在字符串str的索引pos str[:pos]是该字符串中该字符以前的子串 str[pos+1:]是该字符串中该字符以后的子串

编程要求

根据提示,在右侧编辑器补充代码,实现检测用户名和密码的功能。 注意:str.strip('\n')去掉字符串首尾的换行符

测试说明

平台会对你编写的代码进行测试:

测试输入: 用户名张三 密码129876543

预期输出: 用户名或密码错误

测试输入: 用户名甲乙 密码11111111

预期输出: 密码正确

测试输入: 用户名刘好 密码129876543

预期输出: 用户名或密码错误


你热爱生命吗?那么别浪费时间,因为时间是组成生命的材料。 开始你的任务吧,祝你成功!

代码:

f1=open("sy5/密码.txt","r",encoding="utf-8")
x=input("用户名")
y=input("密码")
for line in f1:
    if x in line:
        if y==line[len(x)+1:].strip('\n'):
            print("密码正确")
        else:
            print("用户名或密码错误")
        exit()
print("用户名或密码错误")

第4关:通过数列求自然常数e

任务描述

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

相关知识

为了完成本关任务,你需要掌握:while循环

while循环

while <循环条件> : <语句块> 当判断条件为True时,循环体重复执行语句块中语句;当条件为False时,循环终止,执行与while同级别缩进的后续语句

编程要求

根据提示,在右侧编辑器补充代码,输出自然常数e的值。 根据近似公式

计算 e 的近似值,要求直至最后一项的值小于 1e-7 为止


耐心是一切聪明才智的基础。 开始你的任务吧,祝你成功!

代码:

s,i,n,e=1,1,1,1
while 1 / n >= pow(10, -7):
        n *= i
        e += 1 / n
        i += 1
print("e值为{:.8}".format(e))

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

任务描述

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

相关知识

为了完成本关任务,你需要掌握:双倍余额递减法进行固定资产折旧的规则

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

  1. 第一年应提的折旧额=600000*40%=240000元
  2. 第二年应提的折旧额=(600000-240000)*40%=144000元
  3. 第三年应提的折旧额=(600000-240000-144000)*40%=86400元
  4. 第四、五年每年应提的折旧额=(600000-240000-144000-86400-24000)/2=52800元

编程要求

根据提示,在右侧编辑器补充代码,计算并输出每年的折旧额。

测试说明

平台会对你编写的代码进行测试:

测试输入: 原价80000 残值2000 年限15

预期输出: 第 1年折旧10666.67 第 2年折旧9244.44 第 3年折旧8011.85 第 4年折旧6943.60 第 5年折旧6017.79 第 6年折旧5215.42 第 7年折旧4520.03 第 8年折旧3917.36 第 9年折旧3395.04 第10年折旧2942.37 第11年折旧2550.06 第12年折旧2210.05 第13年折旧1915.38 第14年折旧5224.97 第15年折旧5224.97

注意 年号显示为2位 折旧额保留两位小数


今天所做之事勿候明天,自己所做之事勿候他人。 开始你的任务吧,祝你成功!

代码:

yj=eval(input("原价"))
cz=eval(input("残值"))
n=eval(input("年限"))
hlnzj,zjl,jcz=0,2/n,yj
for i in range(1,n):
    if i == n - 1:
        zje = (jcz - cz)/2
        hlnzj = zje
    else :  
        zje = jcz * zjl
        jcz = jcz - zje
    print("第{:2}年折旧{:.2f}".format(i,zje))
print("第{:2}年折旧{:.2f}".format(n,hlnzj))

第6关:销售统计

任务描述

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

测试说明

平台会对你编写的代码进行测试:

测试输入 输入商品代码0101 输入商品价格5 输入商品数量2 输入商品代码0103 输入商品价格10 输入商品数量5 输入商品代码9999 输入商品价格2 输入商品数量1 输入商品代码0000 预期输出 商品种类3数量总计8金额总计62.00


开始你的任务吧,祝你成功!

代码:

spbh=input("输入商品代码")
s,c,sl=0,0,0
while spbh !='0000':
    c+=1
    spjg=int(input("输入商品价格"))
    spsl=int(input("输入商品数量"))
    sl+=spsl
    s+=spsl*spjg
    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("金额"))
def total(m,r,x,n,count):
    if n<x:
        count+=1
        price=js_lx(m if n==0 else n,r)
        n=m+price
        total(m,r,x,n,count)
    else:
        print(count)
def js_lx(m,r):
    price=m*r+m
    return price
total(m,r,x,0,0)

第8关:诗人作品统计

任务描述

本关任务: 在唐诗.txt文件,如下图所示。每首诗的标题为序号诗人冒号诗名。

编写程序,输入诗人姓名,显示该诗人所写的诗的标题,以及作品数,如图所示。 如果该诗人没有作品,显示无作品。

开始你的任务吧,祝你成功!

代码:

f1=open("sy5//唐诗.txt","r")
x=input("输入作者")
s=0
for i in f1:
    if i.find(":")!=-1:
        if i[:6].find(x)!=-1:
            print(i.strip("\n"))
            s=s+1
if s==0:
    print("无作品")
else:
    print("作品数 {}".format(s))
物联沃分享整理
物联沃-IOTWORD物联网 » educoder实验五:循环结构实践指南

发表评论