本关任务: 1、定义一个函数求两个点坐标的函数 def calTwodist(x1,y1,x2,y2) : #函数说明 ''' 根据参数值计算两个点的距离 :param x1:第一个点的横坐标 :param y1:第一个点的纵坐标 :param x2:第二个点的横坐标 :param y2:第二个点的纵坐标 :return: 两个点的距离 ''' 2、 函数调用,从键盘输入两个点的坐标,并输出两个点的距离。
第一关,很简单,按照要求输入函数就行。
import math
#定义函数返回两个点的距离
def calTwodist(x1,y1,x2,y2) :
#函数说明
# 根据参数值计算两个点的距离
# :param x1:第一个点的横坐标
# :param y1:第一个点的纵坐标
# :param x2:第二个点的横坐标
# :param y2:第二个点的纵坐标
# :return: Dist两个点的距离
##########begin################
#从此开始计算两个点的坐标值
d = math.sqrt((x1-x2)**2+(y1-y2)**2)
#返回两个点的坐标值
return d
##########ends################
#########主程序begin##########
#从键盘输入两个点的坐标值
x1,x2,y1,y2 = eval(input())
#函数调用求解两个点的距离
d = calTwodist(x1,x2,y1,y2)
#输出两个点的距离,保留小数点后4位
print ("result="+'%.4f'%d)
##########ends################
根据提示,在右侧编辑器补充代码,编写下列程序:
1、定义一个判断是否是三角形的函数,是返回1,否则返回0;
2、定义一个计算三角形的面积的函数,设置默认参数为(a=3,b=4,c=5);
3、从键盘输入任意的三条边的长度,通过位置参数调用函数求面积并输出,面积保留小数点后4位;
4、根据默认参数计算三角形的面积并输出; 5、设置关键字参数计算指定三角形的面积; 6、计算多边形阴影部分的面积
第二关,第一问感觉老师给的代码有些复杂,可以简化。后面注意保留小数,也可像之前题目中一样定义一个print_函数简化print后内容。这里补充一个知识点:==(判断是否相等)、!=(判断是否不相等)、>=(判断是否大于)他们输出的结果都是布尔数(False、True)可作为if条件的判断条件。还有如果报错可以检查一下自己的if后有没有加上“:”。
import math
def IsTriange(a,b,c):
#函数说明
# 根据参数值判断是否是三角形的函数
# :param a:三角形一条边的长度
# :param b:三角形一条边的长度
# :param c:三角形一条边的长度
# :return: 0或1
#程序代码已经给出请认真阅读
##########begin################
t1=(a+b)>c and (a+c)>b and (b+c)>a
if t1 :
return 1
else:
return 0
##########ends################
#定义一个计算三角形的面积的函数,TriArea(a,b,c),
#其中a,b,c为三角形三条边,如果构成三角形,返回三角形的面积,否则返回0
def TriArea(a=3,b=4,c=5):#设置默认参数
##########begin################
if IsTriange(a,b,c)==1:
p = (a+b+c)/2
S = math.sqrt(p*(p-a)*(p-b)*(p-c))
return S
else:
return 0
##########ends################
#3、从键盘输入任意的a,b,c 按位置调用函数实现计算三角形面积的函数,如果不能构成三角形,返回0,否则输出三角形面积。
##########begin################
a,b,c = eval(input())
print ("三角形面积:",'%.4f'%TriArea(a,b,c),sep='')
##########ends################
print('*'*20) #输出20个*
#4、按默认参数调用函数计算三角形的面积,保留小数点后4位
##########begin################
S1 = TriArea()
print ("三角形面积:",'%.4f'%S1,sep='')
##########ends################
print('*'*20)#输出20个*
#5、设置关键字参数调用函数计算(c=10,b=20,a=15)三角形的面积
##########begin################
print ("三角形面积:",'%.4f'%TriArea(c=10,b=20,a=15),sep='')
##########ends################
print('*'*20)#输出20个*
#6、计算多边形阴影部分面积,保留小数点后4位
##########begin################
S2 = TriArea(9.8,9.3,6.4)-TriArea(2.9,4.1,4.7)+TriArea(2.0,1.4,2.3)
print("多边形面积为:",'%.4f'%S2,sep='')
##########ends################
print('*'*20,end='')#输出20个*
1、定义两个求两个数最大值和最小值的lambda函数,
2、调用lambda函数完成求3个数的最大值和最小值的程序
第三关,这里也可以直接用Python自带的函数max、min但是题目中要求了,咱么就自己定义一下吧。多个数值比较就可以两两相比再从中选出更大(小)的与三者相比。
#定义2个lambda函数,求两个数的最大值max1,和最小值min1的函数
##########begin##########
max1 = lambda a,b:a if a>=b else b
min1 = lambda a,b:a if a<=b else b
##########ends##########
#从键盘输入3个数,调用max1和min1函数完成求3个数的最大值和最小值的程序,输出最大值和最小值
##########begin##########
x,y,z = eval(input())
print (max1(max1(x,y),z),min1(min1(x,y),z))
##########ends##########
本关任务:编程定义实现本息利率计算的函数,并计算从键盘输入本金,按中国人民银行整存整取1年期利率1.75%,3年期利率2.75%,5年期利率2.75% ,调用函数计算本息和并输出。结果保留小数点后4位。
第四关,这里注意一下,这边的利息是复利,也就是我们俗称的“利滚利”算不对的可以看看是不是这里错了。这里只是让你输出本息和,变量只有本金,所以函数的数值可以直接输入,没必要写那么复杂。
def moneyrate1(pays,rate,year):
#函数说明
#
# 根据参数值计算存款本息值
# :param pays:本金
# :param rate:利率
# :param year:年份
# :return: 本息和
##########begin##########
total = pays*((1+rate)**year)
return total
##########ends##########
#调用moneyrate1函数计算从键盘输入的本金存1年,3年和5年的本息和并输出结果
##########begin##########
pays = eval(input())
total1 = moneyrate1(pays,0.0175,1)
print ("1年的本息和为",'%.4f'%total1,sep='')
total2 = moneyrate1(pays,0.0275,3)
print ("3年的本息和为",'%.4f'%total2,sep='')
total3 = moneyrate1(pays,0.0275,5)
print ("5年的本息和为",'%.4f'%total3,sep='')
##########ends##########
根据提示,在右侧编辑器补充代码,计算并输出数组的平均值和最大值。 1、 编程实现一个函数isPrime(x)
,判断整数x
是否为素数,是输出1,否则输出0
2、求出所有两位数的绝对素数的程序。 绝对素数:一个素数,当它的数字位置对换以后仍为素数,这样的数称为绝对素数。例如17和71都是素数,所以17和71是绝对素数 注意: 每一对绝对素数的输出格式为:17和71是绝对素数
3、 验证哥德巴赫猜想,即:任何一个大于或等于6的偶数,可以表示成两个素数之和。例如:11111112 = 11 + 11111101
定义函数Goldbach(N)
将整数N
分解成两素数之和以验证哥德巴赫猜想,你需要补充完整该函数代码。
第五关,首先是定义素数。这里我们用到素数的定义为素数的因数只有1和他本身。所以,我们只需要让除了1和他本身之外的数与它相除,如果余数都不是0,那么它就是素数。这里注意一下,判断素数时,要把(2,x)都遍历一遍,如果都不满足,才输出1,所以要注意最后一个return的缩进。如果和if平行写一个else,那么就会多出很多素数。例如:15在进入这个循环时,不满足if的条件,就会进入else分支,输出1(也就15是素数)。
后面对换数字的时候,我这边用的是求出十位和个位,再重新组合。也可直接用字符串reversed,但是记得转化为数字类型。
这里判断两个数均为素数我用了两种方法,一种是同时等于1,也可以使他们的和为2.。
#1定义一个判断一个数是否是素数的函数,如果是输出1,否则输出0
#######begin########
def isprime(x):
for i in range(2,x):
if x%i ==0:
return 0
return 1
#######ends########
#2调用isprime()函数求两位数内的绝对素数并输出
#######begin########
def h(x):
a=x%10 #a为个位
b=x//10 #b为十位
y= a*10+b
return y
for i in range(10,100):
if isprime(i)==1 and isprime(h(i))==1 :
print(i,'和',h(i),'是绝对素数',sep='')
#######ends########
print('*'*20)
#3定义一验证歌德巴赫猜想函数
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 + 1): # 想想为什么是从2到N/2
# 调用isPrime函数得到符合要求的小于N的两个素数
######## begin ###########
if isprime(x)+isprime(N-x)==2:
######## end ###########
print(N, '=', x, '+', N - x)
break
for num in [88, 68, 50, 1000]:
Goldbach(num)
print('*'*20)
第1题
信用卡号是否合法的判断规则为: 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
位信用卡号码是否合法。
第2题
在指定位置完成函数编写,根据年和月,打印该月的日历。(计算y年m月d日是星期几的公式为:
试题中已定义了三个函数,请完成这三个函数, 函数day
用于计算并返回某年某月某日是星期几; 函数isLeapYear
用于判断某年是否是闰年; 函数calendar
打印所给年月的日历,注意输出格式要求和空格的对齐,如下图所示,具体的空格数请参见本题代码。
第六题没什么多说的,难度较大,自行理解。
#1题 :信用卡的验证程序
def validCreditCard(num):
#请在下面编写代码
# ********** Begin ********** #
numb=str(num)
s=[]
for k in numb:
s+=[int(k)]
s1=sum(s[::-2])
s2=s[-2::-2]
ss=0
for i in s2:
j=i*2
if j-10>=0:
ss+=j//10+j-10
else:
ss+=j
jud=s1+ss
if str(jud)[-1]=='0':
valid=True
else:
valid=False
# ********** End ********** #
return valid
#请不要修改下面的代码
for num in [1234567, 43589795, 87539319, 123456789]:
valid = validCreditCard(num)
print(valid)
print('*'*20)
#2题:打印日历
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 year%4 ==0 and year%100!=0:
isLeapYear = True
elif year%100 ==0 and year%400 !=0 :
isLeapYear = False
elif year%400 == 0:
isLeapYear = True
else :
isLeapYear = False
# ********** End ********** #
# 请不要修改下面的代码
return isLeapYear
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月的天数为0
# 请在下面编写代码计算y年m月的天数
# ********** Begin ********** #
list_maxm = [1, 3, 5, 7, 8, 10, 12] # 创建大月的列表
list_litem = [4, 6, 9, 11] # 创建小月的列表
if m in list_maxm:
days = 31
elif m in list_litem:
days = 30
elif m==2 and isLeapYear(y) == True:
days = 29
elif m==2 and isLeapYear(y) == False:
days = 28
# ********** 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('-'*27)