Bootstrap

【头歌-Python】流程控制自学引导

禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137461301
参考教程:B站视频讲解——https://space.bilibili.com/3546616042621301

第1关:按从小到大顺序输出小于n的非负整数

任务描述
本关任务:编写一个能在同一行输出小于n的非负整数的小程序。

相关知识
为了完成本关任务,你需要掌握:

  1. range
  2. 遍历输出range产生的整数

range
range 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。
range 参数必须为整数,如果省略 step 参数,则默认为 1。 如果省略 start 参数,则默认为 0。 如果 step 为零,则会引发 ValueError。
range 对象支持除拼接和重复外的通用序列操作

range(stop)
range(start, stop[, step])

输出:10

遍历输出range产生的整数
通俗的理解,遍历range就是:把range中的整数都输出一遍。

示例如下:

for i in range(10):
    print(i)

输出:

0
1
2
3
4
5
6
7
8
9
for i in range(10):
    print(i, end=' ')  # 不换行,每个输出有一个空格

输出:

0 1 2 3 4 5 6 7 8 9 

编程要求
根据提示,在右侧编辑器补充代码,接受一个正整数输入,在同一行依序输出小于n的非负整数。

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

测试输入:

5

预期输出:

0 1 2 3 4 

测试输入:

15

预期输出:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 

提示:
输出不换行,print()中要使用end参数,参数值根据题目 要求设定

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

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137461301
n=int(input())
for i in range(n):
    print(i, end=' ')

第2关:根据输入数据按要求输出整数序列

任务描述
本关任务:输入起点、终点和步长,编写一个小程序在同一行内输出等差数列,输出的每个数字后加一个空格。

相关知识
为了完成本关任务,你需要掌握:

  1. range
  2. 遍历输出range产生的整数
  3. 步长

range
range 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。
range 参数必须为整数,如果省略 step 参数,则默认为 1。 如果省略 start 参数,则默认为 0。 如果 step 为零,则会引发 ValueError。
range 对象支持除拼接和重复外的通用序列操作

range(stop)
range(start, stop[, step])

遍历输出range产生的整数
通俗的理解,遍历range就是:把range中的整数都输出一遍。

示例如下:

for i in range(10):
    print(i, end=' ')  # 不换行,每个输出有一个空格

输出:

0 1 2 3 4 5 6 7 8 9 

步长

range(start, stop[, step])

示例如下:

for i in range(1, 20, 2):
    print(i, end=' ')  # 不换行,每个输出有一个空格

输出:

1 3 5 7 9 11 13 15 17 19  

编程要求
根据提示,在右侧编辑器补充代码,在三行中分别输入一个正整数(测试数据保证第二个数大于第一个数,即保证终点数据大于起点),在同一行依序输出产生的整数序列,输出时数字后加一个空格。

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

测试输入:

0
100
5

预期输出:

0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95  

提示:
输出不换行,print()中要使用end参数,参数值根据题目 要求设定

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

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137461301
start = int(input())  # 输入一个整数表示数列起点
# 补充一条语句,输入一个整数表示数列终点
stop = int(input())
# 补充一条语句,输入一个整数表示数列的步长
step = int(input())
for i in range(start,stop,step):
    print(i,end=' ')

第3关:输出小于n的正偶数的和

任务描述
本关任务:编写一个能计算并输出小于n的正偶数的和的小程序。
2 + 4 + 6 + 8 + …

相关知识
为了完成本关任务,你需要掌握:

  1. range
  2. 遍历range产生的整数
  3. 累加求和
  4. 求和函数

range
range 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。
range 参数必须为整数,如果省略 step 参数,则默认为 1。 如果省略 start 参数,则默认为 0。 如果 step 为零,则会引发 ValueError。
range 对象支持除拼接和重复外的通用序列操作

range(start, stop[, step])

遍历range产生的整数
通俗的理解,遍历range就是:把range中的整数都输出一遍。

示例如下:

产生奇数

for i in range(1, 10, 2):
    print(i, end=' ')

输出:

1 3 5 7 9 

产生偶数

for i in range(0, 10, 2):
    print(i, end=' ')

输出:

0 2 4 6 8 

累加求和
累加求和就是把range产生的整数一个一个的加到一起得到总和。

示例如下:

