global 可不能随便用啊!寻找1-10000内的 Spyder 数遇到的小问题,却是大思考

news2024/11/15 3:45:15

        今天遇到这样一个问题:寻找1-10000内的 Spyder 数,Spyder 数是指,如果将一个数的每个位上的数字相乘,再将这些乘积相加,最终得到的和等于原始数,那么该数就是 Spyder 数。

 逻辑分析

        这个逻辑其实很简单,就是用代码把上面的功能实现就好了:

def is_Spyder_Number(number) :
    sum = 0
    pro = 1
    while number > 0 :
        rem = number % 10
        sum += rem
        pro *= rem
        number //= 10
    if sum == pro :
        return True
    else:
        return False

        然后就是创建1-10000的输入环境:

min = int(input("enter the min number : "))
max = int(input("enter the max number : "))
print("Spyder Number between min and max : ")
for i in range(min , max + 1):
    # sum,pro = sum_and_pro(i)
    # if sum == pro:
    if is_Spyder_Number(i):
        print(i, end=" ")

        ok,解决!

 

遇到问题

        但是,我是谁啊?我是小白啊!我得多寻求一种实现方法啊!正好,前几天学的global拿来用用:

sum = 0
pro = 1
def sum_and_pro(number):
    global sum,pro
    if number > 0:
        rem = number % 10
        sum += rem
        pro *= rem
        number //= 10
        sum_and_pro(number)
        return sum,pro
    else:
        return  0
def is_Spyder_Number(number):
    sum,pro = sum_and_pro(number)
    if sum == pro:
        return True
    else:
        return False

        整个写代码的过程可谓是一气呵成,不打哈欠!

        但是调试的时候却出错了!

         这结果明显不对啊!!!那到底怎么回事呢?先debug!

         ok,1没有问题,那我们再来看看2:

         什么情况?2为什么得到的sum=3?不应该是2吗?先问chatgpt,看看他怎么说:

在您的代码中,出现了一个全局变量 sum,但是 sum 是 Python 内置函数的一个名字,它用于计算可迭代对象的元素和。当您命名一个全局变量为 sum,会导致与内置函数发生命名冲突,从而可能导致不可预测的结果。

这就是为什么在 sum_and_pro 函数中,当您尝试将 rem 加到 sum 上时,实际上会调用内置的 sum 函数,而不是您预期的全局变量。这就是为什么您会看到 sum 的值出现不可预测的变化。

        哦?也就是说我用的这个和其他可能冲突了?所以计算过程中搬来了别人的?那我重启好了!

        ok,我确实重启了,但是bug却没有自己跑掉,这是什么原因呢?

原因分析

        global,globa,global!!!

        哦!我明白了,我在定义这个global的时候,他是全局存在的一个变量,也就是对sum的操作都会落在全局的这个值上,也就是各个步骤的累加或者累乘,那这么依赖,在很短的时间内pro过万也就得到了解释。

        所以,在求范围内的某种数(幸福数,间谍数,霓虹灯数等)的时候要禁止使用global,因为范围内的查找必然涉及到多轮,那这么一来就不可避免的累计计算。

完结撒花

        一晚上搞定一道题,还真是有点费时间,不过通过这件事情认识到自己学习方面存在的问题还是挺值得的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考A计划-系统集成项目管理工程师-法律法规-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

vulnhub靶机DarkHole_2

靶机下载地址:DarkHole: 2 ~ VulnHub 靶机发现 arp-scan -l 扫描端口 nmap --min-rate 10000 -p- 192.168.21.145 扫描服务 nmap -sV -sT -O -p22,80 192.168.21.145 漏洞扫描 nmap --scriptvuln -p22,80 192.168.21.145 这里有git源码泄露 git clone mirrors…

浅析DIX与DIF(T10 PI)

文章目录 概述DIF与DIX端到端数据保护 DIFDIF保护类型 SCSI设备支持DIFStandard INQUIRY DataExtended INQUIRY Data VPD pageSPT字段GRD_CHK、APP_CHK、REF_CHK字段 READ CAPACITY(16)响应信息 SCSI命令请求读命令请求写命令请求 DIF盘格式化相关参考 概述 DIF与DIX DIF&…

RK3588平台开发系列讲解(AI 篇)RKNN-Toolkit2 API 介绍

文章目录 一、RKNN 初始化及对象释放二、RKNN 模型配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要讲解 RKNN-Toolkit2 API 详细说明。 一、RKNN 初始化及对象释放 在使用 RKNN Toolkit2 的所有 API 接口时,都需要先调用 RKNN()方法初始化 RKNN 对象,…

C++进阶 特殊类的设计

本篇博客介绍:介绍几种特殊的类 特殊类的设计 设计一个类不能被拷贝设计一个类 只能在堆上创建对象设计一个类 只能在栈上创造对象设计一个类不能被继承单例模式饿汉模式懒汉模式单例模式对象的释放问题 总结 设计一个类不能被拷贝 我们的拷贝只会发生在两个场景当…

