2019-08-03

作业

import random
import math

1.写一个匿名函数,判断指定的年是否是闰年

func_1 = lambda years: (years % 4 == 0 or years % 100 != 0) and years % 400 == 0

print(func_1(2001))  # False
print(func_1(2000))  # True

2.写一个函数将一个指定的列表中的元素逆序

(如[1, 2, 3] -> [3, 2, 1])(注意:不要使用列表自带的逆序函数)

1.用新列表保存

def reverse_order(list_1: list):
    list_2 = []
    for i in list_1[-1::-1]:

        list_2.append(i)
    return list_2


print(reverse_order([1, 2, 3]))  # [3, 2, 1]

2.不产生新列表

def reverse_order(list_1: list):
    list_2 = list_1
    for i in list_2[-1::-1]:
        list_1.remove(i)
        list_1.append(i)
    return list_1


print(reverse_order([1, 2, 3]))  # [3, 2, 1]

3.写一个函数,获取指定列表中指定元素的下标(如果指定元素有多个,将每个元素的下标都返回)

例如: 列表是:[1, 3, 4, 1] ,元素是1, 返回:0,3

def list_re(list_2: list, li):
    list_3 = []
    for i in range(0, len(list_2)):
        if li == list_2[i]:
            list_3.append(i)
    return list_3


print(list_re([1, 3, 4, 2, 1, 5, 2, 1], 1))  # [0, 4, 7]

4.写一个函数,能够将一个字典中的键值对添加到另外一个字典中(不使用字典自带的update方法)

def dict_upper(dict_1: dict, dict_2: dict):
    for key in dict_1:
        dict_2[key] = dict_1[key]  # 字典添加键值对的方式  字典[key] = 值
    return dict_2


print(dict_upper({"a": 1, "b": 2}, {"c": 3}))  # {'c': 3, 'a': 1, 'b': 2}

5.写一个函数,能够将指定字符串中的所有的小写字母转换成大写字母;

所有的大写字母转换成小写字母(不能使用字符串相关方法)

def letter_self(chars: str):
    new_str = ""
    for char in chars:
        if 'A' <= char <= 'Z':
            new_str += chr(ord(char) + 32)
        elif 'a' <= char <= 'z':
            new_str += chr(ord(char) - 32)
        else:
            new_str += char
    return new_str


print(letter_self("133dkffSDGGLS"))   # 133DKFFsdggls

6.实现一个属于自己的items方法,可以将指定的字典转换成列表。

列表中的元素是小的列表,里面是key和value (不能使用字典的items方法)

例如:{'a':1, 'b':2} 转换成 [['a', 1], ['b', 2]]

字典无序,不支持下标操作

def dict_items(dict_3: dict):
    list_d_1 = []
    # list_d_2 = []
    for key in dict_3:
        list_d_2 = []
        list_d_2.append(key)
        list_d_2.append(dict_3[key])
        # print(list_d_2)
        list_d_1.append(list_d_2)
    return list_d_1


print(dict_items({"a": 1, "b": 2}))  # [['a', 1], ['b', 2]]

7.用递归函数实现,逆序打印一个字符串的功能:

例如:reverse_str('abc') -> 打印 ‘cba’

def reverse_ord(chars):
    length = len(chars)
    if length == 1:
        print(chars)
        return
    else:
        print(chars[length-1], end="")
        chars = chars[0:(length-1)]   # 当字符串长度大于1的时候每次打印后 新的字符串是原来字符串切去最后一个字符产生的
        reverse_ord(chars)


reverse_ord("abc")

8.编写一个递归函数,求一个数的n次方

def secondary_power(number: int, n: int):

    if n == 1:
        return number
    else:
        return secondary_power(number, n-1) * number  # 括号内的number在此并无实在意义,只是参数列表有不能省略


print(secondary_power(2, 4))

9.写一个可以产生学号的生成器, 生成的时候可以自定制学号数字位的宽度和学号的开头

def id_generate(number: int, width: int, start: str):
    # new_str = ""
    # count = 0
    for n in range(1, number+1):
        str_1 = str(n)
        new_str = start + str_1.zfill((width - len(start)))
        # print(new_str)
        yield new_str


