【头歌-Python】Python第五章作业(初级)(1~6)

第1关:回文素数

任务描述
回文素数是指一个数既是素数又是回文数。例如,131,既是素数又是回文数。 用户输入一个正整数 n , 请你在一行内输出从小到大排列的的前n个回文素数,数字后面用一个空格进行分隔。

输入格式
输入一个正整数

输出格式
符合要求的回文素数

示例
输入:10
输出:2 3 5 7 11 101 131 151 181 191

参考代码

from math import *
def prime(n):
    for j in range(2, int(sqrt(n))+1):
        if n%j==0:
           return 0
    return 1

x = int(input())
i = 0
n = 2
while i<x:
    if str(n)==str(n)[::-1] and prime(n):
        print(n, end=' ')
        i+=1
    n+=1

第2关:反素数

任务描述
反素数(逆向拼写的素数)是指一个将其逆向拼写后也是一个素数的非回文数。
例如:
13和31都是素数,且13和31都不是回文数,所以,13和31是反素数。
输入一个正整数 n , 请在同一行输出从小到大排列的的前n个反素数,每个数字后面加一个空格。

输入格式
输入一个正整数

输出格式
符合条件的反素数

示例
输入:

10

输出:

13 17 31 37 71 73 79 97 107 113 

参考代码

from math import*
def prime(n):
    for j in range(2,int(sqrt(n))+1):
        if n%j==0:
            return 0
    return 1
    
def reverse(m):
    m1= int(m[::-1])
    if str(m1)!=m and prime(m1):
        return 1
    return 0

x = int(input())
i, a = 0, 2
while i<x:
    if prime(a) and reverse(str(a)):
        print(a, end=' ')
        i+=1
    a+=1

第3关:哥德巴赫猜想

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

输入格式
输入一个正整数

输出格式
当输入为偶数时,分行按照格式“N = p + q”输出N的所有素数分解,其中p 、 q均为素数且p ≤ q。当输入为奇数或N<4时,输出’Data error!’ 。

示例 1
输入:

30

输出:

30=7+23
30=11+19
30=13+17

示例 2
输入:

77

输出:

Data error!

参考代码

def is_prime(n):
    """判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False"""
    #=======================================================
    # 补充你的代码    
    if n<2:
        return False
    for i in range(2,n):
        if n%i==0:
           return False
    else:
        return True
    #=======================================================

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

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

第4关:货币转换

任务描述
编写一个美元与人民币转换的程序,用户输入金额和汇率(合理的汇率是正数),输出转换为另一种货币表示的金额。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

美元:'$'
人民币:'¥'

货币标识可从上述描述中复制

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
第一行输入一个以货币符号结尾的正数,数值作为金额,货币符号表明货币种类‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

第二行输入一个浮点数作为汇率

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入符合要求时输出一个带货币符号的数值(保留2位小数)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入不符合要求时输出Data error!

示例 1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入:

58$
6.75

输出:

391.50¥‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

示例 2‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入:

100¥
6.85

输出:

14.60$‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

示例 3‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入:

58
6.75

输出:

Data error!‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

参考代码

a = input().strip()
b = float(input())
if b<=0:
    print('Data error!')
elif '$' in a:
    c = eval(a[0:-1])*b
    print(f'{
      
      c:.2f}¥ ')
elif '¥' in a:
    c = int(a[0:-1])/b
    print(f'{
      
      c:.2f}$')
else:
    print('Data error!')

第5关:个人信息提取

任务描述
用户输入自己的个人信息,格式如下:
0122923450321 王昊 法学1801 河北 2001年
数据分别表示:学号 姓名 专业班级 籍贯 出生年份,各数据间空格间隔

有些用户没有按照规则输入数据,输入自己出生年份的时候写成了类似‘1900年生’或‘出生于1985’或‘19岁生于2006年11月’的数据格式

请注意程序仍然需要正确读取该项数据,本题保证这些用户输入时一定只含有1个4位数字连续组成的年份数据。

请按照输出样式输出姓名,班级,出生年份呢

提示:
列表中的数据和字符串当中的字符一样,都具有有序的索引,且引用数据和切片方式一致。
str.isdigit()可以帮助判断字符串是否全部由数字字符组成,返回值为’True’或’False’

输入示例

0122923450321 王昊 法学1801 河北 2001

输出示例

姓名:王昊 
班级:法学1801 
出生:2001

示例
输入:

0122923450321 王昊 法学1801 河北 2001

输出:

姓名:王昊
班级:法学1801
出生:2001

参考代码

a = input()
b = a.split(' ')
for i in range(1980, 2023):
    if str(i) in b[4]:
       break
print('姓名:' + b[1])
print('班级:' + b[2])
print('出生:' + str(i) + '年')

第6关:身份证号基本信息

任务描述
18位身份证号码第7-10位为出生年份(四位数),第11-12位为出生月份,第13-14位代表出生日期,第17位代表性别,奇数为男,偶数为女。 用户输入一个合法的身份证号,请输出用户的出生年月日和性别。(不要求较验输入的合法性)

输入格式
输入一个合法的身份证号字符串

输出格式
类似以下格式输出:

出生:1995年11月11日 性别:女

示例 1
输入:

110111199511111101

输出:

出生:19951111日
性别:女

参考代码

a = input()
if a[16] in '02468x':
    print(f'出生:{
      
      a[6:10]}{
      
      a[10:12]}{
      
      a[12:14]}日')
    print('性别:女')
elif a[16] in '13579':
    print(f'出生:{
      
      a[6:10]}{
      
      a[10:12]}{
      
      a[12:14]}日')
    print('性别:男') 

猜你喜欢

转载自blog.csdn.net/qq_45801887/article/details/134911113