4.循环结构

4.循环结构

当一件事需要重复去做时,就使用循环结构。

一. for 循环

1. range()函数

range(开始,结束,步长),如果range()中只放一个数字,就是获得0到这个数字减1

#输出1-10之间所有的数字
for i in range(1,11):
      print(i,end=' ')

2. for循环输出字符串

a = '我是故夏'
for i in a:
      print(i,end=',')

二, while 循环

1. while循环

格式:

while 条件:
	条件成立执行的语句
a = 1

while a<=10:
      print(a)
      a+=1

2. while - else 循环

格式:

while 条件:
	条件成立执行的语句
else:
    条件不成立执行的语句
i = 1
while i <=10:
      print(i)
      i+=1
else:
      print("输出结束啦")

三. 死循环

i = 1
while i:
      print(i)

四. break 和 continue

break:结束循环

i = 1
while i<=10:
      print(i)
      if i == 5:
            break
      i+=1

continue:结束本次循环

for i in range(1,11):
      if i == 5:
            continue
      print(i)

五.循环嵌套

外层循环执行一次,内层循环执行多次

#****
#****
#****
for i in range(3): #外层循环控制行
      for i in range(4): #内层循环控制列
            print('*',end='')
      print()

六. 循环结构练习

1.for循环求和

2016:【例4.1】for循环求和

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 82181     通过数: 51346
【题目描述】
利用for循环。计算输出1+2+3+...+n
的和。

【输入】
输入n
。

【输出】
如题述,之和。

【输入样例】
10
【输出样例】
55
【提示】
【数据规模及约定】
对于100%的数据,1≤n≤100。
n = int(input())
a = 0
for i in range(1,n+1):
      a+=i
print(a)

2.输出偶数

【题目描述】
按照由小到大的顺序,输出1∼n
之间的所有偶数。

【输入】
输入n
。

【输出】
输出为一行,各个偶数之间用一个空格隔开。

【输入样例】
10
【输出样例】
2 4 6 8 10
【提示】
【数据规模及约定】
对于所有数据,1≤n≤100
n = int(input())

for i in range(1,n+1):
      if i % 2 == 0:
            print(i,end=' ')

3.输出奇偶数之和

【题目描述】
利用for循环,分别输出1∼n
之间的所有奇数的和、偶数的和。

【输入】
输入n
。

【输出】
输出为一行,两个数(用一个空格隔开),偶数之和与奇数之和。

【输入样例】
10
【输出样例】
30 25
n = int(input())
a = 0
b = 0

for i in range(1,n+1):
      if i % 2 == 0:
            a+=i
      else:
            b+=i
print(a,end=' ')
print(b)

4.求阶乘

【题目描述】
利用for循环求n!
的值。

提示,n!=1×2×...×n
。

【输入】
输入一个正整数n
。

【输出】
输出n!
的值。

【输入样例】
4
【输出样例】
24
n = int(input())
b = 1
for i in range(1,n+1):
      b*=i
print(b)

5.求平均年龄

【题目描述】
班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。

【输入】
第一行有一个整数n(1<= n <= 100),表示学生的人数。其后n行每行有1个整数,表示每个学生的年龄,取值为15到25。

【输出】
输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。

【输入样例】
2
18
17
【输出样例】
17.50
n = int(input())

b = 0
for i in range(1,n+1):
      a = int(input())
      b+=a
      
print("%.2f"%(b/n))

6.均值

【题目描述】
给出一组样本数据,包含n个浮点数,计算其均值,精确到小数点后4位。

【输入】
输入有两行,第一行包含一个整数n(n小于100),代表样本容量;第二行包含n个绝对值不超过1000的浮点数,代表各个样本数据。

【输出】
输出一行,包含一个浮点数,表示均值,精确到小数点后4位。

【输入样例】
2
1.0 3.0
【输出样例】
2.0000
n = int(input())
a = list(map(float,input().split()))
b = 0
for i in a:
     b+=i
print("%.4f"%(b/n))

7.求整数的和与均值

【题目描述】
读入n(1≤n≤10000)个整数,求它们的和与均值。

【输入】
输入第一行是一个整数n,表示有n个整数。

第2~n+1行每行包含1个整数。每个整数的绝对值均不超过10000。

【输出】
输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔。

【输入样例】
4
344
222
343
222
【输出样例】
 1131 282.75000
n = int(input())
b = 0

for i in range(1,n+1):
      a = int(input())
      b+=a
print(b,end=' ')
print("%.5f"%(b/n))

8.最高的分数

【题目描述】
孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙老师解决这个问题吗?

【输入】
输入两行,第一行为整数n(1 <= n < 100),表示参加这次考试的人数.第二行是这n个学生的成绩,相邻两个数之间用单个空格隔开。所有成绩均为0到100之间的整数。

【输出】
输出一个整数,即最高的成绩。

【输入样例】
5
85 78 90 99 60
【输出样例】
99
n = int(input())
a = list(map(int,input().split()))
max1 = 0
for i in a:
      if i > max1:
            max1 = i
            
print(max1)

9.最大跨度值

题目描述】
给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值 = 最大值减去最小值)。

【输入】
一共2行,第一行为序列的个数n(1 <= n <= 1000),第二行为序列的n个不超过1000的非负整数,整数之间以一个空格分隔。

【输出】
输出一行,表示序列的最大跨度值。

【输入样例】
6
3 0 8 7 5 9
【输出样例】
9
n = int(input())
a = list(map(int,input().split()))
max1 = 0
min1 = 1000

