头歌python通关:流程控制

第1关:计算阶梯数

本关任务:爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。请编程求解该阶梯至少有多少阶。

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

测试输入: 预期输出: 119

def countlevel():
    '''
     
       :return:最小阶梯数
       '''
    #        请在此处添加代码       #
    # *************begin************#
    a=1
    while(1):
        if  a%7==0 and a%2==1 and a%3==2 and a%5==4:
            return a
        a=a+1
    # **************end*************#
    
print(countlevel())

第2关:打印三角形图案

本关任务:编写一个能打印三角形图案的函数。

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

测试输入:4; 预期输出:

  1. *
  2. **
  3. ***
  4. ****
  5. *
  6. **
  7. ***
  8. ****
  9. *
  10. ***
  11. *****
  12. *******

说明:程序会根据函数参数pow打印三个三角形,每个三角形pow行。

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

  1. *
  2. **
  3. ***
  4. ****
  5. *****
  6. ******
  7. *******
  8. ********
  9. *
  10. **
  11. ***
  12. ****
  13. *****
  14. ******
  15. *******
  16. ********
  17. *
  18. ***
  19. *****
  20. *******
  21. *********
  22. ***********
  23. *************
  24. ***************
def triangle(row):
    '''
       根据row值,打印三个三角形
       :row:三角形行数
       :return: 无返回值
       '''
    #        请在此处添加代码       #
    # *************begin************#
    for i in range(1,row+1):
        print('*'*i)
    for i in range(1,row+1):
        print(' '*(row-i)+'*'*i)
    for i in range(1,row+1):
        print(' '*(row-i)+'*'*(2*i-1))


    # **************end*************#
    
row = int(input())
triangle(row)

第3关:双色球选号

本关任务:编写一个能实现双色球选号的小程序。

编程要求

根据提示,在右侧编辑器补充代码,编写一个能实现双色球选号的小程序。 双色球选号由7个数字组成y,其中有6个红球,其号码的取值范围为[1,33],一个蓝球的取值范围为[1,16],要求6个红球从小到大排列,蓝球在最后输出。其输出格式为09 12 16 20 30 33 | 03。(注意,如双色球号码为3,则必须输出03)

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

测试输入:7; 输入说明:选7注 预期输出:

  1. 09 12 16 20 30 33 | 03
  2. 01 07 08 09 18 31 | 16
  3. 05 08 21 26 28 31 | 05
  4. 01 03 06 22 25 33 | 02
  5. 02 09 16 20 27 28 | 13
  6. 15 19 24 26 28 32 | 05
  7. 02 05 07 16 24 32 | 09
from random import randrange, randint, sample
import random
def display(balls):
    """
    按照题目所要求格式输出列表中的双色球号码

    :param balls:双色球号码列表,如[9,12,16,20,30,33 3]
    :print:输出格式为09 12 16 20 30 33 | 03
    :return: 无返回值

    """
    #        请在此处添加代码       #
    # *************begin************#
    red_balls=balls[:-1]
    blue_ball=balls[-1]
    formatted_balls=' '.join(f"{ball:02d}" for ball in sorted(red_balls))
    
    print(f"{formatted_balls} | {blue_ball:02d}",end=' \n')

    # **************end*************#


def random_select():
    """
    随机选择一组号码
    :return: 返回随机选择的这一组号码,如[9,12,16,20,30,33 3]
    """
    #        请在此处添加代码       #
    # *************begin************#
    red_balls=sample(range(1,34),6)
    blue_ball=randint(1,16)
    return red_balls+[blue_ball]
    # **************end*************#

#n为注数
def main(n):

    for i in range(n):
        display(random_select())
        
random.seed(3)
n = int(input())
if __name__ == '__main__':
    main(n)

第4关:英制单位英寸与公制单位厘米互换

本关任务:编写一个能实现单位英寸与公制单位厘米的互换的函数。

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

测试输入:3,cm;
预期输出:1.18英寸

测试输入:3,厘米;
预期输出:1.18英寸

测试输入:5,in;
预期输出:12.70厘米

测试输入:5,英寸;
预期输出:12.70厘米

测试输入:5,tt;
预期输出:请输入有效的单位

"""
英制单位英寸和公制单位厘米互换
"""

def cmin(value,unit):
    ''':param value:长度,
        :param unit:单位'''

    #        请在此处添加代码       #
    # *************begin************#
    if unit=='cm' or unit=='厘米':
        print('%.2f英寸'%(value/2.54))
    elif unit=='in' or unit=='英寸':
        print('%.2f厘米'%(value*2.54))
    else:
        print('请输入有效的单位')
    # **************end*************#
value=input()
value=int(value)
unit=input()
cmin(value,unit)

第5关:百分制成绩转换为等级制成绩

本关任务:编写一个能将百分制成绩转换为等级制成绩的函数。

编程要求

根据提示,在右侧编辑器补充代码,将百分制成绩转换为等级制成绩。 (90<=score<=100:A); (80<=socre<90:B); (70<=socre<80:C); (60<=socre<70:D); (score<60:E)

测试说明

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

测试输入:90.5; 预期输出:A

测试输入:82; 预期输出:B

def invert(score):
    '''
    百分制成绩转换为等级制成绩
    :param score:百分制分数
    :return: 等级(A,B,C,D,E)
    '''
    #        请在此处添加代码       #
    # *************begin************#
    if 90<=score<=100:
        return 'A'
    elif 80<=score<=90:
        return 'B'
    elif 70<=score<=80:
        return 'C'
    elif 60<=score<=70:
        return 'D'
    else :
        return 'E'
    # **************end*************#
    
score = float(input())
grad = invert(score)
print(grad)

第6关:约瑟夫环问题

本关任务:《幸运的基督徒》 有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到扔掉15个人。由于上帝的保佑,15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。(用1代表基督徒,0代表非基督徒)

根据提示,在右侧编辑器补充代码,计算并输出这30个人开始的站位。

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

测试输入: 预期输出: (非正确答案,举例输出格式如下:) 101010101010101010101010101010

'''《幸运的基督徒》
有15个基督徒和15个非基督徒在海上遇险,
为了能让一部分人活下来不得不将其中15个人扔到海里面去,
有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,
报到9的人就扔到海里面,他后面的人接着从1开始报数,
报到9的人继续扔到海里面,直到扔掉15个人。由于上帝的保佑,
15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。
'''

def main():
    #        请在此处添加代码       #
    # *************begin************#
    list1=list("1"*30)
    people=0
    dead=0
    count=1
    while dead<15:
        people=people%30
        if list1[people]=="1":
            if count==9:
                list1[people]="0"
                dead+=1
                count=1
            else:
                count+=1
        people+=1
    for i in range(30):
        print(list1[i],end='')
 # **************end*************#
if __name__ =='__main__':
    main()

你可能感兴趣的:(头歌,算法)