result = 0               # 累加器置0
for i in range(101):     # 遍历不大于100的非负整数
    result = result + i  # 将产生的每个整数依次加到累加器上
print(result)            # 输出结果

输出:

5050

求和函数

sum(iterable, /, start=0)

从 start 开始自左向右对range、列表、元组等可迭代对象(iterable) 的项求和并返回总计值。 可迭代对象的项通常为数字,而 start 值则不允许为字符串。
range就是一个典型的可迭代类型(iterable),可用作sum()的参数

print(sum(range(101)))        # 0到100求和
print(sum(range(1, 101, 2)))  # 0到100奇数求和 
print(sum(range(0, 101, 2)))  # 0到100偶数求和

输出

5050
2500
2550

编程要求
根据提示,在右侧编辑器补充代码,接受一个正整数输入,输出小于这个数的所有非负偶数的和。

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

测试输入:

101

预期输出:

2550

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

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137461301
result = 0
stop = int(input())
for i in range(0,stop,2):
    result = result + i
print(result)

第4关:输出小于n的正奇数的倒数的和

任务描述
本关任务:编写一个能计算并输出小于n(n>1)的正奇数的倒数的和的小程序。
1 - 1/3 + 1/5 -1/7 + 1/9 -1/11 + …

相关知识
为了完成本关任务,你需要掌握:

  1. range
  2. 遍历range产生的整数
  3. 累加求和

range
range 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。
range 参数必须为整数,如果省略 step 参数,则默认为 1。 如果省略 start 参数,则默认为 0。 如果 step 为零,则会引发 ValueError。
range 对象支持除拼接和重复外的通用序列操作

range(start, stop[, step])

遍历range产生的整数
通俗的理解,遍历range就是:把range中的整数都输出一遍。

示例如下:

产生奇数

for i in range(1, 10, 2):
    print(i, end=' ')

输出:

1 3 5 7 9 

产生偶数

for i in range(0, 10, 2):
    print(i, end=' ')

输出:

0 2 4 6 8 

累加求和
累加求和就是把range产生的整数一个一个的加到一起得到总和。

示例如下:

result = 0                   # 累加器置0
for i in range(1, 101):      # 遍历不大于100的非负整数
    result = result + 1 / i  # 将产生的每个整数依次加到累加器上
print(result)                # 输出结果

输出:

5.187377517639621

编程要求
根据提示,在右侧编辑器补充代码,接受一个大于1的整数输入,输出小于这个数的所有非负奇数的倒数和。

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

测试输入:

101

预期输出:

2.937774848474907

测试输入:

20

预期输出:

2.1332555301595546

提示:
range(n) 序列第一个数字是0,若用到 1/i 时,要用range(1, n)使首项从1开始。

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

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137461301
result = 0
a = int(input())
for i in range(1,a,2):
    result = result + 1 / i
print(result)

第5关:输出正负交替数列的和

任务描述
本关任务:编写一个能计算并输出正奇数的倒数的正负交错数列和的小程序。
1 - 1/3 + 1/5 - 1/7 +1/9 - 1/11 + …

相关知识
为了完成本关任务,你需要掌握:

  1. range
  2. 遍历range产生的整数
  3. 累加求和
  4. 正负交错

range
range 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。
range 参数必须为整数,如果省略 step 参数,则默认为 1。 如果省略 start 参数,则默认为 0。 如果 step 为零,则会引发 ValueError。
range 对象支持除拼接和重复外的通用序列操作

range(start, stop[, step])

遍历range产生的整数
通俗的理解,遍历range就是:把range中的整数都输出一遍。

示例如下:

产生奇数

for i in range(1, 10, 2):
    print(i, end=' ')

输出:

1 3 5 7 9 

产生偶数

for i in range(0, 10, 2):
    print(i, end=' ')

输出:

0 2 4 6 8 

累加求和
累加求和就是把range产生的整数一个一个的加到一起得到总和。

示例如下:

result = 0                   # 累加器置0
for i in range(1, 101):      # 遍历不大于100的非负整数
    result = result + 1 / i  # 将产生的每个整数依次加到累加器上
print(result)                # 输出结果

输出:

5.187377517639621

正负交错

  1. 设变量f = 1,在循环中在累加项前乘f,然后使f = -f,可实现累加项的正负交替
