Python.习题七 函数(上)

1.“吃饭,睡觉,打豆豆”是网络上最为流行的小笑话之一,这则笑话的具体内容如下。
有个记者去南极采访一群企鹅。
他问第一只企鹅:“你每天都做什么?”企鹅说:“吃饭,睡觉,打豆豆!”接着又问第二只企鹅:“你每天都做什么?”企鹅说:“吃饭,睡觉,打豆豆!”接着又问第三只企鹅:“你每天都做什么?”企鹅说:“吃饭,睡觉,打豆豆!”…记者带着困惑问其他的企鹅,答案都一样,就这样一直问了99只企鹅。当走到第100只小企鹅旁边时,记者问他:“你每天都做什么?”那只小企鹅回答:“吃饭,睡觉。”记者惊奇的又问:“你怎么不打豆豆?”小企鹅撇着嘴:,瞪了记者一眼说:“我就是豆豆!”请编写一个程序,要求如下:
(1)编写一个函数用来描述记者与这100只企鹅对话的全过程,其输出格式为
记者问第1只企鹅:“你每天都做什么?”企鹅说:“吃饭,睡觉,打豆豆!”
记者问第2只企鹅:“你每天都做什么?”企鹅说:“吃饭,睡觉,打豆豆!”

记者问第99只企鹅:“你每天都做什么?”企鹅说:“吃饭,睡觉,打豆豆!”
记者问第100只企鹅:“你每天都做什么?”企鹅说:“吃饭,睡觉,我就是豆豆!”

(2)在主程序下测试该函数。

def interview():
    for n in range(1, 100):
        print('记者问第{}只企鹅:“你每天都做什么?”企鹅说:“吃饭,睡觉,打豆豆!”'.format(n))
    print('记者问第100只企鹅:“你每天都做什么?”企鹅说:“吃饭,睡觉,我就是豆豆!”')


interview()

输出结果

在这里插入图片描述

2.以下为输出韩国流行歌曲Nobady一段歌词(有修改)的代码,

print(‘I want nobody nobody but you’)
print(‘I want nobody nobody but you’)
print(‘How can i be with another’)
print(“I don’t want any other”)
print(‘I want nobody nobody but you’)
print(‘I want nobody nobody but you’)
print(‘I want nobody nobody but you’)

请将上述代码中的重复部分抽象(定义)成一个函数,并在主程序中调用该函数,以使源代码显得更简洁一些。

def nobody(n):
    for i in range(n):
        print('I want nobody nobody but you')


nobody(2)
print('How can i be with another')
print("I don't want any other")
nobody(3)

输出结果

I want nobody nobody but you
I want nobody nobody but you
How can i be with another
I don't want any other
I want nobody nobody but you
I want nobody nobody but you
I want nobody nobody but you

3.编写isOdd()函数,该函数应有一个整数参数,如果该参数为奇数,函数返回True,否则返回Flase。最后在主程序中测试该函数。

def isOdd(n):
    return n % 2 != 0


n = int(input('输入一个整数:'))
print(f'{n}是奇数') if isOdd(n) else print(f'{n}不是奇数')

输出样例

输入一个整数:62
62不是奇数

4.按如图所示的流程进行计算,若开始输入的x的值为正数,最后输出的结果为656,请编程输出符合条件的x的值。

在这里插入图片描述

def fun(n):
    while (n - 1) / 5 > 0:
        n = (n - 1) / 5
    return n


print(fun(656))

5.2016年,微信朋友圈中曾疯传“手机尾号暴露你的年龄”,其算法如下:看一下你手机号的最后一位;把这个数字×2;然后加上5;再×50;把得到的数加上1766;用这个数-你出生的那一年,现在得到一个新的数字,该数的最后两位就是你的实际年龄。(本规则仅适用于年龄在100岁以内的人)。
现在,请解决以下问题:
(1)编写一个函数,该函数有两个参数:一个参数为手机号最后一位;另一个参数为四位数的出生年份该函数最后返回按照上述规则计算出来的年龄。
(2)在主程序中,测试该函数,该函数能正确反映出你的真实年龄吗?如果不能,如何修改计算规则?
 

