Python语言基础-2.5函数(二)
第1关:函数的参数使用定义函数plus,功能是对参数(一个列表)中的数值元素进行累加,列表中的元素个数不确定;函数返回累加结果。#创建一个空列表numbersnumbers = []#str用来存储输入的数字字符串,lst1是将输入的字符串用空格分割,存储为列表str = input()lst1 = str.split(' ')#将输入的数字字符串转换为整型并赋值给numbers列表for i i
第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
后分别为(从右至左)18
、18
、10
、8
,则将所有数字相加为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')
求三连。。
更多推荐
所有评论(0)