python小练习03

1.绘制奥运五环旗

#奥运五环的绘制
import turtle as t
t.pensize(3)
t.speed(0)
def draw_circles():
    i=0
    while i <=4:
        args = [[-60,0,"blue"],[0,0,"black"],[60,0,"red"],[-30,-30,"yellow"],[30,-30,"green"]]#定义一个参数列表
        t.penup()
        t.goto(args[i][0],args[i][1])
        t.pendown()
        t.color(args[i][2])
        t.circle(40)
        i+=1
    t.hideturtle()
    t.done()
draw_circles()

结果及分析:

由于绘制五个不同颜色的环,且存在先后顺序问题,加之这些环的圆心坐标和颜色是可变参数。因此采用定义二维数组的形式来给定参数(这样做的好处是避免代码行数太长,而且很直观)具体做法是:定义i作为二维数组的索引,给定初始值为0,设定while循环,当画完最后一个圆环时结束程序。

2.双弧外摆线的绘制

import turtle as t
import math as m
t.speed(0)
i = 0
while i <=2*m.pi:#描点法绘制双弧外摆线
    t.penup()
    x = 3 * 25 * m.cos(i) + 25 * m.cos(3 * i)
    y = 3 * 25 * m.sin(i) + 25 * m.sin(3 * i)
    t.goto(x,y)
    t.pendown()
    t.dot(5,"black")
    i+=0.01
t.done()

结果及分析:

引入turtle和math库,并利用while循环,选定2*pi作为循环控制条件,再基于“描点法”绘制函数图像,将点和点之间的间隔设置为0.01,通过对点的绘制进行参数控制进而绘制出双弧外摆线。

3.编写程序绘制下图,使用while 循环的结构程序设计完成。

ch,i= '*',0
args=[5,3,1,3,5]
while i <=4:
    print("{0: ^5}".format(ch*args[i]))
    i+=1

结果分析:基本元素为‘*’,解决这个问题的关键在于每行‘*’的个数不一样。定义一个列表储存每行对应基本元素的个数,并使用while循环控制。

4.回数

回数是一种特殊的数,其正向与反向所表示的数值相等。如果数abcd=dcba,则称数abcd为回数,这里a,b,c,d表示0-9之间的数字符号,如1111,1221,2002等。请编写程序,找出并显示1000到9999之间的回数,分行显示,每行显示10个数字。

result = []
for a in range(1,10):
    for b in range(0,10):
        for c in range(0,10):
            for d in range(1,10):
                if a*1000 + b*100 + c*10 + d == d*1000 + c*100 + b*10 + a:
                    result.append(str(a)+str(b)+str(c)+str(d))
i = 0
while i<len(result): #输出控制函数
    print("{} ".format(result[i]),end = '')
    if (i+1)%10 == 0:
        print()
        i+=1
    else:
        i+=1

结果及分析:

千位和个位除0之外任取,百位和十位并没有约束。代码由两部分组成,第一部分,通过三个嵌套的for 循环进行回文数判断并逐个放入result列表中。

第二部分是对列表元素有控制条件的输出。首先加上一个while循环对索引i控制阈值上限,在输出元素后,利用if-else判断是第几个元素,若是第十个,使用print()进行换行操作。最后i+=1进行变量更新。

5.杨辉三角

实现杨辉三角前10行的输出

def yh_triangle(n):#n为需要输出的行数,n=实际行数-1
    ls=[]
    if n == 0:
        ls = [1]
    elif n == 1:
        ls = [[1],[1,1]]
    else:
        j = 2
        ls = [[1], [1, 1]]
        for i in range(0, n - 1):
            ls.append([])# 创建[[],[],[],[]],个数取决于n
        while j <= n:
            ls[j] = [1]
            for k in range(1, j):
                ls[j].append(ls[j - 1][k - 1] + ls[j - 1][k ])
            ls[j].append(1)
            j += 1
    p_out(ls)
def p_out(ls): #输出函数
    for i in range(0,len(ls)):
        for j in range(0,len(ls[i])):
            print("{} ".format(ls[i][j]),end='') #嵌套循环输出
        print()