def fun(m, n):
    return ((m * 2 + 5) * 50 + 1766 - n) % 100


m = int(input('请输入手机号最后一位:'))
n = int(input('请输入四位出生年份:'))
print(fun(m, n))

在这里插入图片描述

6.编写一个程序,在主程序中求1900~2020年中所有的闰年,每行输出5个年份。闰年即能被4整除,但不能被100整除,或者能被400整除的年份。要求定义一个函数isLeap(),该函数用来判断某年是否为闰年,是闰年则函数返回True,否则返回Flase。

def isLeapYear(year):
    return year % 400 == 0 or (year % 4 == 0 and year % 100 != 0)


count = 0
for n in range(1900, 2021):
    if isLeapYear(n) :
        print(n, end='\t')
        count += 1
        if count % 5 == 0:
            print()

7.编写一个函数,求一个正整数n的各位数字之和,并在主程序中测试该函数。

def fun(n):
    sum = 0
    for i in str(n):
        sum += int(i)
    return sum


def fun2(n):
    ls = [int(c) for c in str(n)]
    return sum(ls)


def fun3(n):
    ls = list(map(int, str(n)))
    return sum(ls)


count = 0
n = eval(input('Enter a integer:'))
print(f'{n}各位数之和为:{fun(n)}')
print(f'{n}各位数之和为:{fun2(n)}')
print(f'{n}各位数之和为:{fun3(n)}')

8.求出所有符合下列条件的三位正整数:分别乘以3、4、5、6、7后得到的整数的各位数字之和都相等。输入示例:

在这里插入图片描述

def fun(n):
    ls = [int(c) for c in str(n)]
    return sum(ls)


count = 0
for n in range(100, 1000):
    if fun(n) == fun(n * 3) == fun(n * 4) == fun(n * 5) == fun(n * 6) == fun(n * 7):
        count += 1
        print(f"x={n}: x*3={n * 3}, x*4={n * 4}, x*5={n * 5}, x*6={n * 6}, x*7={n * 7}")
print(f"共有{count}个符合条件的三位数")

在这里插入图片描述

9.在主程序中输入一个整数n,判断该数是否为完数。所谓完数,是一些特殊的自然数,它所有的真因子(即除了自身以外的约束)的和,恰好等于它本身。如6=1+2+3,所以6是完数。要求定义一个函数,用来判断某个整数是否未完数,是完数则函数返回1,否则返回0。最后在主程序中测试该函数。

def fun(n):
    s = 0
    for i in range(1, n):
        if n % i == 0:
            s = s + i
    return 1 if s == n else 0


def fun2(n):
    ls = [i for i in range(1, n) if n % i == 0]
    return 1 if sum(ls) == n else 0


n = int(input('请输输入一个整数:'))
print(f'{n}是完数') if fun(n) == 1 else print(f'{n}不是完数')
print(f'{n}是完数') if fun2(n) == 1 else print(f'{n}不是完数')

10.

在这里插入图片描述

def fun(m, n):
    ls = [i ** m for i in range(1, n + 1)]
    return sum(ls)


print(fun(1, 100) + fun(2, 50) + fun(-1, 10))

在这里插入图片描述

11.

在这里插入图片描述

def fun(a, n):
    s = 0
    item = 0
    for i in range(n):
        item = item * 10 + a
        s += item
    return s


def fun2(a, n):
    s = 0
    for i in range(1, n + 1):
        s += int(str(a) * i)
    return s


def fun3(a, n):
    ls = [int(str(a) * i) for i in range(1, n + 1)]
    return sum(ls)


