7个关于Python的经典基础案例

目录
  • 1.列表排序
  • 2.调换字典键值
  • 3.删除列表中的重复元素
  • 4.输出质数
  • 5.判断是一年中第几天
  • 6.猜数字
  • 7.进制转换

1.列表排序

def que6():
    # 6.输入三个整数x, y, z,形成一个列表,请把这n个数由小到大输出。
    # 程序分析:列表有sort方法,所以把他们组成列表即可。
    li = np.random.randint(-100, 100, size=10)
    # 就地转化
    li = li.tolist()
    # 用sort()结果
    li_sort = sorted(li, reverse = False)
    print('用sort方法,重新排列结果:{}'.format(li_sort))

    # 不用sort方法,自己写排序方法做,

    # 冒泡排序
    def bubbleSort(m):
        m = m.copy()
        for time in range(1, len(m)):
            for index in range(len(m) - time):
                if m[index] > m[index+1]:
                    m[index], m[index+1] = m[index+1] , m[index]
        return  m

    # 选择排序
    def selectSort(m):
        m = m.copy()
        for seat_L in range(len(m)-1):
            for seat_R in range(seat_L+1, len(m)):
                if m[seat_L] > m[seat_R]:
                    m[seat_L], m[seat_R] = m[seat_R], m[seat_L]
        return m

    # 插入排序1(内部写成函数):
    def insertSort_1(m):
        result = []

        # 单个元素k插入列表li
        def to_insert(li, k):
            # 标识符
            tab = False

            # 寻找插入位置
            # 循环次数应该至少大于列表长度+1,None也占一位(空列表),即认为扑克牌最末尾还有一张‘空牌'
            for i in range(len(li) + 1):
                # 修改标识符,标志‘遍历完后的下一个循环',即在和‘空牌'比较
                if i == (len(li)):
                    tab = True

                # 如果在对li[-1]比较完成(包含)之前,且寻找到位置,即把扑克从左往右比较一遍
                if not tab and k < li[i]:
                    li.insert(i, k)
                    break
            # 如果遍历完成,多循环一次,即和‘空牌'不需要比较,直接把牌替换掉‘空牌'
            if tab:
                li.append(k)
            return li
        # 遍历列表
        # result = result[:1]
        for length in range(len(m)):
            result = to_insert(result, m[length])

            # print(result,m[length])
        return result

    # 插入排序2(直接嵌套循环):
    def insertSort2(m):
        m = m.copy()
        result = m[:1]
        for index_choose in range(1, len(m)):
            # 手上已经有index_choose张牌,比较第index_choose+1张牌则append
            # 逐个比对手上的牌,如果都对比了一遍,则加到最后
            for index_insert in range(len(result) + 1):
                print(result, index_insert,'\n',m, index_choose,'\n\n')
                if index_insert != index_choose and m[index_choose] < result[index_insert] :
                    result.insert(index_insert, m[index_choose])
                    break
                if index_insert == index_choose:
                    result.append(m[index_choose])
            # print(result, m[index_choose])
        return result

    # print(li)
    print('插入排序:',insertSort3(li))
    print('选择排序:',selectSort(li))
    print('冒泡排序:',bubbleSort(li))
que6()

2.调换字典键值

# 1. 调换元素.\
def que1():
    d={1:"one",2:"two"}

    # 方法1 --- 动态赋值
    def method1(d):
        d = d.copy()
        result = {}
        for k,v in d.items():
            result[v] = k
        return result

    # 方法2 --- 生成器
    def method2(d):
        d = d.copy()
        result = {v:k for k,v in d.items()}
        return result

    # 方法3 --- 由值寻找键
    def method3(d):
        d = d.copy()
        # 由键寻找值
        def match(dic, b):
            return [k for k,v in dic.items() if v == b]
        # 先生成key-None,再赋值
        result = {}
        result = result.fromkeys(d.values())
        for k in result.keys():
            result[k] = match(d, k)[0]
        return result

    # 方法4 --- 列表转字典 < 直接转换/动态赋值 >
    def method4(d):
        d = d.copy()
        key = d.keys()
        val = d.values()
        data = list(zip(key, val))

        # 方法4-1
        result1 = {}
        for i in range(len(data)):
            result1[data[i][1]] = data[i][0]

        # 方法4-2
        result2 = dict(zip(val, key))

        return result1, result2

    print('新列表动态赋值方法:{}'.format(method1(d)))
    print('生成器方法:{}'.format(method2(d)))
    print('由键寻值方法:{}'.format(method3(d)))
    print('动态赋值列表转字典方法:{}'.format(method4(d)[0]))
    print('直接列表转字典方法:{}'.format(method4(d)[1]))