result = 0                       # 累加器置0
f = 1                            # 符号变量初值1
for i in range(1, 101, 2):       # 遍历不大于100的非负整数
    result = result + f * 1 / i  # 将产生的每个整数依次加到累加器上
    f = -f                       # 改变正负号
print(result)                    # 输出结果

输出:

0.7803986631477527
  1. 用 (−1) n 控制正负交替,用此方法时要注意指数n的值要取奇偶交替,如0,1,2,3,4…

编程要求
根据提示,在右侧编辑器补充代码,接受一个大于1的整数输入n,输出小于这个数的所有非负奇数的倒数正负交替运算的和。
1 - 1/3 + 1/5 - 1/7 +1/9 - 1/11 + …

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

测试输入:

101

预期输出:

0.7803986631477527

测试输入:

20

预期输出:

0.7604599047323508

提示:
range(n) 序列第一个数字是0,若用到 1/i 时,要用range(1, n)使首项从1开始。

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

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137461301
result = 0
f = 1
n = int(input())
for i in range(1,n,2):
    result = result + f * 1 / i
    f = -f
print(result)

第6关:输出正负交替数列前n项和

任务描述
本关任务:编写一个能计算并输出正奇数的倒数的正负交替数列前n项和的小程序。
1 - 1/3 + 1/5 - 1/7 +1/9 - 1/11 + …

相关知识
为了完成本关任务,你需要掌握:

  1. range
  2. 遍历range产生的整数
  3. 累加求和
  4. 正负交替

range
range 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。
range 参数必须为整数,如果省略 step 参数,则默认为 1。 如果省略 start 参数,则默认为 0。 如果 step 为零,则会引发 ValueError。
range 对象支持除拼接和重复外的通用序列操作

range(start, stop[, step])

遍历range产生的整数
通俗的理解,遍历range就是:把range中的整数都输出一遍。

示例如下:

产生奇数

for i in range(1, 10, 2):
    print(i, end=' ')

输出:

1 3 5 7 9 

产生偶数

for i in range(0, 10, 2):
    print(i, end=' ')

输出:

0 2 4 6 8 

累加求和
累加求和就是把range产生的整数一个一个的加到一起得到总和。

示例如下:

result = 0                   # 累加器置0
for i in range(1, 101):      # 遍历不大于100的非负整数
    result = result + 1 / i  # 将产生的每个整数依次加到累加器上
print(result)                # 输出结果

输出:

5.187377517639621

正负交替

  1. 设变量f = 1,在循环中在累加项前乘f,然后使f = -f,可实现累加项的正负交替
result = 0                       # 累加器置0
f = 1                            # 符号变量初值1
for i in range(100):             # 遍历不大于100的非负整数
    result = result + f * 1 / (2*i+1)  # 将产生的每个整数依次加到累加器上
    f = -f                       # 改变正负号
print(result)                    # 输出结果

输出:

0.7828982258896384
  1. 用 (−1)n 控制正负交替,用此方法时要注意指数n的值要取奇偶交替,如0,1,2,3,4…

编程要求
根据提示,在右侧编辑器补充代码,输入一个大于1的整数n,输出非负奇数的倒数正负交替运算的前n项和,并输出这个前n项和的4倍的结果,观察这个结果,思考一下这个值可能是什么。
1 - 1/3 + 1/5 - 1/7 +1/9 - 1/11 + …

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

测试输入:

100

预期输出:

0.7828982258896384
3.1315929035585537

测试输入:

1000

预期输出:

0.7851481634599485
3.140592653839794

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

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137461301
result = 0
n = int(input())
f = 1
for i in range(n):
    result = result + f * 1 /(2*i+1)
    f = -f
print(result)
print(result * 4)

第7关:输出不确定项数正负交替数列的的和

任务描述
本关任务:编写一个能计算并输出正奇数的倒数的正负交替数列和的小程序,输入一个表示精度的浮点数,当数列某一项的绝对值小于这个精度时终止,计算该项之前(不含该项)的正负交替运算的和,并输出和的4倍结果。
1 - 1/3 + 1/5 - 1/7 +1/9 - 1/11 + …

相关知识
为了完成本关任务,你需要掌握:

  1. while循环
  2. break

while循环
while循环语句一般用于循环次数不确定的情况下:

while 判断条件:  # 条件结果为False时结束循环
    语句块(使判断条件表达式的值趋向于False)
# 1/(2*i+1)大于10的-6次幂时进入循环,小于或等于10的-6次幂时结束循环
while 1/(2*i+1)>1e-6...

break
break语句用于while或for循环语句中,一般置于条件判定语句块中,当满足某条件时触发该语句的执行。
其作用是在循环次数未达到设定次数或未达到循环终止条件时跳出循环,提前结束语句所在层次的循环。

示例如下:

while True# 无限次循环
    if 判断条件:  # 条件结果为True时执行break结束循环
         break
    语句块
while True:               # 构建无限次循环
    if 1/(2*i+1)<=1e-6# 1/(2*i+1)小于或等于10的-6次幂时结束循环
        break
    ...

编程要求
根据提示,在右侧编辑器补充代码,输入一个小于1的浮点数n,计算非负奇数的倒数正负交替运算的和,直到某一项的绝对值小于或等于n,计算该项之前(不含该项)的正负交替运算的和,并输出计算和的4倍结果。

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

测试输入:

0.001

预期输出:

0.7848981638974463
3.139592655589785

测试输入:

0.00001

预期输出:

0.7853931633974454
3.1415726535897814

提示:
条件表达式 1/(2*i+1) 中的 i 在使用前要先有初值
在循环体中一定要改变i的值,使条件表达式的结果超于False

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

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137461301
n = float(input())
f = i = 1
result = 0
while True:
    if 1/i > n:
        result = result + f * (1 / i)
        i = i + 2
        f = -f
    else:
        break
print(result)
print(result * 4)

第8关:百钱百鸡

任务描述
本关任务:1只公鸡5枚铜钱,1只母鸡3枚铜钱,3只小鸡卖1枚铜钱。原来的问题是用100枚铜钱买100只鸡,铜钱必须用完一枚不剩(不许贪污),且要求公鸡、母鸡、小鸡每样都必须有,计算公鸡、母鸡、小鸡各多少。现在的问题是:
输入两个正整数m和n,用m枚铜钱购买n只鸡,花完全部的钱,且要求公鸡、母鸡、小鸡每样都必须有,计算公鸡、母鸡、小鸡各多少。
本题所给的测试数据保证一定有解:
每行输出一组结果,按鸡翁数、鸡母数、鸡雏数的顺序输出,数字之间用空格分隔;
有多组解时,按公鸡数量由少到多输出;

相关知识
为了完成本关任务,你需要掌握:

  1. 多重for循环
  2. 逻辑运算

多重for循环
每重循环缩进一个4个字符位:

for cock in range(1,100):            # 从1 开始遍历可能满足要求的公鸡数量
    for hen in range(1,100):         # 从1 开始遍历可能满足要求的母鸡数量
        for chicken in range(1,100): # 从1开始遍历可能满足要求的小鸡数量

逻辑运算
本题里有3个约束条件,要同时满足3个条件,中间用and连接就可以,将逻辑运算放到if分支语句中,同时满足三个条件的数就是答案:

  1. 购买的全部鸡的数量
cock + hen + chicken == 100
  1. 买各种鸡所花费的铜钱数量
5 * cock + 3 * hen + chicken // 3 == 100
  1. 隐藏约束条件,小鸡必须是3的倍数,这样铜钱才能完整的花完
chicken % 3 == 0

编程要求
根据提示,在右侧编辑器补充代码,输入两个正整数m和n,用m枚铜钱购买n只鸡,花完全部的钱,且要求公鸡、母鸡、小鸡每样都必须有,计算公鸡、母鸡、小鸡各多少,有多个答案时分行输出。

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

测试输入:

100
100

预期输出:

4 18 78
8 11 81
12 4 84