yh_triangle(9)

结果及分析:

本代码分为两部分:

第一部分是yh_triangle(n)

n为实际需要输出的行数减去1。创建空列表,此列表为2维列表,维数取决于行数。举个例子:若需要输出前3行,此列表为:[[1],[1,1],[1,2,1]],以此类推。由于前两行并不存在特殊的杨辉三角规律,故放在if-elif结构里。倘若行数大于或等于3,创建[[1],[1,1],[]].最后子列表的元素运用杨辉三角规律。

第二部分是p_out(ls)函数

ls在第一个函数结尾调用,其执行逻辑是:通过两个嵌套循环进行二维列表元素的遍历输出。在第二个循环结束时换行。

6.编写函数myfunc(x,n)

求多项式s=x+xx+xxx+xxxx+……+xx…x的和,并返回求出的和。其中x是1-9的数字,最后一项是n位都是x的数字。例如 x=2,n=6时输出 246912.

def myfunc(x,n):
    x = str(x)
    if n==0:
        return 0
    else:
        return int(x*n) + int(myfunc(x, n - 1))
result = myfunc(2,6)
print(result)

结果及分析:

本代码使用了函数递归完成该题目,以x=2,n=6来说明。当调用此函数时,先将x转化为字符形式。进入if判断,当n == 0时,返回0,当n不为0时,int(x*n)=22222,并再次调用myfunc()函数。int(x,n)=2222,依次类推,最后结果为:0+2+22+222+2222+22222=246912。

7.编写函数求余弦函数的近似值

用下列公式求cos(x)的近似值,精确到最后一项绝对值小于0.01.

例如cos(-3.14)=-9.999899

import math as m
def cos(x):
    cos,j,a,i= 0,0,1,0
    while abs(a)>0.01:
        a = (pow(x,i)/m.factorial(i))
        i =i+ 2
        b = (-1)**(j)
        j = j+1
        c = a * b
        cos = cos + c
    else:
        return cos
m = cos(-3.14)
print("{:.6f}".format(m))

结果及分析:

本代码根据要求将cosx的公式进行了数学表达,总共拆分成了两个部分,一部分是“±”,一部分是数的阶乘。通过引入math库实现阶乘的简单实现。实际上,本题也可以利用函数递归完成,但我考虑到第一问已经用了,所以这里换了一种方法。

8.亲密数

如果有两个自然数a和b,a的所有因子(比a小且能整除a的自然数)之和恰好等于b,并且b的所有因子之和恰好等于a,则称a和b是一对亲密数。例如220和284,因为220的全部因子(除去本身)相加是1+2+4+5+10+11+20+22+44+55+110=284,284的全部因子(除去本身)相加是1+2+4+71+142=220.请用户输入一个整数m,输出比m小的所有亲密数。

def s_num(n):#找出比n小的所有数,不包含n
    for i in range(1,n):
        factor(i)#将找到的小于n的数传递给factor函数
        if i == n-1:
            search(result)#当完成小于n的所有数的对应因数相加时,调用search函数进行亲密数寻找
def factor(m):#factor函数,找出m的因数并相加,在此基础上创建一个字典,键(数m)-值(对应因数之和)
    i= 1
    while i < m:#寻找因数并求和
        sum = 0
        if m % i == 0:
            result[m] = result.get(m,0)+i
            i += 1
        else:
            i += 1
def search(result):
    res = []
    for key, value in result.items():#依据亲密数的性质进行选择
        if value in result and result[value] == key and value != key:
            res.append((key, value))
    for item in res:#去除冗余
        if item[0]>item[1]:
            res.remove(item)
    print(res)
result = {}
s_num(100000)

结果及分析:

代码分为三个模块,第一个s_num(n),找出所有比n小的数且不包含n。第二个factor(m),寻找数m的所有因数,并将每个小于n的数作为键,把其因数之和作为值储存在result字典中。第三个search(result)函数,以字典result作为输入量,并用for循环遍历键值对。其中if结构的第一个条件判断当前value是否在字典result的键中(找出因数之和相等的数是否存在),第二个条件判断当前value对应的键的值是否等于key,第三个条件判断value是否等于key,这三个条件都满足则将当前的键值对添加到res中。