# que1()

3.删除列表中的重复元素

遇到问题没人解答?小编创建了一个Python学习交流群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!

删除重复元素list =[1,2,5,4,1,5,6,8,0,2,5]

a = np.random.randint(-100, 100, size=10)
a = a.tolist()

def method1(a):
    a = a.copy()
    a = set(a)
    return a
def method2(a):
    b = a.copy()
    c = 0
    for i in range(len(a)-1):
        if b[i+c] in b[:i+c]+b[i+c+1:]:
            b.pop(i+c)
            c -= 1
    return b
print('集合法:',method1(a))
print('遍历法:',method2(a))

4.输出质数

def prime(end):

    prime_list = []
    if end <= 1:
        print('必须大于1')
    else:
        # prime_list.append(2)
        for i in range(2, end+1, 1):
            count = 0
            if i == 2:
                if i%2 != 0:
                    prime_list.append(2)
            else:
                for m in range(2, i):
                    # 能够整除,则跳出循环
                    if (i % m) == 0:
                        # print(i, m)
                        break
                    # 否则计数+1
                    else:
                        count += 1
                    # 判断是否整除完成(0/n)
                    if count == i - 2:
                        prime_list.append(i)

                    print(count, i, m)

    return (prime_list)

num = int(input('想输出2到多少?'))
print(prime(num))

5.判断是一年中第几天

def que3():
    # 3.输入某年某月某日,判断这一天是这一年的第几天?:
    # 闰年判断函数
    def judge_leap(num):
        date = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        # (四年一闰 and not百年) or 四百年闰
        if (num % 4 == 0 and num % 100 != 0) or num % 400 ==0:
            date[1] =29
        return date

    # 格式转换
    date = (input('请输入一个日期,格式如:“2018.02.12”:'))
    date_list = (list(map(int, (date.split('.')))))
    # 遍历计算天数
    day = date_list[2]
    for i in range(date_list[1]):
        day += judge_leap(date_list[0])[i]
    print('{}月{}日是{}年的第{}天\n'.format(date_list[1], date_list[2], date_list[0], day))
# que3()

6.猜数字

# 重新猜数字
import random

def judge_num(num, num_random):
    if num > num_random:
        print('It\'s too big')
        return 1
    elif num < num_random:
        print('It\'s too small')
        return 1
    else:
        print("Congratulation!! That\' right!")
        return 0

# 产生随机数
num_start = int(input('Digital lower limit of guess number:\n'))
num_end = int(input('Digital upper limit of guess number:\n'))
num_random = random.randint(num_start, num_end)

# 参数初始化
result = 1      # 判断结果
i = 0           # 循环次数
frequency = 3   # 循环限制次数

# 提示总猜测次数、剩余次数
print('WARNING: You have【{}】 chances you guess '.format(frequency), end = '--&&>>--')
print('【{}】 chances left now:\n'.format(frequency - i +1))

while result and i != frequency:
    # 猜数字
    num = int(input('Please guess a int_number:\n'))
    result = judge_num(num, num_random)
    i += 1

7.进制转换

# 任意进制转十进制
def other_to_decimal(hex, num):
    # 整型转化为列表,
    num_str = str(num)
    # map()将List对象中的元素(list类型)转化为集合(set)类型
    num_list = list(map(int, num_str))
    # 列表反序
    num_list = num_list[::-1]
    print(list(map(int, num_str)))

    # 获取数字位数
    digit = len(num_list)
    num_decimal = 0

    # 累加
    for i in range(digit):
        numi = num_list[i]
        # print(numi, hex**i)
        num_decimal += numi*(hex**i)   # 对每一位数的幂指数累加

    return num_decimal