提示:
公鸡最大数量为m//5
母鸡最大数量为m//3
小鸡数量可用n-cock-hen计算
这样处理可以显著减少循环次数和循环层数,提高计算效率

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

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137461301
m = int(input())
n = int(input())
for cock in range(1, m//5):
    for hen in range(1, m//3):
        chicken = n - cock - hen
        if cock*5 + hen*3 + chicken//3 == m and chicken % 3 == 0:
            print(cock, hen, chicken)

第9关:m钱n鸡

任务描述
本关任务:1只公鸡5枚铜钱,1只母鸡3枚铜钱,3只小鸡卖1枚铜钱。输入两个正整数m和n,用m枚铜钱购买n只鸡,铜钱必须用完一枚不剩(不许贪污),且要求公鸡、母鸡、小鸡每样都必须有,计算公鸡、母鸡、小鸡各多少?

  • 若有解:
    输出公鸡数量最少的一组结果,按鸡翁数、鸡母数、鸡雏数的顺序输出,数字之间用空格分隔;
  • 若无解:
    输出“无解”

相关知识
为了完成本关任务,你需要掌握:

  1. 多重for循环
  2. 逻辑运算
  3. else子句

多重for循环
每重循环缩进一个4个字符位:

for cock in range(1,100):            # 从1 开始遍历可能满足要求的公鸡数量
    for hen in range(1,100):         # 从1 开始遍历可能满足要求的母鸡数量
        for chicken in range(1,100): # 从1开始遍历可能满足要求的小鸡数量

逻辑运算
本题里有3个约束条件,要同时满足3个条件,中间用and连接就可以,将逻辑运算放到if分支语句中,同时满足三个条件的数就是答案:

  1. 购买的全部鸡的数量
cock + hen + chicken == 100
  1. 买各种鸡所花费的铜钱数量
5 * cock + 3 * hen + chicken // 3 == 100
  1. 隐藏约束条件,小鸡必须是3的倍数,这样铜钱才能完整的花完
chicken % 3 == 0

else子句

  1. Python中的 for…in 和 while 循环都有一个可选的else子句。
  2. else子句与for 或while对齐。
  3. else 子句可以省略。
  4. 这个子句只有当循环以正常方式结束时(包括执行0次),else子句中的语句才能被执行。
  5. 如果在循环语句块中遇到break语句跳出循环或遇到return语句结束程序,则不会执行else 部分。

编程要求
根据提示,在右侧编辑器补充代码,在两行中分别输入两个正整数m和n,用m枚铜钱购买n只鸡,铜钱必须用完一枚不剩(不许贪污),且要求公鸡、母鸡、小鸡每样都必须有,计算公鸡、母鸡、小鸡各多少?

  • 若有解:
    输出公鸡数量最少的一组结果,按鸡翁数、鸡母数、鸡雏数的顺序输出,数字之间用空格分隔(若公鸡数量最少时有多组解,仅输出其中母鸡数量最少的一组);
  • 若无解:
    输出“无解”

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

测试输入:

100
100

预期输出:

4 18 78

测试输入:

1000
200

预期输出:

无解

提示:

  1. 用两层循环结合break和continue完成:
输入钱数和鸡数量
for ...:
    for ...:
        chicken = ...
        if ...:
            输出第一组满足条件的解
            break 提前结束循环
    else:   # 与内层for对齐,内层循环未遇到break时执行此else语句及子语句块中的语句
        continue  # 跳过本层循环后面的语句(break)
    break  #提前结束外层循环,内层循环遇到break时会跳过前面else子句,执行break此语句
else:  # 与外层for对齐,循环中未遇到break时执行此语句块中的程序
    内层未遇到break时也就是未找到解时输出"无解"
  1. 用标记结合if分支完成
输入钱数和鸡数量
flag = False               # 设定标记,False为无解,或solution = '无解'
for ...:                   # 从小到大遍历公鸡数量
   for ...:               # 从小到大遍历母鸡数量
      chicken = ...      # 小鸡数量计算得到
      if ... :
         flag = True    # 找到解后改变标记,或solution = '有解'
         print(...)     # 输出找到的第一组解
         break          # 结束内层循环
   if flag:       # 根据flag值是否为True判断是否找到解,或if solution == '有解'
       break      # 找到解时结束外层循环,否则继续执行外层循环
if not flag:       # 两层循环都结束时,如not flag值为True,表明未找到解,或if solution == '无解'
   print("无解")

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

参考代码

# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137461301
m = int(input())
n = int(input())
flag = False
for cock in range(1, m//5):
    for hen in range(1, m//3):
        chicken = n - cock - hen
        if cock*5 + hen*3 + chicken//3 == m and chicken % 3 == 0 and chicken > 0:
            flag = True
            print(cock, hen, chicken)
            break
    if flag:
        break
else:
    print("无解")
;