=====================================

欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/676582.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s怎么监听自定义资源的变更?(1)

这里我们通过 k8s的 code-generate来生成操作自定义资源的代码来监听变更 第一步下载工具 下载安装 k8s code-generate 查看我们的k8s版本 kubectl get node 输出结果为 可以看到我们的k8s版本为 v1.22.0 所以此时我们要下载与之对应的版本的code-generate git clone htt…

Spring Cache自定义序列化解决乱码问题

Spring Cache数据缓存到 Redis中的 value是乱码问题&#xff08;包含日期格式转换&#xff09;&#xff0c;主要是因为序列化方式导致的。 Spring Cache使用 Redis缓存管理器时&#xff0c;默认 value使用的是 JDK序列化值的方式&#xff0c;所以导致缓存的 value乱码的问题。 …

【Java面试】十、微服务篇-分布式(下)

文章目录 1、分布式系统2、CAP定理3、Base理论4、分布式事务的解决方案&#xff1a;Seata4.1 Seata的XA模式4.2 Seata的AT模式4.3 Seata的TCC模式 5、分布式事务的解决方案&#xff1a;MQ6、分布式系统下&#xff0c;接口的幂等性6.1 数据库唯一索引6.2 token redis6.3 分布式…

MATLAB和物联网连载1:Internet of Things离你有多远?5行MATLAB的距离

MATLAB和物联网连载1:Internet of Things离你有多远?5行MATLAB的距离 原文&#xff1a;MATLAB和物联网连载1:Internet of Things离你有多远?5行MATLAB的距离 - 知乎 (zhihu.com) 来自俄罗斯的实习生在工作之余喜欢上网看点有的没的。有一天他突然发现了一个神奇的网站叫 T…

HTTP --tcp和keep-alive

TCP TCP连接 tcp/ip是全球计算机以及网络设备都在使用的一种常见的分组交换网络分层协议集&#xff0c;客户端可以打开一条tcp/ip连接&#xff0c;连接到可能运行在世界各地的服务器应用程序&#xff0c;一旦连接建立起来了&#xff0c;在客户端和服务器的计算机之间交换的报…

IntelliJ IDEA配置创建文件后自动生成注释字段,包括作者、日期和描述等信息。

效果 新建文件自动生成如下文档注释 配置如下&#xff1a; 打开setting 进行如下操作 粘贴的模板内容如下&#xff1a; /*** author developer_ZhangXinHua* date ${YEAR}/${MONTH}/${DAY}* desc ${DESCRIPTION}*/

Nios II 实现流水灯实验

Nios II 实现流水灯实验 一.硬件设计1.新建Quartus项目2. 设计Nios ii 二.软件设计 前言 实验目标&#xff1a; 学习 Quartus 、Platform Designer、Nios-II SBT 的基本操作&#xff1b;初步了解 SOPC 的开发流程&#xff0c;基本掌握 Nios-II 软核的定制方法&#xff1b;掌握 …

期权交易要怎么计算盈亏?期权盈亏平衡点是什么?

今天带你了解期权交易要怎么计算盈亏&#xff1f;期权盈亏平衡点是什么&#xff1f;期权盈利和亏损的计算公式取决于具体的交易策略和期权类型。 期权交易要怎么计算盈亏&#xff1f; 期权买方盈亏计算&#xff1a; 对于期权买方&#xff08;无论是认购期权还是认沽期权&…

逻辑门(与门、或门、非门、异或门)

一、实验目的 了解DE1-SOC开发板一些外设。 掌握常用组合逻辑门电路的基本原理。 学习Verilog HDL的基本语法。 学习使用ModelSim工具对设计的电路进行仿真&#xff0c;包括编写Testbench仿真代码&#xff0c;以及ModelSim工具的使用。 熟悉使用Quartus软件从创建Quartus工…

什么是Swagger UI ,swagger ui 的authorization怎么获取?