【3D激光SLAM】LOAM源代码解析--scanRegistration.cpp

系列文章目录 【3D激光SLAM】LOAM源代码解析–scanRegistration.cpp 写在前面 本系列文章将对LOAM源代码进行讲解,在讲解过程中,涉及到论文中提到的部分,会结合论文以及我自己的理解进行解读,尤其是对于其中坐标变换的部分&…

chatGPT-对话爱因斯坦

引言 阿尔伯特爱因斯坦( 1879年 3 月 14 日 – 1955 年 4 月 18 日)是一位出生于德国的理论物理学家,被广泛认为成为有史以来最伟大、最有影响力的科学家之一。他以发展相对论而闻名,他还对量子力学做出了重要贡献,因…

安装搭建私有仓库Harbor

目录 一、安装docker编排工具docker compose 二、安装Harbor软件包 三、修改配置文件 四、运行安装脚本 五、安装后验证 六、使用Harbor 一、安装docker编排工具docker compose 在github上选择自己想要的版本下载 https://github.com/docker/compose/releases 下载好…

Android AppCompatActivity标题栏操作

使用 AndroidStudio 新建的工程默认用 AppCompatActivity ,是带标题栏的。 记录下 修改标题栏名称 和 隐藏标题栏 的方法。 修改标题栏名称 Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R…

语言基础2 矩阵和数组

语言基础2 矩阵和数组 矩阵和数组是matlab中信息和数据的基本表示形式 可以创建常用的数组和网格 合并现有的数组 操作数组的形状和内容 以及使用索引访问数组元素 用到的函数列表如下 一 创建 串联和扩展矩阵 矩阵时按行和列排列的数据元素的二维数据元素的二维矩…

华为OceanStore V3存储模拟器搭建教程

1 软件下载 软件地址:https://pan.baidu.com/s/12-5mZmq3cNiyC7J6KC0XxA?pwd1234 提取码:1234 2 软件安装 2.1 VMware软件安装 VMware软件安装请参考百度教程,注意事项如下: (1)软件安装前电脑需要开启虚拟…

2021年06月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:数对 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。 比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。 时间限制:1000 内存限制:65536 输入 一行,给出2到15个两两不同且…

第十章MyBatis的参数

单个简单参数处理 MyBatis中的sql语句中的属性 id:为mapper接口的方法名resultType:为返回参数的类型parameterType:为传递过来的参数类型,MyBatis会自动推断一般不用填写 javaType表示说明这个字段的java类型 jdbcType表示说明…

C++ 的关键字(保留字)完整介绍

1. asm asm (指令字符串):允许在 C 程序中嵌入汇编代码。 2. auto auto(自动,automatic)是存储类型标识符,表明变量"自动"具有本地范围,块范围的变量声明(如for循环体内的变量声明…

[python爬虫] 爬取图片无法打开或已损坏的简单探讨

本文主要针对python使用urlretrieve或urlopen下载百度、搜狗、googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨。同时,作者将进一步帮你巩固selenium自动化操作和urllib…

csapp archlab PartC满分解答

任务 修改ncopy.ys和pipe-full.hcl以尽可能的提高ncopy.ys的运行速度 思路 pipe-full.hcl: 实现iaddq指令(家庭作业4.54)实现加载转发(家庭作业4.57) ncopy.ys: 使用循环展开(第5.8节&…

Python将本地文件上传到百度网盘

Python将本地文件上传到百度网盘 前言相关介绍Python将本地文件上传到百度网盘下载相关依赖库获取授权打开链接复制授权码粘贴授权码到终端,并回车连接到百度网盘 上传文件文件同步上传文件夹下载文件夹 前言 由于本人水平有限,难免出现错漏,…

Golang文件操作详解

打开和关闭文件 从 Go 1.16 开始,现在提供了相同的功能 通过包 IO 或包操作系统,以及这些实现 应该在新代码中首选。 有关详细信息,请参阅特定函数文档。 弃用了"io/ioutil"对文件的操作 读取文件方法一(os.open+file.read只读形式): os.Open() 函数能够打开…

攻防世界-Web_python_template_injection

原题解题思路 一说到python的web我就想到flask框架,但从没用过flask注入。 从零学习flask模板注入,这篇文章有详细的介绍。 经过尝试很快就能发现使用{{}}就能注入,并且会回显报错信息,3的位置是{{}}中语句的执行结果。 找可用的引…

T113-S3-LAN8720A网口phy芯片调试

目录 前言 一、LAN8720A介绍 二、原理图连接 三、设备树配置 四、内核配置 五、调试问题 总结 前言 在嵌入式系统开发中,网络连接是至关重要的一部分。T113-S3开发板搭载了LAN8720A系列的网口PHY芯片,用于实现以太网连接。在开发过程中&#xff0c…