# 十进制转任意进制
def decimal_to_other(hex, num):
    # 获取数字位数
    digit = len(str(num))

    num_hex = []
    quotient = 1

    # 相除,余数计入列表num_hex
    while quotient:
        # 取余和取商
        quotient = num // hex
        remainder = num % hex
        # print(quotient, remainder)
        # 余数计入列表
        num_hex.append(remainder)
        # 商做下一次循环
        num = quotient

    # 列表反序,通过切片和sort()函数可以实现
    num_hex = num_hex[::-1]
    # num_hex.sort(reverse=True)

    # 如果超过十进制,用ASCII码转化为字母
    for i in range(len(num_hex)):
        if num_hex[i] > 9:
            num_hex[i] = chr(int(num_hex[i])+87)
    # print(num_hex)

    # 列表转化为字符串
    result = (''.join('%s' %m for m in num_hex))
    return result

Type = bool(input("十进制转任意进制请输入1,任意进制转十进制请输入0\n"))
if Type:
    hex = int(input("需要把十进制转换为多少进制?请输入正整数\n"))
    num = int(input("需要转换的数字是:"))
    print("换算结果是:", decimal_to_other(hex, num))
else:
    hex = int(input("需要把多少进制转换为十进制?请输入正整数\n年"))
    num = int(input("需要转换的数字是:"))
    print("换算结果是:", other_to_decimal(hex, num))

