04简单循环
1. 用一行代码求和
类型: 简单循环
描述
输入一个正整数 n
,计算从 1
到 n
各数字的和,要求用一行代码实现。
输入
一个正整数 n
输出
一个正整数
示例
输入:100
输出:5050
标准答案
# 通过range 函数生成1到输入的数的整数序列
# 通过sum 函数对序列求和
print(sum(range(1,int(input())+1)))
2. 数列求和
类型:简单循环
描述
用户输入一个小于10的正整数,求1 + 12 + 123 + 1234 + …… 的前n项的和
输入
一个正整数 n(测试数据保证小于10)
输出
数列的和
示例
输入:5
输出:13715
标准答案
my_sum,temp = 0, 0
n = int(input())
for i in range(1,n + 1):
temp = temp * 10 + i # 每次循环使temp乘10加i
my_sum = my_sum + temp # 累加temp赋值给my_sum
print(my_sum)
3. 正负交错数列前n项和
类型:简单循环
描述
1-1/2+2/3-3/5+4/8-5/13+...的前n项和,n由用户输入(n>0),结果用str.format()方法保留小数点后6位数字输出。
输入格式
一个正整数
输出格式
前n项的和
示例
输入:12
输出:0.828448
标准答案
# 分析:
# 分子规律为:1,1,2,3,4,5,...,除首个数字外是自然数
# 分母规律为:1,2,3,5,8,13...,除首个数字外,后面每个数是前面两个数的加和
# 符号规律:正负交替
# 项数:1,2,3,...n共n项
# previous, current = 1, 1
# 1 2 1 1 + 1
# previous, current = current, previous + current
# previous, current = 1, 2
# 2 3 2 1 + 2
# previous, current = current, previous + current
# previous, current = 2, 3
# 3 5 3 2 + 3
# previous, current = current, previous + current
# previous, current = 3, 5
# ......
n = int(input())
result = 1 # 首项的值,作为累加初值
sign = -1 # 符号,第二项是负值,
previous, current = 1, 1 # 分母数字的初值,从第二项开始符合这个规律
for i in range(1, n): # 从1到n-1遍历n-1次
previous, current = current, previous + current # 下一个数值是前面两个数的加和
result = result + sign * i / current # 注意分子是 i
sign = -sign # 改变正负号
print('{:.6f}'.format(result))
4. 求数列前n项的平方和
类型:简单循环
描述
现有数列:1,2,3,4,……,n,计算并输出其前n项的平方和,即求:
1×1+2×2+3×3+……+n×n的和。
输入
输入一个正整数 n
输出
数列前n项的平方和
示例
输入
3
输出
14
标准答案
#1×1+2×2+3×3……的前n项和
n = int(input())
sum = 0
for i in range(1,n+1):
sum = sum + i * i
print(sum)
5. 输出0-9的数字
类型:简单循环
描述
在同一行内输出 0-9 中的前 n 个数字,输出的每个数字后跟一个空格。
输入格式
输入一个不大于10的正整数 n
输出格式
在同一行中输出 0~(n-1) 的数字
示例
输入:5
输出:0 1 2 3 4
标准答案
n=int(input())
for i in range(n):
print(i,end=' ')
6. 人生苦短我用python
类型: 简单循环
描述
输入一个小于等于12的整数n,逐个输出字符串人生苦短我用python
中前n个字符,每个字符后输出一个半角逗号和一个空隔。
输入
一个小于等于12的整数n
输出
人生苦短我用python
中前n个字符
示例
输入:
2
输出:
人, 生,
标准答案
n=int(input())
s = '人生苦短我用python'
for i in range(n):
print(s[i],end = ', ')
7. 2的n次方
类型:简单循环
描述
计算并输出 2 的 n 次方,n 由用户输入 。
输入格式
输入一个非负整数 n
输出格式
以整数类型输出2的 n 次方
示例
输入:5
输出:32
标准答案
n = eval(input())
print(pow(2,n)) #pow(x,y[,z])同x**y%z,常省略z,用于计算x的y次方
8. 十进制整数转二进制
类型:简单循环
描述
十进制整数转二进制的方法是:除以2,取出余数,商继续除以2,直到得到0为止,将取出的余数逆序即可得到对应的二进制数的各位。 例如:22转二进制的计算过程:
22 / 2 11 余0
11/2 5 余 1
5 /2 2 余 1
2 /2 1 余 0
1 /2 0 余 1
得到22的二进制是10110
输入格式
输入一个非负整数
输出格式
输出对应的二进制数
示例
输入:1999
输出:11111001111
标准答案
num = int(input())
s=''
if num == 0:
s = '0'
while num != 0:
s = s + str(num % 2) # 将num对2取余的结果转字符串拼接到s
num = num // 2
print(s[::-1])
# 逆序输出字符串
9. 分数序列求和
类型:简单循环
描述
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前 n
项之和, n
由用户输入。
输入格式
输入一个正整数
输出格式
前n
项和
示例
输入:5
输出:8.392
标准答案
# 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前n项之和,n由用户输入。
# 除了首项,分子为前一项分子分母之和,分母为前一项分子
n = int(input())
sum_of_n = 0
a, b = 2, 1
for i in range(1, n + 1):
sum_of_n = sum_of_n + a / b
b, a = a, a + b
print(round(sum_of_n, 3))
10. 棋盘放米
类型:简单循环
描述
相传古代印度国王舍罕要褒赏他的聪明能干的宰相达依尔 (国际象棋发明者),问他需要什么?
达依尔回答说:“国王只要在国际象棋的棋盘第一个格子里放一粒麦子,第二个格子里放两粒,第三个格子里放四粒,按此比例以后每一格加一倍,一直放到64格(国际象棋棋盘是8×8=64格),我就感恩不尽,其他的我什么也不要了。”
国王想:“这有多少,还不容易!”让人扛来一袋小麦,但不到一会儿全用没了,再来一袋很快又没有了,结果全印度的粮食全部用完还不够,国王纳闷,怎样也算不清这笔账,请你帮国王计算一下,放到第 n (1<= n <=64)格时,共需多少粒麦子,写出程序。
输入格式
输入一个小于等于64的正整数 n
输出格式
一个正整数,表示多少粒麦子
示例 1
输入:1
输出:1
示例 2
输入:16
输出:65535
标准答案
#棋盘64格,第1格1粒,第2格2粒,第3格4粒……放满64格需要多少米
#2^0+2^1+2^2+……+2^63
print(sum([2**i for i in range(64)]))
#alist=[2**i for i in range(64)]
alist=[]
for i in range(64):
alist.append(2**i)
print(sum(alist))
print(int('1'*64,2))
'''
把64个1这个二进制类型的安符串转换志整型
int(x, base=10),base缺省值为10,也就是说不指定base的值时,函数将x按十进制处理。
1. x 可以是数字或字符串,但是base被赋值后 x 只能是字符串
2. x 作为字符串时必须是 base 类型,也就是说 x 变成数字时必须能用 base 进制表示
'''
n = int(input())
mySum = 0
for i in range(n):
t=2 ** i
mySum = mySum+t
print(mySum)
11. 百钱买百鸡A
类型:简单循环
描述
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,如果要求鸡翁、鸡母、鸡雏都不为零,问鸡翁、鸡母、鸡雏各几何?
输入格式
该题目没有输入
输出格式
每行输出一组结果,按鸡翁数、鸡母数、鸡雏数的顺序输出,数字之间用空格分隔;
如果有多组解时,按鸡翁数量由少到多输出;
示例
输出:
x xx xx
x xx xx
xx x xx
标准答案
for cock in range(1, 101): # 公鸡数量不为0且小于或等于100
for hen in range(1, 101): # 母鸡数量不为0且小于或等于100
for chicken in range(1, 101): # 小鸡数量大于0小于等于100且是3的倍数
if chicken % 3 == 0:
if cock + hen + chicken == 100 and 5 * cock + 3 * hen + chicken // 3 == 100:
print(cock, hen, chicken) # 遇到满足条件的数字组合就输出
12. 计算阶乘
类型:简单循环
描述
用户输入一个非负整数 n,计算并输出其阶乘。
n!=1×2×3×...×n.
输入格式
输入一个非负整数 n
输出格式
n 的阶乘
示例1
输入:5
输出:120
示例2
输入:0
输出:1
标准答案
#用户输入一个正整数,计算其阶乘
import math
#print(math.factorial(eval(input())))
n = int(input())
fact = math.factorial(n)
print(fact)
fact = 1
n = int(input())
for i in range(1,n + 1):
fact = fact * i
print(fact)
13. 阶乘求和
类型:简单循环
描述
输入一个正整数n,计算 1!+2!+3!+...+n! 的和并输出。
输入
一个正整数n
输出
从1到n每个数的阶乘的和
示例
输入:5
输出:153
标准答案
# 计算1!+2!+3!+。。。+n!
def sum_factorial(n):
total, t = 1, 1
for i in range(2, n + 1):
t = t * i
total = total + t
return total
n = int(input())
print(sum_factorial(n))
# 函数式编程
def factorial(n): # 阶乘函数
fact = 1
for i in range(1, n + 1):
fact = fact * i
return fact
def sum_factorial1(n): # 累加函数
total = 0
for i in range(1, n + 1):
total = total + factorial(i)
return total
print(sum_factorial1(n))
# 使用内置函数更简单,但效率略低,规模大时有体现
# from math import factorial
# print(sum(map(factorial,range(1,n+1))))
14. 兔子繁殖问题
类型:简单循环
描述
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,用户输入一个月份数,计算并在一行内输出该月的兔子总对数以及前一个月与该月兔子数量的比值(计算并观察一下这个比值的数值是多少),比值结果保留小数点后3位,数字间用空格分隔。
输入格式
一个大于2的正整数
输出格式
在一行内输出两个数,数之间用空格隔开。第一个是整数,表示本月的兔子的对数,第二个是浮点数(严格保留小数点后三位),表示前一个月兔子数与本月兔子数的比值。
示例
输入:5
输出:5 0.600
标准答案
# 分析:
# 第1个月兔子数为1对,第2个月1对,第3个月新出生1对(共2对),第4个月再出生1对(共3对),第5个月出生2对(共5对),
# 第6个月出生3对(共8对),第7个月出生5对(共13对),第8个月出生8对(共21对)
# 得到如下数列:1,1,2,3,5,8,13,21...
# 寻找规律:从第3项开始,每一项都等于前2项之和
# 在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
# 每次遍历时a,b值的变化如下:
# 1,1,2,3,5,8,13,21,34,55...
# a,b
# 1,1,2,3,5,8,13,21,34,55...
# a,b
# 1,1,2,3,5,8,13,21,34,55...
# a,b
# 1,1,2,3,5,8,13,21,34,55...
# a,b
# 1,1,2,3,5,8,13,21,34,55...
# a,b
month = int(input()) # 输入整数的月份
a, b = 1, 1 # a,b分别指向前两个月的兔子数量
for i in range(3, month + 1): # 遍历从3到输入的月份数,每递推一次,把a,b依次指向后面一个月的兔子数量
a, b = b, a + b # a + b 为前两个月兔子数的加和,为当前月份兔子数,每递推一次,
print(f'{b} {a / b :.3f}')
15. 奇数数列求和
类型:简单循环
描述
输入一个正整数 n,求数列1,3,5,……,(2n-1)的前n项的和。
输入格式
输入一个正整数 n
输出格式
数列的和
示例
输入:5
输出:25
标准答案
n = int(input())
print(sum(range(1,2*n,2))) # 步长为2
#或
#求1+3+5+……+(2n-1)前n项和
n = int(input())
sum = 0
for i in range(1,n + 1):
sum = sum + (2 * i - 1)
print(sum)
16. 统计学生平均成绩及及格人数
类型:简单循环
描述
编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
输入格式
在一行中给出n个非负整数,即这n位学生的成绩,其间以空格分隔。
输出格式
按照以下格式输出:
average = 成绩均值 count = 及格人数
示例
输入:
77 54 92 73 60
输出:
average = 71.2
count = 4
标准答案
score = list(map(int, input().split())) # 通过map()和list()函数把用户输入转化成int列表
average = sum(score) / len(score) # 用总和除以数量得到平均分
count = len(list(x for x in score if x >= 60)) # 通过列表推导式得到大于60分的列表然后用len()函数得到数量
print("average = {}".format(average))
print("count = {}".format(count))
17. 求x的y次幂
类型:简单循环
描述
在两行中分别输入x和y两个数,输出x的y次方。
输入格式
在两行中分别输入x和y两个数
输出格式
输出x的y次方
输入输出示例 输入 输出
示例 1
输入:
2
5
输出:
32
示例 2
输入:
0.5
6
输出:
0.015625
标准答案
a=eval(input())
b=eval(input())
print(pow(a,b))
18. 有趣的算式1-987654321
类型:简单循环
描述
尝试用最简洁的代码实现下面的输出。
1 x 8 + 1 = 9
12 x 8 + 2 = 98
123 x 8 + 3 = 987
1234 x 8 + 4 = 9876
12345 x 8 + 5 = 98765
123456 x 8 + 6 = 987654
1234567 x 8 + 7 = 9876543
12345678 x 8 + 8 = 98765432
123456789 x 8 + 9 = 987654321
标准答案
for i in range(1, 10):
x = int(''.join(map(str, range(1, i + 1))))
print(f'{x} x 8 + {i} = {x * 8 + i}')
19. 有趣的算式2-1111111111
类型:简单循环
描述
用简洁的代码输出以下算式:
1 x 9 + 2 = 11
12 x 9 + 3 = 111
123 x 9 + 4 = 1111
1234 x 9 + 5 = 11111
12345 x 9 + 6 = 111111
123456 x 9 + 7 = 1111111
1234567 x 9 + 8 = 11111111
12345678 x 9 + 9 = 111111111
123456789 x 9 +10= 1111111111
标准答案
for i in range(1, 10):
x = int(''.join(map(str, range(1, i + 1))))
print(f'{x} x 9 + {i + 1} = {x * 9 + (i + 1)}')
20. 有趣的算式3-888888888
类型:简单循环
描述
用简洁的代码输出以下算式
9 x 9 + 7 = 88
98 x 9 + 6 = 888
987 x 9 + 5 = 8888
9876 x 9 + 4 = 88888
98765 x 9 + 3 = 888888
987654 x 9 + 2 = 8888888
9876543 x 9 + 1 = 88888888
98765432 x 9 + 0 = 888888888
标准答案
for i in range(9, 1, -1):
x = int(''.join(map(str, range(9, i - 1, -1))))
print(f'{x} x 9 + {i - 2} = {x * 9 + (i - 2)}')
21. 有趣的算式4-12345678987654321
类型:简单循环
描述
用简洁的代码输出以下算式
1 x 1 = 1
11 x 11 = 121
111 x 111 = 12321
1111 x 1111 = 1234321
11111 x 11111 = 123454321
111111 x 111111 = 12345654321
1111111 x 1111111 = 1234567654321
11111111 x 11111111 = 123456787654321
111111111 x 111111111 = 12345678987654321
标准答案
for i in range(1, 10):
x = int('1' * i)
print(f'{x} x {x} = {x * x}')
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python123题库—04简单循环 - Python技术站