实验十一 函数
第1关:定义判断质数的函数
编写一个能判断质数的函数。若参数是质数,返回true;否则返回false。 主程序输入一个数n,然后调用该函数判断其是否是质数,是则显示n是质数,否则显示n不是质数。
def isprime(a):
#代码开始
for i in range(2,n):
if n % i == 0:
return False
else:
return True
return False
#代码结束
n=eval(input("请输入一个数"))
if isprime(n):
print(n,"是一个质数")
else:
print(n,"不是一个质数")
第2关:绝对质数
编写一个输出所有两位数的绝对质数的小程序。 每行显示3个数,每个数后面四个空格 注意:isprime函数已经定义在本文件夹的程序isprime.py中
什么是绝对质数
一个质数,当它的数字位置对换以后仍为质数,这样的数称为绝对质数。例如17和71都是质数,所以17和71是绝对质数
调用函数
程序调用一个函数需要执行以下四个步骤: (1)调用程序在调用处暂停执行; (2)在调用时将实参复制给函数的形参; (3)执行函数体语句; (4)函数调用结束给出返回值,程序回到调用前的暂停处继续执行 函数名可以作为表达式的一部分,可以直接输出,可以出现在赋值语句,也可以作为其他函数的参数
from isprime import *
#代码开始
n = 0
for i in range(10,100):
a = int("".join(reversed(str(i))))
if isprime(i) == True and isprime(a) == True:
print("{:<6d}".format(i),end="")
n += 1
if n % 3 == 0:
print()
#代码结束
第3关:验证哥赫巴德猜想
验证100之内大于2的偶数符合哥赫巴德猜想。 哥赫巴德猜想是任一大于2的偶数都可写成两个质数之和。 注意:调用isprime函数(在isprime.py文件中)判断是否质数 每行显示五个式子。每个式子的整数显示两位,每个式子后面显示tab(\t)

from isprime import *
#代码开始
n = 0
for i in range(4,100,2):
for j in range(2,i+1):
if isprime(j) and isprime(i-j):
print("{:>2}={:>2}+{:>2}".format(i,j,i-j),end="\t")
n += 1
if n % 5 == 0:
print()
break
#代码结束
第4关:判断三角形类型、
编写一个根据三条边长判断三角形类型的函数。 若不能构成三角形,返回0. 若构成等边三角形,返回1. 若构成等腰三角形,返回2 若构成直角三角形,返回3. 若是其他三角形,返回4.
在主程序中,根据函数的返回值,显示对应的三角形类型
def sjx(a,b,c):
#代码开始
if a<b+c and b<a+c and c<a+b:
if a == b == c:
lx = 1
elif a == b or a == c or b == c:
lx = 2
elif a*a+b*b==c*c or a*a+c*c==b*b or b*b+c*c==a*a:
lx = 3
else:
lx = 4
else:
lx = 0
#代码结束
return lx
x=eval(input())
y=eval(input())
z=eval(input())
#代码开始
m = sjx(x,y,z)
#代码结束
if m==0:
print("不能构成三角形")
elif m==1:
print("等边三角形")
elif m==2:
print("等腰三角形")
elif m==3:
print("直角三角形")
else:
print("一般三角形")
第5关:成语字典精确查询
编写一个能查询成语字典的小程序。 sy10文件夹的成语.txt的图片如下图所示

根据提示,将函数cyjl补充完整,将文件成语.txt的成语加入到cyzd字典,键为成语,值为后面的内容。 将函数精确查询jqcx补充完整,输入成语,显示该成语的所有信息。若成语不存在,显示成语不存在 将主程序补充完整,用户可循环输入1进行精确查找;输入0,退出程序
def cyjl():
f1=open("sy10//成语.txt","r",encoding="utf8")
#代码开始
cyzd = {}
for i in f1:
cyzd[i[:4]]=i.strip()[5:].strip()
return cyzd
#代码结束
f1.close()
def jqcx(x):
#代码开始
if x not in cyzd:
print("没有此成语")
else:
print(cyzd[x])
#代码结束
cyzd={}
cyzd = cyjl()
c=input("1精确查询0退出")
while c!="0":
#代码开始
x = input("请输入成语")
jqcx(x)
c = input("1精确查询0退出")
#代码结束
第6关:成语字典模糊查询
编写一个能查询成语字典的小程序。 sy10文件夹的成语.txt的图片如下图所示

根据提示, 将函数模糊查询mhcx补充完整,输入词语,显示所有包含该词语的成语
将主程序补充完整,用户可循环输入1,进行精确查找;输入2,进行模糊查找;输入0,退出程序
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():
#代码开始
cy=input("请输入词语")
for i in cyzd:
if cy in i:
print(i)
#代码结束
def jqcx():
x=input("请输入成语")
if x not in cyzd.keys():
print("成语不存在")
else:
print(cyzd[x])
cyzd={}
cyjl()
c=input("1精确查询2模糊查询0退出")
while c!="0":
#代码开始
if c == "1":
jqcx()
if c == "2":
mhcx()
c = input("1精确查询2模糊查询0退出")
#代码结束
第7关:成语接龙小游戏
编写一个成语接龙小游戏。 在sy10文件夹下,有一个成语.txt文件,如下所示

在上述成语字典程序中,增加一个成语接龙的选项。 游戏规则如下: 用户输入一个成语,若用户输入的不是文件中的成语,则显示“非法成语,你输了” 若输入正确成语,系统会到成语文件中找到以你输入成语的最后一个字开始的成语。 若系统没有找到,则显示“你赢了。”退出接龙。 若系统找到了,则显示该成语。 用户继续输入以该成语结尾的字开始的成语,若输入的成语符合要求,则系统继续接龙。 若成语没有接龙,系统提示“没有接龙"
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():
cy = input("请输入成语")
m = cyzd.get(cy,0)
f = 0
while True:
if m == 0:
print("非法成语,你输了")
break
for i in cyzd:
if i[0]==cy[-1]:
print(i)
n = i
cy = input("请输入成语")
m = cyzd.get(cy,0)
break
else:
print("你赢了")
f = 1
if f == 1:
break
if cy[0] != n[-1]:
print("没有接龙,你输了")
break
cyzd={}
cyjl()
c=input("1精确查询2模糊查询3成语接龙0退出")
while c!="0":
if c=="1":
jqcx()
elif c=="2":
mhcx()
elif c=="3":
yx()
c=input("1精确查询2模糊查询3成语接龙0退出")

5970

被折叠的 条评论
为什么被折叠?



