第1关:函数的参数使用

  • 定义函数plus,功能是对参数(一个列表)中的数值元素进行累加,列表中的元素个数不确定;
  • 函数返回累加结果。
#创建一个空列表numbers
numbers = []

#str用来存储输入的数字字符串,lst1是将输入的字符串用空格分割,存储为列表
str = input()
lst1 = str.split(' ')

#将输入的数字字符串转换为整型并赋值给numbers列表
for i in range(len(lst1)):
   numbers.append(int(lst1.pop()))

# 请在此添加函数plus的代码,函数参数为一个列表,对列表中的数值元素进行累加求和
#********** Begin *********#
def plus(numbers):
   a=0
   for i in numbers:
      a+=i
   return(a)
#********** End **********#

#调用plus函数,并将返回结果存储到变量d中
d = plus(numbers)
print(d)

第2关:函数的return返回

定义一个函数gcd,功能是求两个正整数的最大公约数

#输入两个正整数a,b
a = int(input())
b = int(input())

# 请在此添加函数gcd代码,求两个正整数的最大公约数
#********** Begin *********#
def gcd(a,b):
    if a<b:
        a,b=b,a
    y=a*b
    y=a%b
    while y!=0:
        a=b
        b=y
        y=a%b
    return(b)
#********** End **********#

#调用函数,并输出最大公约数
print(gcd(a,b))

第3关:函数的使用范围:Python作用域

  • 编写程序,功能是求两个正整数的最小公倍数;
  • 要求实现方法:先定义一个private函数 _gcd()求两个正整数的最大公约数,再定义public函数lcm()调用 _gcd()函数求两个正整数的最小公倍数。
#输入两个正整数a,b
a = int(input())
b = int(input())

# 请在此添加一个private函数_gcd()求两个正整数的最大公约数
#********** Begin *********#
def _gcd(a,b):
    if a<b:
        a,b=b,a
    y=a*b
    y=a%b
    while y!=0:
        a=b
        b=y
        y=a%b
    return(b)
#********** End **********#

#请在此添加一个public函数lcm(),在lcm()函数中调用_gcd()函数,求两个正整数的最小公倍数
#********** Begin *********#
def lcm(a,b):
    return (a*b//_gcd(a,b))
#********** End **********#

#调用函数,并输出a,b的最小公倍数
print(lcm(a,b))

第4关:函数综合训练※

第一题

若三角形的三边分别为a,b,c ,令p=(a+b+c)/2,则该三角形的面积为:

S=p(p−a)(p−b)(p−c)

本题将利用triArea函数计算如下图阴影部分的面积,并打印出结果。你的任务是编程实现函数triArea(a,b,c),利用上述公式计算三角形的面积。

import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt     #导入matplotlib.pyplot
import matplotlib.image as imgplt

# 第一题:求三角形阴影部分面积
# 请编写函数triArea(a ,b , c),返回三角形的面积
from math import *
def triArea(a ,b , c):
    #请在下面编写代码
    ######## begin ###########
    p=(a+b+c)/2
    Area=sqrt(p*(p-a)*(p-b)*(p-c))
    ######## end #############
   #请不要修改下面的代码
    return Area 
   
S1 = triArea(9.8, 9.3, 6.4)
S2 = triArea(2.9, 4.1, 4.7)
S3 = triArea(2.0, 1.4, 2.3)
print('%.6f' %(S1-S2+S3))
print('\n***********************\n')

第二题

本题通过编程验证哥德巴赫猜想,即:任何一个大于或等于6的偶数,可以表示成两个素数之和。例如:11111112 = 11 + 11111101 。你的任务:1)编程实现一个函数isPrime(x),判断整数x是否为素数;2)程序将使用函数Goldbach(N)将整数N分解成两素数之和以验证哥德巴赫猜想,你需要补充完整该函数代码。

import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt     #导入matplotlib.pyplot
import matplotlib.image as imgplt