f = id_generate(3, 8, "py")
print(next(f))
print(next(f))
print(next(f))

10.编写代码模拟达的鼠的小游戏,

假设一共有5个洞口,老鼠在里面随机一个洞口;

人随机打开一个洞口,如果有老鼠,代表抓到了

如果没有,继续打地鼠;但是地鼠会跳到其他洞口

def wha_a_mole(frequency: int):   # 最多抓取次数
        count = 1
        for i in range(frequency+1):
            hole_num = random.randint(1, 5)
            mouse = random.randint(1, 5)
            if hole_num != mouse:
                # print("没抓到吧!")
                count += 1
            elif count > frequency:
                print("你可太差劲了!被老鼠逗了")
            else:
                print("抓到了,一共抓了%d次" % count)
                break


wha_a_mole(10)

11.编写一个函数,计算一个整数的各位数的平方和

def squares_sum(integer: int):
    sum_squares = 0
    while integer > 0:
        remainder = 0
        remainder = integer % 10
        integer //= 10
        sum_squares += remainder**2
    else:
        return sum_squares


print(squares_sum(12))

12楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,

编程序计算共有多少种不同的走法?需求: 编制一个返回值为整型的函数Fib(n),用于获取n阶台阶的走法

实质上是一个斐波拉契数列

def up_steps(steps_num: int):

    if steps_num == 1:
        return 1
    elif steps_num == 2:
        return 2
    else:
        return up_steps(steps_num - 2) + up_steps(steps_num - 1)


print(up_steps(6))

13.写一个函数对指定的数分解因式

def factor(number: int):
    i = 2
    list_1 = []
    while i <= number:
        if number % i == 0:
            list_1.append(i)

            number /= i
        else:
            i += 1
    if len(list_1) == 1:  # 如果传入的数本身是个质数,则在它的因数列表中插入1
        list_1.insert(0, 1)
        # print(list_1)
    return list_1


print(factor(3))

14.写一个函数判断指定的数是否是回文数

123321是回文数 12321是回文数 525是回文数

1.算法实现

def pal_number(number: int):
    number_1 = str(number)
    length = len(number_1)
    for i in range(0, length):
        if number_1[i] == number_1[length - i-1]:
            flag = 1
        else:
            flag = 0
    if flag == 1:
        print("是回文数")
    else:
        print("不是回文数")


pal_number(12321)

2.利用字符串reverse函数逆序

def pal_number(number: int):
    char_1 = str(number)
    char_2 = "".join(reversed(char_1))
    if char_1 == char_2:
        print("是回文数")
    else:
        print("不是回文数")


pal_number(12321)

15.写一个函数判断一个数是否是丑数(自己百度丑数的定义)

def ugliness_number(number):
    list_1 = []
    i = 2
    while i <= number:
        if number % i == 0:
            list_1.append(i)
            number /= i
        else:
            i += 1
    # print(list_1)
    set_1 = set(list_1)
    set_2 = {2, 3, 5}
    if set_2 > set_1 or set_2 == set_1:
        print("是丑数")
    else:
        print("不是丑数")


ugliness_number(30)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 要自己实现一个RPC框架,主要三个技术点 (1)服务寻址 • (2)数据流的序列化和反序列化 • (3)网络传输 ...
    hangzhou吴彦祖阅读 1,735评论 0 0
  • 一、难点: 1.产生随机数:srand((unsignedint)time(NULL));inttemp=rand...
    kkkk小天使阅读 1,456评论 0 0
  • 之前写过动画函数 但是这样的封装比较局限,只能是改变元素的style,而封装成increase这个样的函数,应用场...
    dmengmeng阅读 2,444评论 0 0
  • 2019年初,高露等明星开始在淘宝直播上开启好物分享;2019年4月,李湘入淘,成为“主播李湘”;而后王祖蓝也来到...
    雨中的悲伤01阅读 1,547评论 0 0
  • 前年夏天,女儿参加苏州公益活动,那是一场国际心理协会的沙龙。通过她的这次公益实习,我了解到,心理疗愈的方式,除了常...
    热爱生活的Alice阅读 3,462评论 0 7