武汉理工大学 python实验四

时间:2025-02-09 22:24:11

第1关:素数判定函数

将素数的判定代码定义为一个函数is_prime(n),接受传入的实参整数n,返回n是否是素数,n为素数时返回True,不是素数时返回False。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

系统文件将尝试调用该函数判定输入的一个正整数n是否为素数。

注意:

  1. 本题只需要定义函数,不需要定义主流程。
  2. 本题测试平台用时总限时3秒,有用例数据规模较大,请注意算法效率。
  3. 本题测试用例中保证为整数,但不保证为正整数。

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

无输入

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

如果n为素数,函数返回True 如果n不为素数,函数返回False

def is_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

第2关:寻找回文素数

寻找回文素数

如果一个整数是素数,同时其对应的字符串是回文字符串时,便称其为回文素数。例如,131 既是素数,其对应的字符串131又是回文字符串,所以 131 是回文素数。

输入一个正整数 n , 请你在一行内输出从小到大排列的小于这个数的所有回文素数,每个数字后面一个空格。

编程要求

根据提示,在右侧编辑器补充代码,完善寻找回文素数的小程序。

测试说明

平台会对你编写的代码进行测试:

输入格式 输入一个正整数

输出格式 一行内输出从小到大排列的小于这个数的所有回文素数,每个数字后面一个空格。

def s(n):
    if n<2:
        return False
    for i in range(2,int(n**0.5)+1):
        if n%i==0:
            return False
    return True
def h(num):
    for i in range(num):
        if str(i)==str(i)[::-1]and s(i):
            print(i,end=' ')
hs=int(input())
h(hs)

3关:寻找反素数

寻找反素数

反素数是指一个将其逆向拼写后也是一个素数的非回文数。例如:1771 都是素数且均不是回文数,所以 1771 都是反素数。

输入一个正整数 n ,输出从小到大顺序输出小于 n 的所有反素数。

编程要求

根据提示,在右侧编辑器补充代码,完善寻找反素数的小程序。

测试说明

平台会对你编写的代码进行测试:

输入格式 输入一个正整数

输出格式 一行内输出从小到大排列的小于这个数的所有反素数,每个数字后面一个空格。

测试输入: 199 预期输出: 13 17 31 37 71 73 79 97 107 113 149 157 167 179

def s(n):
    if n<2:
        return False
    for i in range(2,int(n**0.5)+1):
        if n%i==0:
            return False
    return True
def hw(n):
    return str(n)==str(n)[::-1]
def fss(n):
    fss=[]
    for i in range(2,n):
        s2=int(str(i)[::-1])
        if not hw(i) and s(i) and s(s2):
            print(i,end=' ')
n=int(input())
fss(n)

第4关:哥德巴赫猜想

哥德巴赫猜想

1742 年,哥德巴赫给欧拉的信中提出了以下猜想“任一大于 2 的整数都可写成三个质数之和”。常见的猜想陈述为欧拉的版本,即任一大于 2 的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”。比如: 24=5+19,其中 519 都是素数。 输入一个正整数 N,当输入为偶数时,分行按照格式“N=p+q” 输出 N 的所有素数分解,其中 pq 均为素数且 p ≤ q。当输入为奇数或 N<4 时,输出 'Data error!'

编程要求

根据提示,在右侧编辑器补充代码,完善哥德巴赫猜想的小程序。

测试说明

平台会对你编写的代码进行测试:

测试输入: 88 预期输出:

  1. 88=5+83
  2. 88=17+71
  3. 88=29+59
  4. 88=41+47
def is_prime(n):
    """判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False"""
    #====================Begin===================================
    if n<2:
        return False
    for i in range(2,int(n)//2+1):
        if n%i==0:
            return False
    return True
    #======================End=================================

    
def goldbach_conjecture(num):
    """ 哥德巴赫猜想, 接收一个不小于4的正整数为参数。
    当参数为不小于4的偶数时,将其分解为两个素数的加和,按小数+数的格式输出。
    有多种组合时全部输出,但不输出重复的组合,例如输出8=3+5,不输出8=5+3。
    参数为奇数或小于4时,输出'Data error!'
    """
    #====================Begin===================================
    if num%2==0 and num>=4:
        for i in range(num//2+1):
            if is_prime(i) and is_prime(num-i):
                print(f'{num}={i}+{num-i}')
    else:
        print("Data error!")
    #======================End=================================

if __name__ == '__main__':
    positive_even = int(input())        # 输入一个正数
    goldbach_conjecture(positive_even)

第5关:本月天数

任务描述

输入一个8位数表示的年月日,读出月份数字并输出该月有多少天。

输入格式

输入一个8位的表示年月日的字符串

输出格式

该月的天数

示例

输入: 20000219 输出: 29

def days_of_month(date_str):
    """根据输入的年月日,返回该月的天数"""
    day= 28
    year = int(date_str[0:4])
    month = int(date_str[4:6])
    A=[1,3,5,7,8,10,12]
    B=[4,6,9,11]
    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
        if month == 2:
            day = 29
    if month in A:
        day=31
    elif month in B:
        day=30
    return day
if __name__ == '__main__':
    date_in = input()  # 输入一个年月日
    print(days_of_month(date_in))

第6关:华氏度转摄氏度速查表

任务描述

已知华氏温度转换摄氏温度的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。 定义函数F2C()和主流程完成题目要求。 本题要求读入两个华氏温度值f1和f2,打印范围在f1~f2内,每次增加两个华氏温度刻度的速查表。

注意:如果f1>f2,则直接打印error

输入格式

输入为一行,为两个不小于32的正整数f1和f2,表示两个华氏温度。两个数之间用逗号隔开,形如f1,f2

输出格式

如果f1>f2,输出error。 如果f1<=f2,则输出华氏转摄氏的温度转换速查表,速查表可能有多行,每行一个温度转换对,形如f1 : c1,其中c1保留小数点两位。速查表以2华氏度为刻度。

def F2C(f):
        c=5*(f-32)/9
        return c 
f1,f2=map(int,input().split(','))
if f1>f2:
    print('error')
else:
    for f in range(f1,f2+1,2):
        print("{} : {:.2f}".format(f,F2C(f)))

第7关:奇偶求和

任务描述

输入一个完全由数字字符组成的字符串s,分别统计其中出现的奇数和偶数字符数值之和‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

如输入123456789‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输出oddsum=25,evensum=20‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

本题需要使用自定义函数完成,建议代码框架如下:

  1. def f(n):
  2. ......
  3. def p(t):
  4. ......
  5. def .......
  6. s=input()
  7. print('oddsum={},evensum={}'.format(......))

示例 1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入: 123456789 输出: oddsum=25,evensum=20

def count_odd_even(s):
    oddsum = 0
    evensum = 0
    for char in s:
        num = int(char)
        if num % 2 == 0:
            evensum += num
        else:
            oddsum += num
    return oddsum, evensum

s = input()
oddsum, evensum = count_odd_even(s)
print("oddsum={},evensum={}".format(oddsum, evensum))

第8关:字母查找

任务描述

定义一个函数来判断单词m是否可以由字符串n中出现的字母来组成。 本题保证字符串中出现的字母均为小写字母,且不考虑n中的字母使用次数 在两行中分别输入两个字符串m,n 如果m,n 满足条件,则输出FOUND,否则输出NOT FOUND 如果输入的m包含有除字母外的其他字符,输出ERROR结束

示例 1

输入: word world 输出:
FOUND

def f(m,n):
    for i in m:
        if i not in n:
            return("NOT FOUND")
    else:
        return("FOUND")
m = input()
if ():
    n = input()
    print(f(m,n))
else:
    print("ERROR")