【python】习题第8周

简介: 【python】习题第8周

22秋季Python第8周作业(函数)

函数题

6-1 jmu-python-函数-圆形生成器

函数接口定义:

getCircleArea(r) #r代表整数半径
get_rList(n) #n代表在函数中输入n个值放入列表。

裁判测试程序样例:

/* 请在这里填写答案 */
n = int(input())
rList = get_rList(n)
for e in rList:
    print('{:10.3f}'.format(getCircleArea(e)))
print(type(rList))``

输入样例:

3
1
2
3

输出样例:

3.142
    12.566
    28.274
<class 'list'>

代码:

import math
# 功能:可对指定r计算圆面积。
def getCircleArea(r):
    return math.pi * r * r
# 功能:输入n个值放入列表并将列表return。
def get_rList(n):
    list1 = []
    for i in range(n):
        x = eval(input())
        list1.append(x)
    return list1

6-2 jmu-python-判断质数

函数接口定义:

def isPrime(num)

裁判测试程序样例:

/* 请在这里填写答案 */
num=input()
if isPrime(num):
    print('yes')
else:
    print('no')

输入样例1:

ab

输出样例1:

no

输入样例2:

1.1

输出样例2:

no

输入样例3:

11

输出样例3:

yes

代码:

def isPrime(num):
    try:
        num = int(num)
    except:
        return False
    
    if num <= 1:
        return False
    else:
        for i in range(2, int(pow(num, 0.5)) + 1):
            if num % i == 0:
                return False
                break
        return True

6-3 jmu-python-函数-找钱

函数接口定义:

giveChange(money) #money为要找的钱。经过计算,应按格式"要找的钱 = x*10 + y*5 + z*1"输出。

裁判测试程序样例:

/* 请在这里填写答案 */
n =  int(input())
for i in range(n):
    giveChange(int(input()))

输入样例:

5
109
17
10
3
0

输出样例:

109 = 10*10 + 1*5 + 4*1
17 = 1*10 + 1*5 + 2*1
10 = 1*10 + 0*5 + 0*1
3 = 0*10 + 0*5 + 3*1
0 = 0*10 + 0*5 + 0*1

代码:

def giveChange(money):  # money为要找的钱。经过计算,应按格式"要找的钱 = x*10 + y*5 + z*1"输出。
    x = money // 10
    y = (money - (x * 10)) // 5
    z = money - (x * 10) - (y * 5)
    print('{} = {}*10 + {}*5 + {}*1'.format(money, x, y, z))

6-4 使用函数求素数和

函数接口定义:

prime(p),返回True表示p是素数,返回False表示p不是素数
PrimeSum(m,n),函数返回素数和

裁判测试程序样例:

/* 请在这里填写答案 */
m,n=input().split()
m=int(m)
n=int(n)
print(PrimeSum(m,n))

输入样例:

1 10

输出样例:

17

代码:

def Prime(num):
    try:
        num = int(num)
    except:
        return False
    
    if num <= 1:
        return False
    else:
        for i in range(2, int(pow(num, 0.5)) + 1):
            if num % i == 0:
                return False
                break
        return True
def PrimeSum(m,n):
    sum = 0
    for num in range(m,n+1):
        if Prime(num):
            sum += num;
    return sum

6-5 使用函数统计指定数字的个数

函数接口定义:

在这里描述函数接口。例如:
CountDigit(number,digit ),返回digit出现的次数

裁判测试程序样例:

/* 请在这里填写答案 */
number,digit=input().split()
number=int(number)
digit=int(digit)
count=CountDigit(number,digit )
print("Number of digit 2 in "+str(number)+":",count)

输入样例:

在这里给出一组输入。例如:

-21252 2

输出样例:

在这里给出相应的输出。例如:

Number of digit 2 in -21252: 3

代码:

def CountDigit(number, digit):
    ans = 0
    if number < 0:
        number = abs(number)
    x = 0
    while number > 0:
        x = number % 10
        if digit == x:
            ans += 1
        number = number // 10
    return ans

6-6 使用函数输出指定范围内Fibonacci数的个数

函数接口定义:

在这里描述函数接口。例如:
fib(n),返回fib(n)的值
PrintFN(m,n),用列表返回[m, n]中的所有Fibonacci数。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:
/* 请在这里填写答案 */
m,n,i=input().split()
n=int(n)
m=int(m)
i=int(i)
b=fib(i)
print("fib({0}) = {1}".format(i,b))
fiblist=PrintFN(m,n)
print(len(fiblist))

输入样例:

在这里给出一组输入。例如:

20 100 6

输出样例:

在这里给出相应的输出。例如:

fib(6) = 13
4

代码:

def fib(n):  # 返回fib(n)的值
    if n == 0 or n == 1:
        return 1
    else:
        return fib(n - 1) + fib(n - 2)