for i in a:
    if i > max1:
        max1 = i
    if i < min1:
        min1 = i
print(max1 - min1)

10.整数的个数

【题目描述】
给定k(1<k<100)个正整数,其中每个数都是大于等于1,小于等于10的数。写程序计算给定的k个正整数中,1,5和10出现的次数。

【输入】
输入有两行:第一行包含一个正整数k,第二行包含k个正整数,每两个正整数用一个空格分开。

【输出】
输出有三行,第一行为1出现的次数,第二行为5出现的次数,第三行为10出现的次数。

【输入样例】
5
1 5 8 10 5
【输出样例】
1
2
1
k = int(input())
n = list(map(int,input().split()))
b = 0
c = 0
d = 0

for i in n:
    if i == 1:
        b+=1
    if i == 5:
        c+=1
    if i == 10:
        d+=1
print(b)
print(c)
print(d)

11.与指定数字相同的数的个数

【题目描述】
输出一个整数序列中与指定数字相同的数的个数。输入包含2行:第1行为N和m,表示整数序列的长度(N<=100)和指定的数字;第2行为N个整数,整数之间以一个空格分开。输出为N个数中与m相同的数的个数。

【输入】
第1行为N和m,表示整数序列的长度(N<=100)和指定的数字, 中间用一个空格分开;

第2行为N个整数,整数之间以一个空格分开。

【输出】
输出为N个数中与m相同的数的个数。

【输入样例】
3 2
2 3 2
【输出样例】
2
n,m = list(map(int,input().split()))
a = list(map(int,input().split()))
b = 0

for i in a:
    if i == m:
        b+=1
print(b)

12.菲波那契数

【题目描述】
菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。

【输入】
输入一行,包含一个正整数k。(1 ≤ k ≤ 46)

【输出】
输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小。

【输入样例】
19
【输出样例】
4181
k = int(input())
a1 = 1
a2 = 1
a3 = 1

for i in range(3,k+1):
    a3 = a1+a2
    a1 = a2
    a2 = a3
print(a3)

13.鸡尾酒疗法

【题目描述】
鸡尾酒疗法,指“高效抗逆转录病毒治疗”。人们在鸡尾酒疗法的基础上又提出了很多种改进的疗法。为了验证这些治疗方法是否在疗效上比鸡尾酒疗法更好,可用通过临床对照实验的方式进行。假设鸡尾酒疗法的有效率为x,新疗法的有效率为y,如果y-x大于5%,则效果更好,如果x-y大于5%,则效果更差,否则称为效果差不多。下面给出n组临床对照实验,其中第一组采用鸡尾酒疗法,其他n-1组为各种不同的改进疗法。请写程序判定各种改进疗法效果如何。

【输入】
第一行为整数n(1<n<=20);其余n行每行两个整数,第一个整数是临床实验的总病例数(小于等于10000),第二个疗效有效的病例数。这n行数据中,第一行为鸡尾酒疗法的数据,其余各行为各种改进疗法的数据。

【输出】
有n-1行输出,分别表示对应改进疗法的效果:如果效果更好,输出better;如果效果更差,输出worse;否则输出same。

【输入样例】
5
125 99 
112 89
145 99
99 97
123 98
【输出样例】
same
worse
better
same
n = int(input()) #n代表有几组数据
b = [] #存放结果,

for i in range(n): #有几组数据,就重复输入几次
    a,s = list(map(int,input().split())) #一行输入两个值,同时转换
    if i == 0:
        x = s / a
    else:
        y = s / a
        if y - x > 0.05:
            b.append("better") 
        elif x - y > 0.05:
            b.append("worse")
        else:
            b.append("same")
for i in b:
    print(i)

14.救援

【题目描述】
救生船从大本营出发,营救若干屋顶上的人回到大本营,屋顶数目以及每个屋顶的坐标和人数都将由输入决定,求出所有人都到达大本营并登陆所用的时间。

在直角坐标系的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。坐标系中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表示。救生船每次从大本营出发,以速度50 米/分钟驶向下一个屋顶,达到一个屋顶后,救下其上的所有人,每人上船1分钟,船原路返回,达到大本营,每人下船0.5分钟。假设原点与任意一个屋顶的连线不穿过其它屋顶。

【输入】
第一行,一个整数,表示屋顶数n。接下来依次有n 行输入,每一行上包含两个表示屋顶相对于大本营的平面坐标位置的实数(单位是米)、一个表示人数的整数。

【输出】
救援需要的总时间,精确到分钟(向上取整)。

【输入样例】
1
30 40 3
【输出样例】
7
import math
n = int(input())    #屋顶数n
zh = 0
for i in range(n):
    a,b,c = list(map(float,input().split()))  #x坐标 y坐标 人数
    zh += math.sqrt(a*a+b*b)*2/50+c*1+c *0.5
if zh > int(zh):
    print(int(zh)+1)
else:
    print(zh)

15.津津的储蓄计划

【题目描述】
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。

现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

【输入】
包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。

【输出】
只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。

【输入样例】
290
230
280
200
300
170
340
50 
90 
80 
200
60
【输出样例】
-7
【提示】
【[样例2】

输入:

290
230 
280 
200 
300 
170 
330 
50 
90 
80 
200 
60
输出:

1580

posted @ 2023-07-30 15:23  sqy2010  阅读(187)  评论(0)    收藏  举报