什么是Swagger UI Swagger UI 是一个用于可视化和交互式地展示API文档的工具。它是Swagger&#xff08;现称为OpenAPI&#xff09;生态系统的一部分&#xff0c;旨在帮助开发者和API用户更好地理解、测试和调试API。 主要功能和作用 1. API文档自动生成&#xff1a; Swagge…

【Java高级教程】集合部分

参考链接 一、 Java 数据结构 二、 Java 集合框架 三 Java ArrayList 四 Java LinkedList 五 Java HashSet 六 Java HashMap 七 Java Iterator&#xff08;迭代器&#xff09; 八 Java Object 类 ava Object 类是所有类的父类&#xff0c;也就是说 Java 的所有类都继承了 Obj…

常用ai模型和一些术语的科普

本文是早年浏览easyai.tech后留下的笔记。 文章目录 神经网络CNNRNNGANKNNCPU和GPU/TPUNLPNo free lunch theoremtransformer注意力机制自动编码器&#xff0c;自编码器GNN推荐系统附录NFL的两个例子 神经网络 水流&#xff0c;水龙头&#xff0c;流量阀。 可以回想CNN分类MNI…

StretchSense:将手部动作无缝集成到Xsens全身动捕系统中

在动画制作中逼真的手部动作可以大幅提升角色的情感表现能力&#xff0c;这将使观众更加轻易的走进角色&#xff0c;感受角色的情感变化并更加快速的了解角色的性格特点。如性格外向的角色将拥有更加复杂的手部动作表达。因此有效加强角色的手部动画真实度有助于吸引更多的观众…

基于Java+Vue智慧社区管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

22-验证码的处理

验证码这种问题是比较头疼的&#xff0c;对于验证码的处理&#xff0c;不要去想破解方法&#xff0c;这个验证码本来就是为了防止别人自动化登录的。 目前最快速解决的三个手段&#xff1a; 去掉验证码&#xff1a;比较适合新开发但未上线的系统。设置万能码&#xff1a;比较适…

【GD32】06 - SPI (含ST7735S TFT-LCD屏幕驱动)

这篇文章我们看看GD32中如何实现SPI&#xff0c;软件SPI的话可以参考我之前的文章&#xff0c;把对应操作GPIO口的代码从STM32改成GD32就可以使用了。 【快速上手STM32】SPI通信协议&&1.8寸TFT-LCD&#xff08;ST7735S&#xff09;_tftlcdst7735和stm32-CSDN博客文章浏…

docker部署skywalking

skywalking版本下载 1&#xff1a;拉取skywalking的oap镜像(可以选择自己的版本&#xff0c;最好与ui&#xff0c;agent版本一致) docker pull apache/skywalking-oap-server:9.5.02&#xff1a;启动oap docker run -d -p 11800:11800 -p 12800:12800 --name sw_oap apache/…

HCIE数通,为啥是网工的“黄金标准”?

作为网络工程师&#xff0c;你不可能没听说过HCIE&#xff0c;也不可能没听过数通&#xff0c;也可能曾经考虑过要不要挑战这个认证。 HCIE数通为何被誉为网工的黄金标准&#xff1f;聊聊 01 什么是HCIE数通&#xff1f; HCIE数通认证是华为技术有限公司推出的一项高级别认证…

深度学习-05-反向传播理论知识

深度学习-05-反向传播理论知识 本文是《深度学习入门2-自製框架》 的学习笔记&#xff0c;记录自己学习心得&#xff0c;以及对重点知识的理解。如果内容对你有帮助&#xff0c;请支持正版&#xff0c;去购买正版书籍&#xff0c;支持正版书籍不仅是尊重作者的辛勤劳动&#xf…

使用 IPSET 添加 CDN 节点 IP(IPv4/IPv6)到防火墙白名单

明月的服务器一直使用的是 iptables,随着近几年 IPv6 的普及&#xff0c;明月切身体会到还是 IPSET 最方便了&#xff0c;无论你是 IPv4 还是 IPv6 都可以方便的管理&#xff0c;无论你是加入白名单还是黑名单&#xff0c;都非常的简单高效&#xff01;今天就参照明月自己的实操…