def PrintFN(m, n):  # 用列表返回[m, n]中的所有Fibonacci数。
    list1 = []
    for num in range(25):
        if m <= fib(num) <= n:
            list1.append(fib(num))
    return list1

6-7 缩写词

函数接口定义:

acronym(phrase);
phrase是短语参数,返回短语的缩写词

裁判测试程序样例:

/* 请在这里填写答案 */
phrase=input()
print(acronym(phrase))

输入样例:

central  processing  unit

输出样例:

CPU

代码:

def acronym(phrase):
    data = phrase.split()
    # print(data)
    # ['central', 'processing', 'unit']
    ans = ''
    for i in range(len(data)):
        ans += data[i][0].upper()  # upper 小写变大写
    return ans

6-8 jmu-python-发牌

裁判测试程序样例:

import random
/* 请在这里填写答案 */
suit=['♥','♠','♦','♣']
d=['A','2','3','4','5','6','7','8','9','10','J','Q','K']
n=int(input())
random.seed(n)
poker=create()
poker=shufflecard(poker)
for i in range(52):
    print('%-4s'%poker[i],end='  ')
    if i%13==12:
        print()
for i in range(1,5):
    deal(poker,i)

输入样例:

7

输出样例:

♠5    ♣A    ♦6    ♥J    ♣2    ♥Q    ♥A    ♠7    ♠2    ♣Q    ♠4    ♥9    ♦K    
♣6    ♦8    ♣7    ♠Q    ♦4    ♠10   ♥K    ♠9    ♣5    ♦5    ♦3    ♣J    ♣K    
♥8    ♣10   ♠6    ♦10   ♥2    ♦J    ♣4    ♠3    ♣8    ♦A    ♦2    ♥6    ♥3    
♠A    ♦7    ♣9    ♦Q    ♠J    ♥7    ♦9    ♥5    ♥4    ♣3    ♠K    ♥10   ♠8    
第1个玩家拿到的牌是:♠5,♣2,♠2,♦K,♠Q
第2个玩家拿到的牌是:♣A,♥Q,♣Q,♣6,♦4
第3个玩家拿到的牌是:♦6,♥A,♠4,♦8,♠10
第4个玩家拿到的牌是:♥J,♠7,♥9,♣7,♥K

代码:

def create():
    global suit
    global d
    list1 = []
    for su in suit:
        for itd in d:
            list1.append(str(su + itd))
    return list1
def shufflecard(poker):
    random.shuffle(poker)
    return poker
def deal(poker, i):
    print("第{}个玩家拿到的牌是:".format(i), end='')
    temp = i
    for it in range(1, 6):
        if it <= 4:
            print('%s' % poker[temp - 1], end=',')
        else:
            print('%s' % poker[temp - 1], end='\n')
        temp += 4

编程题

7-1 哥德巴赫猜想

输入样例:

24

输出样例:

24 = 5 + 19

代码:

def isPrime(num):
    try:
        num = int(num)
    except:
        return False
    if num <= 1:
        return False
    else:
        for i in range(2, int(pow(num, 0.5)) + 1):
            if num % i == 0:
                return False
                break
        return True
n = int(input())
for i in range(2, n):
    if isPrime(i) and isPrime(n - i):
        break
print("{} = {} + {}".format(n, i, n - i))

7-2 数字金字塔

代码:

print("""    1 
   2 2 
  3 3 3 
 4 4 4 4 
5 5 5 5 5 """)

7-3 jmu-python-凯撒密码加密算法

输入样例:

在这里给出一组输入。例如:

Hello World!
3

输出样例:

在这里给出相应的输出。例如:

Khoor Zruog!

代码:

text = input()
k = int(input())
ans = ''
for i in text:
    if i.isalpha():
        x = ord(i)+k
        if chr(x).isalpha():
            ans += chr(x)
        else:
            ans += chr(x-26)
    else:
        ans += i
print(ans)

7-4 最小公倍数

输入样例:

1 3
15 20

输出样例:

3
60

代码:

import math
while True:
    try:
        a, b = map(int, input().split())
        # print("{:} {:}".format(math.gcd(a, b), int(a * b / math.gcd(a, b))))
        print("{:}".format(int(a * b / math.gcd(a, b))))
    except:
        break

7-5 特立独行的幸福

输入样例 1:

10 40

输出样例 1:

19 8
23 6
28 3
31 4
32 3

注意:样例中,10、13 也都是幸福数,但它们分别依附于其他数字(如 23、31

等等),所以不输出。其它数字虽然其实也依附于其它幸福数,但因为那些数字不在给定区间 [10, 40]

内,所以它们在给定区间内是特立独行的幸福数。

输入样例 2:

110 120

输出样例 2:

SAD

代码:

l,r=input().split()
l,r=int(l),int(r)
list,ans,child=[],[],{} #list存所有的幸福树;ans存独立的幸福树,即不依赖于区间内的其他数字;child存区间内依赖该幸福数(key)的幸福数的个数(value)
for num in range(l,r+1):#枚举区间所有数字
    sum = 0
    tnum = num
    vis={}
    while sum!=1 or vis[sum]<2:
        sum = 0
        for digit in str(tnum):#对一个十进制的各位数字做一次平方和
            sum += int(digit)**2
        vis.setdefault(sum,0)#字典初始化
        vis[sum]+=1 #一次迭代结束 该数字在迭代过程中出现次数+1 
        if(vis[sum]==2):#该数字在迭代过程中出现次数==2 即首次出现死循环 当前枚举的数字num是不幸福数
            break
        tnum = sum
    if(sum==1):#数字num是幸福数 若干次迭代结束时平方和sum==1
        ans.append(num)#存进幸福数数组
        tnum = num
        sum = 0
        child.setdefault(num,0) #计算这个幸福数的独立性 即数依赖于这个数num的幸福数的个数
        while(sum!=1):
            sum = 0
            for digit in str(tnum):
                sum += int(digit) ** 2
            list.append(sum) #对幸福数迭代 迭代过程中出现的数都是幸福数 全部加进list中 但对num进行迭代 幸福数num本身没有进入list,即如果一个幸福数是独立的,在有限区间[l,r]内不依附于其他数字,则不会出现在list中
            tnum = sum
            child[num]+=1 #依赖于幸福数num的幸福数的个数+1 
        #一个幸福数num的child值为num迭代到1的过程中产生的全部sum值的个数 因为迭代到1就结束循环 过程显然是没有产生重复sum值的
import math
def isPrime(n):
    if n <= 1:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True
for item in ans:
    if item not in list:#出现在list中的幸福数都是其他幸福数迭代过程中产生的
        if isPrime(item):
            child[item]*=2
        print(item,child[item])
if(len(ans)==0):
    print("SAD")

7-6 用函数求两个整数的最大公约数和最小公倍数

输入样例:

24 36
-48 128

输出样例:

12 72
16 -384

提示(公约数、公倍数)

提示:a,b里有负的则最小公倍数就为负的

注意要判断正负

代码:

方法1

import math
import sys
# while True:
#     line = sys.stdin.readline()  # 一次只读一行
for line in sys.stdin:
    line = line.strip()
    x = line.split()
    if line == '\n':
        break
    a = int(x[0])
    b = int(x[1])
    # print("{:} {:}".format(math.gcd(a, b), int(a * b / math.gcd(a, b))))
    if a < 0 or b < 0:
        a = abs(a)
        b = abs(b)
        print("{} {}".format(math.gcd(a, b), -int(a * b / math.gcd(a, b))))
    else:
        print("{} {}".format(math.gcd(a, b), int(a * b / math.gcd(a, b))))

方法2

import sys
def gys(a, b):
    for i in range(min(a, b), 0, -1):
        if a % i == 0 and b % i == 0:
            return i
def gbs(a, b):
    for i in range(min(a, b), 0, -1):
        if a % i == 0 and b % i == 0:
            return a * b // i
for i in sys.stdin:
    a, b = list(map(int, i.split()))
    if a < 0 or b < 0:
        a = abs(a)
        b = abs(b)
        print("{} {}".format(gys(a, b), -gbs(a, b)))
    else:
        print("{} {}".format(gys(a, b), gbs(a, b)))


目录
相关文章
|
1月前
|
物联网 Python
2024年Python最全信息技术导论——物联网技术习题整理(1),Python面试题库
2024年Python最全信息技术导论——物联网技术习题整理(1),Python面试题库
2024年Python最全信息技术导论——物联网技术习题整理(1),Python面试题库
|
1月前
|
存储 Python
【python】习题第10周题解
【python】习题第10周题解
27 1
|
1月前
|
Python
【python】习题第9周
【python】习题第9周
29 0
|
1月前
|
自然语言处理 Python
【python】习题第7周(上)
【python】习题第7周(上)
47 1
|
1月前
|
Python
【python】习题 1-5周(上)
【python】习题 1-5周(上)
15 1
|
1月前
|
Python
【python】习题 第10周
【python】习题 第10周
28 0
|
1月前
|
Python
【python】习题第7周(下)
【python】习题第7周(下)
22 0
|
1月前
|
Python
【python】习题 6-10周(下)
【python】习题 6-10周(下)
25 0
|
1月前
|
自然语言处理 数据安全/隐私保护 Python
【python】习题 6-10周(中)
【python】习题 6-10周(中)
34 0
|
1月前
|
Python
【python】习题 6-10周(上)
【python】习题 6-10周(上)
21 0