# 第二题:哥德巴赫猜想
# 请编写函数isPrime(x)。判断x是否为素数,如果是素数则返回True否则返回False
def isPrime(x):
    #请在下面编写代码
    ######## begin ###########
    n=0
    for i in range(2,x//2):
        if x%i==0:
            n+=1
    if n==0:
        return('True')
    else:
        return('False')
    #######  end ############

def Goldbach(N):  # 将N分解成两素数之和
    if N < 6 or N % 2 == 1:  # 若N小于6或N为奇数
        print('N应该是大于等于6的偶数')
    else:
        # 循环判断,得到符合要求的小于N的两个素数,并打印
        for x in range(2, N //2):  # 想想为什么是从2到N/2
              # 调用isPrime函数得到符合要求的小于N的两个素数
          ######## begin ###########
            if isPrime(x)=='True' and isPrime(N-x)=='True':
                print(N, '=', x, '+', N - x)
                break
for num in [88, 68, 50, 1000]:
    Goldbach(num) 
print('\n***********************\n')

第三题

信用卡号是否合法的判断规则为: a) 对给定的8位信用卡号码,如43589795,从最右边数字开始,隔一位取一个数相加,如5+7+8+3=23。 b) 将卡号中未出现在第一步中的每个数字乘2,然后将相乘的结果的每位数字相加。例如,对上述例子,未出现在第一步中的数字乘2后分别为(从右至左)1818108,则将所有数字相加为1+8+1+8+1+0+8=27。 c) 将上述两步得到的数字相加,如果得数个位为0,则输入的信用卡号是有效的。

请在指定位置完成函数的编写,判断用户输入的8位信用卡号码是否合法。

import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt     #导入matplotlib.pyplot
import matplotlib.image as imgplt

# 第三题 :信用卡的验证程序
def validCreditCard(num):
    #请在下面编写代码
    # ********** Begin ********** #
    s=0
    z=0
    for i in list(str(num)):
        i=eval(i)
        z+=1
        if z%2==0:
            s+=i
        else:
            i*=2
            a=list(str(i))
            w=0
            for n in a:
                w+=eval(n)
            s+=w
    valid=s%10==0
    # ********** End ********** #    
    #请不要修改下面的代码
    return valid
for num in [1234567, 43589795, 87539319, 123456789]:
    valid = validCreditCard(num)
    print(valid)
print('\n***********************\n') 

第四题

在指定位置完成函数编写,根据年和月,打印该月的日历。(计算某一天是星期几的公式见【第二章-Python语言基础-2.1简单计算问题的求解】。试题中已定义了三个函数,请完成这三个函数,其中函数day用于计算并返回某年某月某日是星期几;函数isLeapYear用于判断某年是否是闰年;函数calendar打印所给年月的日历,注意输出格式要求和空格的对齐,如下图所示,具体的空格数请参见本题代码。

import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt     #导入matplotlib.pyplot
import matplotlib.image as imgplt

#第四题:打印日历

def day(y, m, d):#计算y年m月d日是星期几
    # 请在下面编写代码
    # ********** Begin ********** #
    y0=y-(14-m)//12
    x=y0+y0//4-y0//100+y0//400
    m0=m+12*((14-m)//12)-2
    d0=(d+x+31*m0//12)%7
    # ********** End ********** #    
    # 请不要修改下面的代码
    return d0

def isLeapYear(year): #判断year年是否闰年
    # 请在下面编写代码
    # ********** Begin ********** #
    if y%4==0 and y%100!=0 or y%400==0:
        return(0)
    else:
        return(1)
    # ********** End ********** #    
    # 请不要修改下面的代码
def calendar(y, m): #打印y年m月日历
    print('       {}年{}月'.format(y,m))
    print('Su\tM\tTu\tW\tTh\tF\tSa')
    # 请在下面编写代码调用函数计算y年m月1日是星期几保存在变量date中
    # ********** Begin ********** #
    date=day(y,m,1)
    # ********** End ********** #

    days = 0
    # 请在下面编写代码计算y年m月的天数
    # ********** Begin ********** #
    if m==2:
        if isLeapYear(y)==0:
            days=29
        else:
            days=28
    elif m in [1,3,5,7,8,10,12]:
        days=31
    else:
        days=30
    # ********** End ********** # 
    count = date  # y年m月1日是星期几
    for i in range(date):
        print('\t', end='')
    for d in range(1, days + 1):
        print(str(d) + '\t', end="")
        count = (count + 1) % 7
        if count == 0:
            print()
    print()
   
    # 请不要修改下面的代码 
for (y,m) in [(2017,8), (2017,10),(2015,8), (2017,2), (2016,2)]:
        calendar(y, m)
        print('---------------------------')

print('\n***********************\n') 

求三连。。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