第二章-Python语言基础-2.5函数(二)
第1关:函数的参数使用
numbers = []
# str用来存储输入的数字字符串,lst1是将输入的字符串用空格分割,存储为列表
str = input()
lst1 = str.split(' ')
# 将输入的数字字符串转换为整型并赋值给numbers列表
for i in range(len(lst1)):
numbers.append(int(lst1.pop()))
# 请在此添加函数plus的代码,函数参数为一个列表,对列表中的数值元素进行累加求和
# ********** Begin *********#
def plus(n):
return sum(n)
# 调用plus函数,并将返回结果存储到变量d中
d = plus(numbers)
print(d)
第2关:函数的return返回
#coding=utf-8
#输入两个正整数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))
或者你可以help,看下math.gcd(),lol
第3关:函数的使用范围:Python作用域
#coding=utf-8
#输入两个正整数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
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关:函数综合训练※
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),返回三角形的面积
def triArea(a ,b , c):
#请在下面编写代码
######## begin ###########
p=(a+b+c)/2
Area=(p*(p-a)*(p-b)*(p-c))**0.5
######## 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')
# 第二题:哥德巴赫猜想
# 请编写函数isPrime(x)。判断x是否为素数,如果是素数则返回True否则返回False
def isPrime(x):
#请在下面编写代码
######## begin ###########
n=1
for i in range(2,int(x**0.5)+1):
if x%i==0:
n=0
break
if n==0:
return False
else:
return True
####### 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 + 1): # 想想为什么是从2到N/2
# 调用isPrime函数得到符合要求的小于N的两个素数
######## begin ###########
if isPrime(x)==True and isPrime(N-x)==True :
######## end ###########
print(N, '=', x, '+', N - x)
break
for num in [88, 68, 50, 1000]:
Goldbach(num)
print('\n***********************\n')
# 第三题 :信用卡的验证程序
def validCreditCard(num):
#请在下面编写代码
# ********** Begin ********** #
s=0
cnt=0
num1=list(str(num))
num1=num1[::-1]
for i in num1:
cnt+=1
if cnt%2!=0:
s=s+eval(i)
else:
num2=eval(i)*2
num_2=list(str(num2))
for j in num_2:
s=s+eval(j)
valid=s%10==0
# ********** End ********** #
#请不要修改下面的代码
return valid
for num in [1234567, 43589795, 87539319, 123456789]:
valid = validCreditCard(num)
print(valid)
print('\n***********************\n')
#第四题:打印日历
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 or y%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月的天数
# ********** Begin ********** #
if m==2:
if isLeapYear(y)==True:
days=29
else:
days=28
elif m in [1,3,5,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')
实验十 函数
第1关:定义判断质数的函数
def isprime(a):
#代码开始
flag=1
for i in range(2,int(a**0.5)+1):
if a%i==0:
flag=0
break
if flag==1:
return True
else:
return False
n=eval(input("请输入一个数"))
if isprime(n):
print(n,"是一个质数")
else:
print(n,"不是一个质数")
第2关:绝对质数
from isprime import *
#代码开始
def nx(i):
y=0
while i>0:
y=y*10+i%10
i=i//10
return y
n=0
for i in range(10,99):
if isprime(i):
if isprime(nx(i)):
n=n+1
print(i,end=' ')
if n%3==0:
print('')
#代码结束
第3关:验证哥赫巴德猜想
from isprime import *
#代码开始
def cjr(n):
for i in range(2,int(n/2)+1):
if isprime(i) and isprime(n-i):
print('{:>2}={:>2}+{:>2}'.format(n,i,n-i)+'\t',end='')
break
n=0
for i in range(4,100,2):
n=n+1
cjr(i)
if n%5==0:
print()
#代码结束
第4关:判断三角形类型
def triangle_type(a, b, c):
# 判断是否能构成三角形
li = [a,b,c]
a=li[0]
c=li[2]
b=li[1]
if a + b <= c :
print("不能构成三角形")
# 判断是否为等边三角形
elif a == c:
print("等边三角形")
# 判断是否为等腰三角形
elif a == b or b == c :
print("等腰三角形")
# 判断是否为直角三角形
elif a**2 + b**2 == c**2:
print("直角三角形")
else:
print("一般三角形")
a = eval(input())
b = eval(input())
c = eval(input())
m = triangle_type(a, b, c)
第5关:成语字典精确查询
cyzd={}
def cyjl():
f1=open("sy10//成语.txt","r",encoding="utf8")
#代码开始
for line in f1:
line=line.strip()
n=line.find("拼")
cyzd[line[:4]]=line[n:]
return cyzd
#代码结束
f1.close()
def jqcx(i):
#代码开始
if i in cyzd.keys():
print(cyzd[i])
else:
print('没有此成语')
#代码结束
cyzd={}
cyjl()
c=input("1精确查询0退出")
while c!="0":
#代码开始
if c=='1':
x=input('请输入成语')
jqcx(x)
c=input("1精确查询0退出")
#代码结束
学习用find吧,不是所有成语都是四个字的
第6关:成语字典模糊查询
def cyjl():
f1=open("sy10//成语.txt","r",encoding="utf8")
for line in f1:
cy=line[:line.find("拼音")].strip()
cyjx=line[line.find("拼音"):].strip()
cyzd[cy]=cyjx
f1.close()
def mhcx(x):
#代码开始
for i in cyzd:
if x in i:
print(i)
#代码结束
def jqcx(x):
if x not in cyzd.keys():
print("成语不存在")
else:
print(cyzd[x])
cyzd={}
cyjl()
c=input("1精确查询2模糊查询0退出")
while c!="0":
#代码开始
if c=="1":
x=input('请输入成语')
jqcx(x)
else:
x=input('请输入词语')
mhcx(x)
c=input('1精确查询2模糊查询0退出')
#代码结束
第7关:成语接龙小游戏
def cyjl():
f1=open("sy10//成语.txt","r",encoding="utf8")
for line in f1:
cy=line[:line.find("拼音")].strip()
cyjx=line[line.find("拼音"):].strip()
cyzd[cy]=cyjx
f1.close()
def mhcx():
x=input("请输入成语")
for y in cyzd.keys():
if x in y:
print(y)
def jqcx():
x=input("请输入成语")
if x not in cyzd.keys():
print("成语不存在")
else:
print(cyzd[x])
def yx(x):
n=0
if x in cyzd.keys():
for i in cyzd.keys():
if x[-1]==i[0]:
n=1
print(i)
break
if n==0:
print("你赢了")
else:
x=input("请输入成语")
if x[0]!=i[-1]:
print("没有接龙,你输了")
else:
yx(x)
else:
print("非法成语,你输了")
cyzd={}
cyjl()
c=input("1精确查询2模糊查询3成语接龙0退出")
while c!="0":
if c=="1":
jqcx()
elif c=="2":
mhcx()
elif c=="3":
x=input("请输入成语")
yx(x)
c=input("1精确查询2模糊查询3成语接龙0退出")
实验5-1 函数基础
第1关:函数定义
# -*- coding: utf-8 -*-
# 第一题 请在此添加函数定义代码
########## Begin ##########
def add(a,b):
return a+b
########### end ###########
x = eval(input())
y = eval(input())
print('{}+{}={}'.format(x,y,add(x,y)))
# 第二题 请在此添加函数定义代码
########## Begin ##########
def summ(x):
return sum(range(1,n+1))
########### end ###########
n = eval(input())
print('1+...+{}={}'.format(n,summ(n)))
# 第三题 请在此添加函数定义代码
########## Begin ##########
def fac(x):
if x==1:
return 1
else:
return x*fac(x-1)
########### end ###########
n = eval(input())
print('{}!={}'.format(n,fac(n)))
第2关:函数调用——判断素数
# coding=utf-8
m = eval(input()) #输入判定范围
# 请在此添加代码,定义判断素数函数
###### Begin ######
def isprimary(n):
flag=1
for i in range(2,int(n**0.5)+1):
if n%i==0:
flag=0
break
if flag==1:
return True
else:
return False
###### End ######
# 在主程序中调用该函数
###### Begin ######
for i in range(2,m+1):
if isprimary(i)==True:
print(i)
###### End ######
第3关:函数的可选参数——计算新点坐标
# -*- coding: utf-8 -*-
from math import *
#####定义函数,请在下面补充代码 ######
def move(x,y,step,angle=0):
nx=x+step*cos(radians(angle))
ny=y+step*sin(radians(angle))
return nx,ny
###### 函数代码补充结束 ######
constr = input()
if constr.count(',') == 2:
x,y,step = eval(constr)
#### 请在下面补充代码,调用函数move,角度取默认值,计算新点坐标
x,y=move(x,y,step)
#### 补充代码结束 ####
print('{:.1f} {:.1f}'.format(x,y))
elif constr.count(',') == 3:
x,y,step,angle= eval(constr)
#### 请在下面补充代码,调用函数move,带全部参数,计算新点坐标
x,y=move(x,y,step,angle)
#### 补充代码结束 ####
print('{:.1f} {:.1f}'.format(x,y))
else:
print('数据输入错误')
第4关:函数的可变长度参数——计算多个数据之积
#一个带*的形参名可接受任意个实参
#请在此添加代码,返回参数列表中所有数的和
def production(*arg):
#********** Begin *********#
s=1
for i in arg:
s=s*i
return s
#********** End *********#
#调用
#调用production()函数并输出结果
print(production(2,3))
print(production(2,4,5))
print(production(10,2,3,4))
第5关:函数的返回值——计算三角形周长和面积
import math
def triangle(a, b, c):
if a + b <= c or a + c <= b or b + c <= a:
return 0, 0
else:
perimeter = a + b + c
p = perimeter / 2
area = math.sqrt(p * (p - a) * (p - b) * (p - c))
return perimeter, area
a = eval(input())
b = eval(input())
c = eval(input())
p, area = triangle(a, b, c)
if p == 0:
print("不能构成三角形")
else:
print("周长{:.2f}".format(p))
print("面积{:.3f}".format(area))
海伦公式算面积
第6关:函数的返回值——最大公约数和最小公倍数
# -*- coding: utf-8 -*-
# 输入两个正整数a,b
a = int(input())
b = int(input())
# 请在此添加代码,求两个正整数的最大公约数
########## Begin ##########
def gcd(a,b):
if a<b:
a,b=b,a
y=a%b
while y!=0:
a=b
b=y
y=a%b
return b
def lcm(a,b):
return a*b//gcd(a,b)
########## End ##########
# 调用函数,并输出最大公约数
g,lcm=gcd(a,b),lcm(a,b)
print('最大公约数{} 最小公倍数{}'.format(g,lcm))
老演员了
第7关:变量的作用域——最长字符串
# coding=utf-8
# strings用来存储输入的字符串,lst1是将输入的字符串用空格分割,存储为列表
strings = input()
lst1 = strings.split(' ') #全局变量
# 请在此添加代码,定义函数maxlen()求输入的列表中的最长的元素
########## Begin ##########
def maxlen():
global lst1
LEN=lst1[0]
for i in lst1:
if len(i)>len(LEN):
LEN=i
return LEN
########## End ##########
st = maxlen() #调用函数,得到最长字符串
print(st)
第二章-Python语言基础-2.5函数(一)
第1关:内置函数的使用
#coding=utf-8
#输入一个整数n
n = int(input())
# 请在此添加代码,实现编程要求
#********** Begin *********#
def prime(n):
if n == 1:
return False
for i in range(2,int(n**0.5)+1):
if n % i == 0:
return False
return True
#********** End **********#
print(prime(n))
第2关:函数的调用
#coding=utf-8
#输入数字字符串,并转换为数值列表
a = input()
num1 = eval(a)
numbers = list(num1)
# 请在此添加函数bubbleSort代码,实现编程要求
#********** Begin *********#
def bubbleSort(n):
m = sorted(n)
return m
#********** End **********#
print(bubbleSort(numbers))
第3关:函数基础训练
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 3 12:48:47 2020
@author: hzh
"""
from random import *
from math import *
r = []
for i in [10, 200,300,400,500,600,700,800,900,1000]:
seed(i)
r.append(randint(1, i))
def print_(x):
if type(x) == float:
print("%.4f" % x)
else:
print(x)
#第一题
def sumInt(n):
#请在下面编写代码
# ********** Begin ********** #
if n < 0:
return None
else:
summmary=sum(range(1,n+1))
# ********** End ********** #
#请不要修改下面的代码
return summmary
#第二题
import math
def factorial(n):
#请在下面编写代码
# ********** Begin ********** #
if n < 0:
return None
else:
fac=math.factorial(n)
# ********** End ********** #
#请不要修改下面的代码
return fac
#第三题
import math
def isPrime(n):
# 请在下面编写代码
# ********** Begin ********** #
if n==1:
return False
else:
flat=1
x=int(math.sqrt(n))+1
for i in range(2,x):
if n%i==0:
flat=0
break
if flat==0:
return False
else:
return True
# ********** End ********** #
# 请不要修改下面的代码
return (isprime)
#第四题
def f(x):
# 请在下面编写代码
# ********** Begin ********** #
if -10<=x<-8:
fx=x-2
elif -8<=x<-6:
fx=x+3
elif -6<=x<=-2:
fx=x**2
elif -2<x<2:
fx=abs(x)
elif 2<=x<=4:
fx=x**3
elif 4<x<=6:
fx=3*x-4
else:
fx=4*x+1
# ********** End ********** #
# 请不要修改下面的代码
return fx
#第五题
def tax(salary):
#请在下面编写代码
# ********** Begin ********** #
if 0<=salary<=47449:
salaTax=salary*0.22
elif 47450<=salary<=114649:
salaTax=salary*0.25
elif 114650<=salary<=174699:
salaTax=salary*0.28
elif 174700<=salary<=311949:
salaTax=salary*0.33
elif salary>=311949:
salaTax=salary*0.35
else:
return None
# ********** End ********** #
# 请不要修改下面的代码
return salaTax
if __name__ == '__main__':
for num in [-10, 0, 10, 100, 1000, 10000]:
summary = sumInt(num)
print(summary)
print('\n***********************\n')
for num in [-5, 0, 10, 15, 20, 25, 30]:
fac = factorial(num)
print(fac)
print('\n***********************\n')
for num in r:
isprime = isPrime(num)
print(isprime)
print('\n***********************\n')
for x in [-9, -8, -7, -6, -5, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]:
fx = f(x)
print(fx)
print('\n***********************\n')
for salary in [-1000, 0, 40000, 47450, 98000, 114650, 14980, 17470, 25670, 311950, 360000]:
st = tax(salary)
print_(st)
总结:
难度整体比较小,主要目的是为了让你熟悉函数
版权声明:本文为博主作者:湖大方脸原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/hkxxxx_/article/details/135222880