第1关:表达式计算

任务描述

####编程要求 直接在print_()中填入正确的表达式,输出该题的答案,答案占一行,无需空行!

参考答案:

def print_(x):
    if type(x) == float:
        print("%.4f" % x)
    else:
        print(x)

#请在print_函数中输入正确的表达式
#**********Program**********
print_(1.01**3+0.99**2>1.01)
#**********  End  **********

第2关:基本数学函数

任务描述

编程要求

右侧代码编辑区已设置好具体输出格式,你只需要在指定位置填写python代码即可。

参考答案:

from math import *

def print_(x):
    if type(x) == float:
        print("%.4f" % x)
    else:
        print(x)

#请在print_语句内完成题目所需的表达式
#**********Program**********
print_(sinh(0.25))

print_((e**0.25-e**-0.25)/2)
#**********  End  **********

第3关:地球上两点距离计算

任务描述

编程要求

输出格式已经在print_()函数中进行了定义,完成计算后调用print_()函数进行结果的输出!

参考答案:

from math import *

def print_(x):
    if type(x) == float:
        print("%.4f" % x)
    else:
        print(x)
        
for (x1,y1,x2,y2) in [(48.87,-2.33,37.8,-122.4),(40.89,116.50,37.8,-122.4),(40.89,116.50,48.87,-2.33)]:
    # 请在下面编写代码
    x1=radians(x1)
    y1=radians(y1)
    x2=radians(x2)
    y2=radians(y2)
    dist=69.1105*1.609*degrees(acos(sin(x1)*sin(x2)+cos(x1)*cos(x2)*cos(y1-y2)))
    
    # 请不要修改下面的代码
    print_(dist)

第4关:找最大最小数

任务描述

裁判对每个孩子的表现给一个分数(最高分100,最低分0)。总评分的计算规则是:去掉最高分(如果有一个以上的最高分,只去掉一个),去掉最低分(如果有一个以上的最低分,只去掉一个),剩下分数的平均分作为总评分。编程输出总评分(四舍五入,保留2位小数)。 例如: 5个分数分别为99、96、93、80、94,则程序输出为:94.33 5个分数分别为42, 71, 70, 77, 7,则程序输出为:61.0 请在programend之间编写ave( )函数用于实现对平均分的计算,返回的结果建议用round()函数进行处理,结果保留2位小数。 round()用法: a = 12.4584 b = round(a,2) 则b = 12.46 a = 12.000 b = round(a,2) 则b = 12.0

编程要求

对于计算结果,保留两位小数,如果后两位均为0,则输出一个0即可,如上述的61.0!

参考答案:

from math import *
import random

#请完成此函数,求解平均分(保留两位小数,若最后一位小数为0,可忽略)
#**********Program**********
def ave(list0):
    list0.sort()
    del list0[0]
    del list0[3]
    return round(sum(list0)/3.00,2)
#**********  End  **********

#请不要修改下面的代码
if __name__ == '__main__':
    for score_list in [[65, 4, 94, 71, 0], [99, 27, 76, 88, 68],
                       [42, 71, 70, 77, 7], [70, 72, 11, 69,36], 
                       [3, 53, 3, 54, 29]]:
        score = ave(score_list)
        print(score)

第5关:整数的各位数字处理

任务描述

函数count_digit统计一个非负整数n中某个数字d出现的次数并返回,例如12335中3出现的次数为2,7出现的次数为0。 实现该函数。

编程要求

具体输出格式已经设定好,只需要设定函数返回值即可。 count_digit 统计n中数字d的出现次数,例如出现0次则返回0,出现100次则返回100。

参考答案:

from math import *
import random
import sys
#请完成此函数,统计一个非负整数n中数字d出现的次数并返回
#**********Program**********
def count_digit(n,d):
    n=str(n)
    d=str(d)
    return n.count(d)
#**********  End  **********

#请不要修改下面的代码
if __name__ == '__main__':
    n = [
        8779412003529881091, 6119903205806761585, 8337567880965015796,
        7251609318673317735, 1163206447991023362
    ]
    d = [7, 4, 6, 9, 3]
    for i in range(0, 5):
        num = count_digit(n[i], d[i])
        print(num)

第6关:身份证合法性判断

任务描述

一个合法的身份证号码由17位地区、生日编号和顺序编号加1位校验码(第18位)组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10, 5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系通过Z值获取对应的校验码M的值: Z:0 1 2 3 4 5 6 7 8 9 10 M:1 0 X 9 8 7 6 5 4 3 2 编写函数valid判定一个身份证号码是否有效,有效则返回1,否则返回0。例如”650402199007055298”是一个有效的身份证号,返回1;而”53072419770421191”则不是,则返回0. 实现该函数。

编程要求

具体输出格式已经设定好,只需要函数返回值即可。 函数valid根据传入身份证号进行判断,若有效则返回1,否则返回0.

参考答案:

from math import *

#请完成此函数,判定一个身份证号码是否有效,有效则返回1,否则返回0
#**********Program**********
def valid(ID):
    str0=ID[0:17]
    if len(ID)!=18 or not str0.isdigit():
        return 0
    xiaoyan=0
    list0=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
    for i in range(17):
        xiaoyan+=int(str0[i])*list0[i]
    Z=xiaoyan%11
    if Z==0 and Z==1:
        M=str(1-Z)
    elif Z==2:
        M='X'
    else:
        M=str(12-Z)
    if M==ID[17]:
        return 1
    else:
        return 0
#**********  End  **********

#请不要修改下面的代码
if __name__ == '__main__':
    ID_list = [
        '330702196302260412X', '34052419800101001X', '340524198001010011',
        '3307021963X226041X', '33070219630226041X'
    ]
    for i in range(0, 5):
        print(valid(ID_list[i]))

