湖南大学python头歌实训 实验8:函数

第二章-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

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2024年5月6日
下一篇 2024年5月6日

相关推荐