趣味Python100例初学者练习01
1. 1 抓交通肇事犯
一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下了车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:4位的车号刚好是一个整数的平方。
请根据以上线索求出车号。
if __name__ == '__main__':for i in range(10): # 牌照的前两位数字for j in range(10): # 牌照的后两位数字if i != j: # 前两位不同x = 1000 * i + 100 * i + 10 * j + jfor m in range(31, 100): # 4位的车号刚好是一个整数的平方if m * m == x:print("车牌号为:", x)
1.2 兔子产子
有一对兔子,从出生后的第3个月起每个月都生一对兔子。小免子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问n个月内每个月的兔子总对数为多少?
if __name__ == '__main__':rb1 = 1 # 第一个月的兔子对数rb2 = 1 # 第二个月的兔子对数n = int(input("请输入您查询月份:"))if n <= 2:print(f"前 {n} 个月的兔子总对数为 1 对")else:for i in range(3, n + 1): # 从第3个月开始计算sum_rb = rb1 + rb2rb2 = rb1rb1 = sum_rbprint(f'{n} 个月后兔子总对数为:{sum_rb}')
1.3 牛顿选代法求方程根
编写用牛顿迭代法求方程根的函数。方程为ax^3+bx^2+cx+d=0,系数a、b、c、d由主函数输入,求x在1附近的一个实根。求出根后,由主函数输出。
def newton_method(a, b, c, d, x0, tol=1e-6, max_iter=100):"""牛顿迭代法求解方程 ax^3 + bx^2 + cx + d = 0 的根:param a: 三次项系数:param b: 二次项系数:param c: 一次项系数:param d: 常数项:param x0: 初始猜测值:param tol: 容差,默认 1e-6:param max_iter: 最大迭代次数,默认 100:return: 求得的实根"""def f(x):return a * x ** 3 + b * x ** 2 + c * x + d # 定义方程 f(x)def f_prime(x):return 3 * a * x ** 2 + 2 * b * x + c # 定义导数 f'(x)x = x0 # 初始猜测值for i in range(max_iter):fx = f(x)fpx = f_prime(x)if abs(fx) < tol: # 如果 f(x) 接近 0,则认为找到了根return xif fpx == 0: # 如果导数为 0,无法继续迭代raise ValueError("导数为 0,无法继续迭代")x = x - fx / fpx # 牛顿迭代公式return x # 返回最终的近似根if __name__ == '__main__':# 输入方程的系数a = float(input("请输入系数 a: "))b = float(input("请输入系数 b: "))c = float(input("请输入系数 c: "))d = float(input("请输入系数 d: "))# 初始猜测值为 1 附近的点x0 = 1.0# 调用牛顿迭代法求解try:root = newton_method(a, b, c, d, x0)print(f"方程的一个实根为: {root:.6f}")except ValueError as e:print(e)
1.4 百钱百鸡
中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只?
if __name__ == '__main__':for x in range(20):for y in range(33):for z in range(100):if 5 * x + 3 * y + (z / 3 == 100):if x + y + z == 100:print(x, y, z)
1.5 借书方案知多少
小明有5本新书,要借给A、B、C三位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?
if __name__ == '__main__':total = 0for a in range(1, 6):for b in range(1, 6):for c in range(1, 6):if a != b and b != c and a != c:total += 1print(f"{a},{b},{c}")print(f"{total}种")
1.6 打鱼还是晒网
中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起便开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
def is_leap_year(year):"""判断某一年是否为闰年:param year: 年份:return: True 是闰年,False 不是闰年"""return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)def days_from_1990(year, month, day):"""计算从 1990 年 1 月 1 日到给定日期的总天数:param year: 目标年份:param month: 目标月份:param day: 目标日期:return: 总天数"""# 每个月的天数month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]total_days = 0# 计算 1990 年到目标年份之间的天数for y in range(1990, year):total_days += 366 if is_leap_year(y) else 365# 计算目标年份中 1 月到目标月份之间的天数for m in range(1, month):total_days += month_days[m - 1]if m == 2 and is_leap_year(year): # 闰年 2 月多一天total_days += 1# 加上目标日期的天数total_days += day - 1 # 减去 1,因为 1990 年 1 月 1 日是第 1 天return total_daysdef fishing_or_drying(year, month, day):"""判断某一天是“打鱼”还是“晒网”:param year: 目标年份:param month: 目标月份:param day: 目标日期:return: "打鱼" 或 "晒网""""total_days = days_from_1990(year, month, day)remainder = total_days % 5 # 5 天为一个周期if remainder < 3: # 余数为 0、1、2 表示“打鱼”return "打鱼"else: # 余数为 3、4 表示“晒网”return "晒网"if __name__ == '__main__':# 输入目标日期year = int(input("请输入年份: "))month = int(input("请输入月份: "))day = int(input("请输入日期: "))total_days = days_from_1990(year,month,day)# 判断是“打鱼”还是“晒网”result = fishing_or_drying(year, month, day)print(f"{year}年{month}月{day}日,这一天相差{total_days}天,这一天在{result}。")
1.7 最佳存款方案
假设银行一年整存零取的月息为0.63%。现在某人手中有一笔钱,他打算在今后5年中的每年年底取出1000元,到第5年时刚好取完,请算出他存钱时应存入多少。
if __name__ == '__main__':m = 0.0063money = 0.0for i in range(1,6):money = (money + 1000) / (1 + m * 12)print(f"存钱时应存入{money}")
1.8 冒泡排序
对N个整数(数据由键盘输入)进行升序排列。
if __name__ == '__main__':# 获取用户输入并去除首尾的空白字符x = input().strip()# 以空白字符为分隔符将输入字符串分割成多个字符串,再把这些字符串转换为整数,形成列表a = list(map(int, x.split()))# 获取列表的长度n = len(a)# 冒泡排序for i in range(n):for j in range(0, n - i - 1):if a[j] > a[j + 1]:# 交换相邻元素的位置a[j], a[j + 1] = a[j + 1], a[j]print(a)
1.9 折半查找
N个有序整数数列已放在一维数组中,利用二分查找法查找整数m在数组中的位置。若找到,则输出其下标值;反之,则输出“Not be found!"
def binary_search(arr, m):# 初始化左右指针left, right = 0, len(arr) - 1while left <= right:# 计算中间元素的索引mid = (left + right) // 2if arr[mid] == m:# 找到目标值,返回其下标return midelif arr[mid] < m:# 目标值在右半区间,更新左指针left = mid + 1else:# 目标值在左半区间,更新右指针right = mid - 1# 未找到目标值return -1if __name__ == "__main__":# 从键盘输入有序整数数列,以空格分隔input_str = input("请输入有序整数数列(以空格分隔):").strip()arr = list(map(int, input_str.split()))# 从键盘输入要查找的整数m = int(input("请输入要查找的整数 m:"))# 调用二分查找函数result = binary_search(arr, m)if result != -1:print(f"整数 {m} 在数组中的下标是:{result}")else:print("Not be found!")
1.10 数制转换
给定一个M进制的数x,实现对x向任意一个非M进制的数的转换。
def m_to_decimal(x, m):"""将 M 进制的数 x 转换为十进制数:param x: M 进制的数,字符串类型:param m: M 进制:return: 十进制数"""decimal_num = 0power = len(x) - 1for digit in x:if digit.isdigit():value = int(digit)else:# 处理字母表示的数字,如 A 表示 10,B 表示 11 等value = ord(digit.upper()) - ord('A') + 10decimal_num += value * (m ** power)power -= 1return decimal_numdef decimal_to_n(decimal_num, n):"""将十进制数转换为 N 进制的数:param decimal_num: 十进制数:param n: 目标进制:return: N 进制的数,字符串类型"""if decimal_num == 0:return '0'result = ''while decimal_num > 0:remainder = decimal_num % nif remainder < 10:result = str(remainder) + resultelse:# 处理大于 9 的余数,用字母表示result = chr(ord('A') + remainder - 10) + resultdecimal_num //= nreturn resultdef convert_number(x, m, n):"""将 M 进制的数 x 转换为 N 进制的数:param x: M 进制的数,字符串类型:param m: M 进制:param n: 目标进制:return: N 进制的数,字符串类型"""# 先将 M 进制的数转换为十进制数decimal_num = m_to_decimal(x, m)# 再将十进制数转换为 N 进制的数return decimal_to_n(decimal_num, n)# 示例使用
if __name__ == "__main__":x = input("请输入 M 进制的数: ")m = int(input("请输入当前进制 M: "))n = int(input("请输入目标进制 N: "))result = convert_number(x, m, n)print(f"{m} 进制的数 {x} 转换为 {n} 进制的数是: {result}")
相关文章:

趣味Python100例初学者练习01
1. 1 抓交通肇事犯 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下了车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前…...
postgresql的用户、数据库和表
在 PostgreSQL 中,用户、数据库和表是关系型数据库系统的基本组成部分。理解这些概念对数据库管理和操作至关重要。下面是对这些概念的详细解释: 1. 用户(User) 在 PostgreSQL 中,用户(也称为 角色&#…...

对游戏宣发的粗浅思考
1.两极分化 认真观摩了mgs系列制作人的x账号, 其更新频率吓死人,一天能发几十条之多,吓死人。大部分都是转发相关账号的ds2或mgs相关内容, 每日刻意的供给这些内容来满足几十万粉丝需求,维护热情。 幕后是专业的公…...
【Java基础-42.3】Java 基本数据类型与字符串之间的转换:深入理解数据类型的转换方法
在 Java 开发中,基本数据类型与字符串之间的转换是非常常见的操作。无论是从用户输入中读取数据,还是将数据输出到日志或界面,都需要进行数据类型与字符串之间的转换。本文将深入探讨 Java 中基本数据类型与字符串之间的转换方法,…...

(9) 上:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同
(1)经过之前的学习。俺认为结论是这样的,因为三次握手到四次挥手,到 RST 报文,都是 tcp 连接上收到了报文,这都属于读事件。所以: EPOLLIN : 包含了读事件, FIN 报文的正常四次挥手、…...

webpack传输性能优化
手动分包 基本原理 手动分包的总体思路是:先打包公共模块,然后再打包业务代码。 打包公共模块 公共模块会被打包成为动态链接库(dll Dynamic Link Library),并生成资源清单。 打包业务代码 打包时,如果…...

智能小区物业管理系统打造高效智能社区服务新生态
内容概要 随着城市化进程的不断加快,智能小区物业管理系统的出现,正逐步改变传统物业管理的模式,为社区带来了崭新的管理理念和服务方式。该系统不仅提升了物业管理效率,还加强了业主与物业之间的互动,为每位居民提供…...

(done) MIT6.S081 2023 学习笔记 (Day7: LAB6 Multithreading)
网页:https://pdos.csail.mit.edu/6.S081/2023/labs/thread.html (任务1教会了你如何用 C 语言调用汇编,编译后链接即可) 任务1:Uthread: switching between threads (完成) 在这个练习中,你将设计一个用户级线程系统中的上下文切…...
面试经典150题——栈
文章目录 1、有效的括号1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、最小栈3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、逆波兰表达式求值4.1 题目链接4.2 题目描述4.3 解题代码4.4 解题思路 5、基本…...

openmv的端口被拆分为两个 导致电脑无法访问openmv文件系统解决办法 openmv USB功能改动 openmv驱动被更改如何修复
我之前误打误撞遇到一次,直接把openmv的全部端口删除卸载然后重新插上就会自动重新装上一个openmv端口修复成功,大家可以先试试不行再用下面的方法 全部卸载再重新插拔openmv 要解决OpenMV IDE中出现的两个端口问题,可以尝试以下步骤&#x…...

自制虚拟机(C/C++)(三、做成标准GUI Windows软件,扩展指令集,直接支持img软盘)
开源地址:VMwork 要使终端不弹出, #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup") 还要实现jmp near 0x01类似的 本次的main.cpp #include <graphics.h> #include <conio.h> #include <windows.h> #includ…...

算法题(56):旋转链表
审题: 我们需要根据k的大小把链表向右移动对应次数,并返回移动后的链表的头结点指针 思路: 根据提示中的数据大小我们发现:k的值可以远大于节点数。 也就是说我们对链表的操作存在周期,如果k%len0,说明我们…...

解决PyG安装中torch-sparse安装失败问题:详细指南
1 问题描述 最近在学习GNN,需要使用PyTorch Geometric(PyG)库。在安装PyG的过程中,遇到了torch-sparse安装失败的问题,错误提示为: ERROR: Failed building wheel for torch-sparse本文将详细记录问题的解…...

如何创建折叠式Title
文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverGrid组件相关的内容,本章回中将介绍SliverAppBar组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverAppBar和普通的AppBar类似,它们的…...

go-zero学习笔记(三)
利用goctl生成rpc服务 编写proto文件 // 声明 proto 使用的语法版本 syntax "proto3";// proto 包名 package demoRpc;// golang 包名(可选) option go_package "./demo";// 如需为 .proto 文件添加注释,请使用 C/C 样式的 // 和 /* ... */…...

Wildcard工具详解:从入门到精通
1. Wildcard基础知识 什么是Wildcard? Wildcard(通配符)是一种用于匹配文件名或字符串的特殊字符。它允许用户使用简单的符号来表示复杂的匹配规则,从而快速定位目标文件或数据。 常见的Wildcard符号 *:匹配任意数量…...

冰蝎v3.0 beta7来啦
我用了一台kali,一台centos,一台windows,做了一个文件上传和一个反弹shell实验,载荷是AES加密的,终于感受到了对加密流量的无可奈何~ kali(php8.1)centos(php7.1)window…...
React中使用箭头函数定义事件处理程序
React中使用箭头函数定义事件处理程序 为什么使用箭头函数?1. 传递动态参数2. 避免闭包问题3. 确保每个方块的事件处理程序是独立的4. 代码可读性和维护性 示例代码总结 在React开发中,处理事件是一个常见的任务。特别是当我们需要传递动态参数时&#x…...
记忆化搜索和动态规划 --最长回文子串为例
记忆化搜索 记忆化搜索是一种优化递归算法的方法,通过将已经计算过的子问题的结果存储起来(通常使用哈希表或数组),避免重复计算相同的子问题。 本质上是通过缓存中间结果来减少计算的重复性。 动态规划 动态规划是通过将问题分…...
Tree Compass( Codeforces Round 934 (Div. 2) )
Tree Compass( Codeforces Round 934 (Div. 2) ) You are given a tree with n n n vertices numbered 1 , 2 , … , n 1, 2, \ldots, n 1,2,…,n. Initially, all vertices are colored white. You can perform the following two-step operation: …...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...