到此这篇关于 7个关于Python的经典基础案例的文章就介绍到这了,更多相关Python 经典案例内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python 经典贪心算法之Prim算法案例详解

    最小生成树的Prim算法也是贪心算法的一大经典应用.Prim算法的特点是时刻维护一棵树,算法不断加边,加的过程始终是一棵树. Prim算法过程: 一条边一条边地加, 维护一棵树. 初始 E = {}空集合, V = {任选的一个起始节点} 循环(n – 1)次,每次选择一条边(v1,v2), 满足:v1属于V , v2不属于V.且(v1,v2)权值最小. E = E + (v1,v2) V = V + v2 最终E中的边是一棵最小生成树, V包含了全部节点. 以下图为例介绍Prim算法的执行过程

  • python实现汉诺塔递归算法经典案例

    学到递归的时候有个汉诺塔的练习,汉诺塔应该是学习计算机递归算法的经典入门案例了,所以本人觉得可以写篇博客来表达一下自己的见解.这markdown编辑器还不怎么会用,可能写的有点格式有点丑啦,各位看官多多见谅. 网上找了一张汉诺塔的图片,汉诺塔就是利用用中间的柱子把最左边的柱子上的圆盘依次从大到小叠上去,说白了就是c要跟原来的a一样 废话少说,先亮代码 def move(n, a, buffer, c): if(n == 1): print(a,"->",c) return mov

  • Python中文分词工具之结巴分词用法实例总结【经典案例】

    本文实例讲述了Python中文分词工具之结巴分词用法.分享给大家供大家参考,具体如下: 结巴分词工具的安装及基本用法,前面的文章<Python结巴中文分词工具使用过程中遇到的问题及解决方法>中已经有所描述.这里要说的内容与实际应用更贴近--从文本中读取中文信息,利用结巴分词工具进行分词及词性标注. 示例代码如下: #coding=utf-8 import jieba import jieba.posseg as pseg import time t1=time.time() f=open(&q

  • 7个关于Python的经典基础案例

    目录 1.列表排序 2.调换字典键值 3.删除列表中的重复元素 4.输出质数 5.判断是一年中第几天 6.猜数字 7.进制转换 1.列表排序 def que6(): # 6.输入三个整数x, y, z,形成一个列表,请把这n个数由小到大输出. # 程序分析:列表有sort方法,所以把他们组成列表即可. li = np.random.randint(-100, 100, size=10) # 就地转化 li = li.tolist() # 用sort()结果 li_sort = sorted(li

  • Python面向对象编程基础解析(一)

    1.什么是面向对象 面向对象(oop)是一种抽象的方法来理解这个世界,世间万物都可以抽象成一个对象,一切事物都是由对象构成的.应用在编程中,是一种开发程序的方法,它将对象作为程序的基本单元. 2.面向对象与面向过程的区别 我们之前已经介绍过面向过程了,面向过程的核心在'过程'二字,过程就是解决问题的步骤,面向过程的方法设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题简单化,流程化 缺点:扩展性差 主要应用场景有:Linux内核,git,以及http服务 面向对象的程序设计

  • Python装饰器基础概念与用法详解

    本文实例讲述了Python装饰器基础概念与用法.分享给大家供大家参考,具体如下: 装饰器基础 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自己编写新的装饰器的更多高级语法. 什么是装饰器 装饰是为函数和类指定管理代码的一种方式.Python装饰器以两种形式呈现: [1]函数装饰器在函数定义的时候进行名称重绑定,提供一个逻辑层来管理函数和方法或随后对它们的调用. [2]类装饰器在类定义的时候进行名称重绑定,提供一个逻辑层来管理类,或管理随

  • Python面向对象编程基础实例分析

    本文实例讲述了Python面向对象编程基础.分享给大家供大家参考,具体如下: 1.类的定义 Python中类的定义与对象的初始化如下,python中所有类的父类是object,需要继承. 由于Python是动态语言,因此可以直接为对象添加属性并赋值而不必在类定义中声明 class Person(object): # 定义一个Person类 pass p = Person() # 初始化一个Person对象 p.name="xiaoming" # 对象属性赋值 Python的类初始化方法

  • python SOCKET编程基础入门

    一.UDP编程 1.客户端Client:发起访问的一方. 2.服务器端 3.server段编程 (1)建立socket,socket是负责具体通信的一个实例 (2)绑定,为创建的socket指派固定的端口和IP地址 (3)接受对方发送内容 (4)给对方发送反馈,此步骤为非必须步骤 4.Client端编程 (1)建立通信的socket (2)发送内容到指定服务器 (3)接受服务器给定的反馈内容 5.模拟一下这个过程 (1)我们先建立一个服务器的函数 #服务器案例 import socket ​ #

  • python实现CTC以及案例讲解

    在大多数语音识别任务中,我们都缺少文本和音频特征的alignment,Connectionist Temporal Classification作为一个损失函数,用于在序列数据上进行监督式学习,可以不需要对齐输入数据及标签. 对于输入序列 X = [ x 1 , x 2 , . . , x T ] X=[x_1, x_2, .., x_T] X=[x1​,x2​,..,xT​] 和 输出序列 Y = [ y 1 , y 2 , . . . , y U ] Y = [y_1, y_2, ...,

  • Python numpy生成矩阵基础用法实例代码

    目录 1.numpy.array() 可以把列表转换为矩阵 2.numpy.arange() 生成一个向量 3.numpy.ones() 生成一个全是1的矩阵, 里面填入矩阵范围 4.numpy.zeros() 生成一个全是0的矩阵, 里面填入矩阵范围 5.numpy.eye()  可填入两个参数分别代表行和列,也可只填一个参数,即为方阵 6.numpy.empty() 返回一个没有经过初始化的一个矩阵 7.numpy.linspace  返回在指定的范围内确定个数的等间距的一组数的向量 补充:

  • Python中sorted()用法案例代码

    目录 Python中sorted()用法 sorted() 作为 Python 内置函数之一,其功能是对序列(列表.元组.字典.集合.还包括字符串)进行排序. sorted() 函数的基本语法格式如下: list = sorted(iterable, key=None, reverse=False) 其中,iterable 表示指定的序列,key 参数可以自定义排序规则:reverse 参数指定以升序(False,默认)还是降序(True)进行排序.sorted() 函数会返回一个排好序的列表.

  • Python面向对象编程基础解析(二)

    Python最近挺火呀,比鹿晗薛之谦还要火,当然是在程序员之间.下面我们看看有关Python的相关内容. 上一篇文章我们已经介绍了部分Python面向对象编程基础的知识,大家可以参阅:Python面向对象编程基础解析(一),接下来,我们看看另一篇. 封装 1.为什么要封装? 封装就是要把数据属性和方法的具体实现细节隐藏起来,只提供一个接口.封装可以不用关心对象是如何构建的,其实在面向对象中,封装其实是最考验水平的 2.封装包括数据的封装和函数的封装,数据的封装是为了保护隐私,函数的封装是为了隔离

  • Python多线程经典问题之乘客做公交车算法实例

    本文实例讲述了Python多线程经典问题之乘客做公交车算法.分享给大家供大家参考,具体如下: 问题描述: 乘客乘坐公交车问题,司机,乘客,售票员协同工作,通过多线程模拟三者的工作. 司机:开车,停车 售票员:打开车门,关闭车门 乘客:上车,下车 用Python的Event做线程同步通信,代码如下: # *-* coding:gb2312 *-* import threading import time stationName=("车站0","车站1","车

随机推荐