第7关:字符串处理

任务描述

编写函数count统计以‘#’结束的字符串中每种数字字符的个数和其它字符的个数。函数参数str是以‘#’结束的字符串,统计结果存入数组c中,字符0-9的个数分别存入c[0]-c[9]中,其它字符个数存入c[10]中。如”123hgasf342240#”中数字0-9的个数分别为1,1,3,2,2,0,0,0,0,0个,其它字符个数为5。 完成函数count的编写。

编程要求

输入字符串为”123hgasf342240#”,则输出为统计结果列表: [1,1,3,2,2,0,0,0,0,0]

参考答案:

from math import *
import random
import sys
#请完成此函数,统计以‘#’结束的字符串中每种数字字符的个数和其它字符的个数
#**********Program**********
def count(str0,c):
    for i in range(len(str0)-1):
        if str0[i].isdigit():
            c[int(str0[i])]+=1
        else:
            c[10]+=1
    return 
#**********  End  **********

#请不要修改下面的代码
if __name__ == '__main__':
    str_list = [
        'C,/7>?2C650>?#', 'F=C?D(,27,.&38$#', '/B738CF8>F1E&>D#',
        '%/<9&=,55$3#', '+=7$+C=/A&#'
    ]
    for i in range(0, 5):
        c = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        count(str_list[i], c)
        print(c)

第8关:二维数组处理

任务描述

用Python的列表存储了二维实数数组,编程输出最大的值以及该元素所在位置(如果有多个元素的值均为最大,则输出第一个最大元素的位置)。 例如:二维实数数组[[1, 2, 3, 4, 5], [6, 7, 8, 9,100]] 最大的值是100,所在位置为[1][4]。

编程要求

输出格式如下: 100 1 4

说明:最大值占一行;第二行依次输出元素的行号,空格,列号。

参考答案:

from math import *
import random
import sys

if __name__ == '__main__':
    a = [[-96.75406736839875, 112.7935088305457, -233.3428136002151, 47.829216619513204],
         [-256.7530027202153, 162.72640239449578, 166.09967176773966, 107.14889508344174], 
         [69.43600990883988, 37.27554983543564, 139.29912042759844, 126.88684145170981], 
         [275.9968464170189, 102.96998985338536, 278.03988044640823, -185.49830120316162],
         [-232.95272551814065, 122.52826367566519, 289.4673734003288, -299.829647403839], 
         [217.0741605740095, 1.1891511881970018, 183.20279885926897, 283.7484913702709], 
         [-0.2667355625993082, -194.83738998408109, 32.12300723531075, 275.9465332547651], 
         [-102.71352700566422, 95.17176558146599, -141.43257927047773, 173.30335198695275], 
         [-124.54607782277029, -137.4438601733702, 237.34335287349904, -5.671864434324959]]
    
    #计算最大值以及对应的坐标
    #**********Program**********
    max=0
    r_index,c_index=-1,-1
    for i in range(len(a)):
        for j in range(4):
            if a[i][j]>max:
                max=a[i][j]
                r_index=i
                c_index=j
    #**********  End  **********
    print(max)
    print(r_index, c_index)

第9关:体重指数计算

任务描述

计算体重指数。 ######男女标准体重有点不一样: 男士标准体重=(身高cm-100)0.9(KG), 女士标准体重=(身高cm-100)*0.9(KG)-2.5(KG) ######判断体重的标准是(男女一样): 正常体重:标准体重加减10%(含等于) 轻度胖瘦:标准体重加减(10%,20%](含20%,不含10%) 中度胖瘦:标准体重加减(20%,40%](含40%,不含20%) 重度胖瘦:标准体重加减超过40%(不含40%) *函数f根据一个人的信息计算体重指数**。其返回值为: 0 - 正常体重;1 - 轻度胖;-1 - 轻度瘦;2 - 中 度胖; -2 - 中度瘦;3 - 重度胖;-3 - 重度瘦。 例如: 一个60kg的176cm的男性为轻度瘦,返回-1; 一个60kg的176cm的女性则为正常体重,返回0。 完成函数f的编写,输入一个人的性别(0:女性 1:男性),身高,体重,返回其体重指数。

编程要求

输出格式已经写好,只需要设定函数返回值即可。 函数f返回体重指数,以0,1,2,3,-1,-2,-3表示。 一个60kg的176cm的男性为轻度瘦,返回-1; 一个60kg的176cm的女性则为正常体重,返回0。

参考答案:

from math import *
import random

#请完成此函数,根据一个人的信息计算体重指数
#**********Program**********
def f(sex,height,weight):
    if sex==1:
        bztz=(height-100)*0.9
    elif sex==0:
        bztz=(height-100)*0.9-2.5
    jiajian=(weight-bztz)/bztz
    if abs(jiajian)<=0.1:
        return 0

    if jiajian<0:
        i=-1
    else:
        i=1

    if 0.1<abs(jiajian)<=0.2:
        return 1*i
    elif 0.2<abs(jiajian)<=0.4:
        return 2*i
    else:
        return 3*i
#**********  End  **********

#请不要修改下面的代码
if __name__ == '__main__':
    total = [[1, 164.62, 45.95], [0, 185.35, 69.06], [0, 170.0, 66.6], [1, 163.81, 60.0], [0, 186.61, 65.55]]
    for i in range(0, 5):
        print(f(total[i][0],total[i][1],total[i][2]))

————————分割线————————

本人python小白一枚,对python中的许多方法,函数的使用还不熟练,像第9关,应该还可以再改进,如还有什么不妥之处,还请大佬指点!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