a, n = eval(input("输入a和n[用逗号分隔]:"))
s = fun(a, n)
print(f"若a={a},n={n},则s=a+aa+aaa+...+aaa...aaa={s}")
s = fun2(a, n)
print(f"若a={a},n={n},则s=a+aa+aaa+...+aaa...aaa={s}")
s = fun3(a, n)
print(f"若a={a},n={n},则s=a+aa+aaa+...+aaa...aaa={s}")

在这里插入图片描述

12.

在这里插入图片描述

import random


def redPacket1(money=100, number=15):
    ls = []
    for n in range(number - 1):
        lucky_money = random.uniform(0.01, money - (number - 1 - n) * 0.01)
        lucky_money = round(lucky_money, 2)
        ls.append(lucky_money)
        money = money - lucky_money
    ls.append(round(money, 2))
    return ls


def redPacket2(money=100, number=15):
    ls = []
    for n in range(number - 1):
        lucky_money = random.uniform(0.01, money / (number - n) * 2)
        lucky_money = round(lucky_money, 2)
        ls.append(lucky_money)
        money = money - lucky_money
    ls.append(round(money, 2))
    return ls


def redPacket3(money=100, number=15):
    money = money * 100
    ls = []
    for n in range(number - 1):
        lucky_money = random.randint(1, int(money / (number - n) * 2))
        ls.append(lucky_money / 100)
        money = money - lucky_money
    ls.append(money / 100)
    return ls


a = redPacket1()
print(a)
print(sum(a))

a = redPacket2()
print(a)
print(sum(a))

a = redPacket3()
print(a)
print(sum(a))

a = redPacket3(1000)
print(a)
print(sum(a))

a = redPacket3(1000, 20)
print(a)
print(sum(a))

a = redPacket3(10, 6)
print(a)
print(sum(a))

# money = float(input('红包总金额:'))
# number = int(input('红包数量:'))
# print(redPacket(money, number))

在这里插入图片描述

13.编写一个函数isdiff(n),用来判断参数n的各位数字是否互不相同,若互不相同,则返回1,否则返回0,并在主程序中测试该函数。

def isdiff(n):
    s = str(n)
    for i in s:
        if s.count(i) > 1:
            return 0
    else:
        return 1


def isdiff2(n):
    a = str(n)
    b = set(a)
    return 1 if len(a) == len(b) else 0


n = int(input('请输入一个正整数:'))
if isdiff(n) == 1:
    print(f'{n}的各位数字互不相同')
else:
    print(f'{n}中有重复数字')

if isdiff2(n) == 1:
    print(f'{n}的各位数字互不相同')
else:
    print(f'{n}中有重复数字')

在这里插入图片描述

14.编写一个函数,接受一个列表参数,函数返回该列表中所有正数之和。最后在主程序中测试该函数。

def fun(ls):
    _ls = [i for i in ls if i > 0]
    return sum(_ls)


def fun2(ls):
    _ls = filter(lambda n: n > 0, ls)
    return sum(_ls)


ls = eval(input('请按照列表格式输入列表元素:'))
print(f'该列表中所有正数之和为:{fun(ls)}')
print(f'该列表中所有正数之和为:{fun2(ls)}')

在这里插入图片描述

15.重复元素判定。编写一个函数,接受一个列表最为参数,如果一个元素在列表中出现了不止一次,则返回True,但不要改变源列表的值。最后在主程序中测试该函数。

def fun(ls):
    for n in ls:
        if ls.count(n) > 1:
            return True
    else:
        return False


def fun2(ls):
    return len(set(ls)) < len(ls)


ls = eval(input('请按照列表格式输入列表元素:'))
if fun(ls) == True:
    print('该列表中存在重复元素')
else:
    print('该列表中不存在重复元素')

if fun2(ls) == True:
    print('该列表中存在重复元素')
else:
    print('该列表中不存在重复元素')

在这里插入图片描述

整理实属不易,请多多点赞+关注

Python.习题七 函数(上)_第1张图片

 

 

 

 

 

 

 

 

你可能感兴趣的:(python)