1.5 首先要学会找错

部署运行你感兴趣的模型镜像

很多初学者往往认为书写代码最难和最能体现能力的就是将代码书写出来。其实,这并不正确。从经验来看,要想完成一个正确的代码功能,比如一个数据分析任务,代码的书写编辑往往只是第一步,但是由于经验不足和一些无法预料的数据处理问题,通常很难保证写出来的代码能够正确的运行。这时,就需要我们进行代码的调试。这个能力非常关键,也是很多初学者无法直接从书本上学到的本领。

 那么如何掌握住这种能力呢?
第一,就是需要我们熟悉编辑器提供的调试功能,这是最基本的。

我们来看一个例子:

str = input()
str = str.upper()
print(Str)

通常如果有明显的问题,代码编辑器如PyCharm会有提示,比如你会注意到此时的Str下面有一个红色的波浪线。这通常表示有问题。

而且在运行后,编辑器也会提示具体的错误信息,比如这里就说明Str没有定义(not defined)。

我们不是定义了吗?原因是Python区分大小写,它认为Str和str不是一个变量,当然会提示没有定义。

但是有时候错误提示并不会很明显。比如我们想把输入的字符变成大写和小写,分别连接在一起再一起输出,我们来试一试:

str = input()
str = str.upper()
str = str.lower()
print(str + str)

但是运行结果并不正确,这里只输出两个都是小写的单词。


对于字符而言,加号表示连接,所以代码的意思就是将大写转换的和小写转换的拼接在一起,lower表示小写转换。现在这种错误不同于刚才的错误,它属于逻辑错误,也就是说代码并不是不正确,而是没有体现出你的功能要求,具有了其他的功能。

那么该如何处理呢?调试和解决代码错误的关键在于找到错误的位置,这是第二个大家要牢牢记住的秘诀。这句话大家可以好好的在学习中多体会。

那么我们该如何知道哪里出了问题呢?我们来试一试。

比较简单的方法就是增加输出,可以尝试在一些关键的位置输出变量的数值,看看这些变量的数值是不是自己的预期。我们增加了两行输出,

str = input()
str = str.upper()
print(str)
str = str.lower()
print(str)
print(str + str)

运行为:

看得出都是我们所希望的结果。那么我们基本可以断定问题应该在最后一行。当目光注意到这个地方,你可以已经注意到str此时都是小写的字符,你也可以反过来从结果来推测最后一个print的第一个str其实已经不是最初的大写字符了。原因是第二次小写转换导致了第一次大写转换已经丢失,毕竟一个变量不可能存放多个数值。

那么我们就使用两个变量。

str = input()
str1 = str.upper()
print(str1)
str2 = str.lower()
print(str2)
print(str1 + str2)

在这里,我们不怕麻烦,分别建立了str1和str2,分别存储大写的字符和小写的字符。这里也说明一个问题,变量的定义是根据需要来进行,如果你需要存储一个数值,并且继续使用在后续的其他地方,那么就到了定义变量的时候了。

但是这种写法并不很好,代码多了后,我们很难记得str1和str2究竟哪一个是大写、哪一个是小写。因此最好见名知义。

str = input()
strUppr = str.upper()
print(strUppr)
strLwr = str.lower()
print(strLwr)
print(strUppr + strLwr)

这里的变量名称我们采取的一种常见的方法,首先使用多个单词组合,拼音有时也是不错的选择,使得名称含义更为明确,同时为了节省不必要的输入,我们对所有单词进行了一些缩略处理,比如Upper变成了Uppr等。

这里的规则是保持第一个字母不变,单词后面字母中的元音略去。同时这两个单词一般从第二个开始大写开头,形成一种中间高两头低的效果,就像骆驼的驼峰,因此也被称为骆驼命名法。

定位错误除了刚才我们所说的增加print输出变量的功能外,其实我们还可以使用第二种更为方便的断点功能。方法很简单,直接在需要增加断点的代码行前点击,就会看到多个一个红色的圆,表示断点。再次点击,断点就会消失。

那么什么是断点?我们运行就知道了。不过,这个运行不能还和以前一样,而是应该选择运行菜单中的Debug。

这个单词就表示找错的意思,有兴趣的同学可以到网上去了解这个单词的前世今生,它与一只几十年前的小虫子有关系。

https://baike.baidu.com/item/DEBUG/825293icon-default.png?t=M0H8https://baike.baidu.com/item/DEBUG/825293仍然和以前一样,第一次调试运行需要点击Exec选项。

第一次运行仍然等待我们的输入,我们仍然输入一个try。

回车确认后,以前的代码就会一下子运行到底,全部结束,但是这时输入完毕后,你会发现代码会停在这个断点处,也就是说,断点后的最后一行语句暂时不执行,代码被中断在此。


这个时候PyCharm下方会出现一个Debugger窗格,你可以仔细的观察各个变量的数值,其中右下方会显示变量及其现在的数值,据此可以观察是否符合预期,就像以前print输出一样,只不过更加简单。仔细观察可以发现,此时的str只有一个值,即小写的“try”,大写的“try”已经没有了,因此最后一行语句不可能同时输出大写和小写的str变量值。

继续点击屏幕左边的“继续程序”按钮,即可继续运行,最终全部结束运行。

此时点击“Debugger”窗格到控制台(“Console”)窗格,即可看到最终的结果。

以上我们介绍了基本的调试方法,那么第三个重要方法就是预防为主,毕竟治病治于未病嘛!

比如建议大家书写代码不要一股脑全部写出来,最好能写出一个功能,就及时测试下,这样更便于及时定位,及时排除错误。

另外,代码的书写本身也很重要,良好的代码书写习惯和规范的用法都是增强代码可读性的基础,从而也有助于代码的理解和错误的排查。这里常见的方式就是增加必要的代码注释。所谓注释就是不参与代码执行的一些额外说明,仅供代码编辑人员自己阅读和了解代码的功能。

最为关键的一个就是调试代码的能力必须从实践中锻炼学习,自己不要怕麻烦,这个能力就是这样一点一点锻炼成的,可能你会觉得这样浪费多少时间,但是在这个过程中,你会发现你其实很多问题都是不清楚,一点一点解决,而且你越熟练,越能快速定位错误。

有很多读者喜欢在遇到问题的第一时间立刻问别人,这个没有问题,但是我们更建议大家先自己好好排查下,不要轻易浪费一个从实践中学习调试代码的机会。还是一句话,编程中查找错误的能力是和甚至比编程能力本身还要重要,而恰恰这一块必须通过实践才能最终掌握。

配套学习资源、慕课视频:

https://www.njcie.com/python/icon-default.png?t=M0H8https://www.njcie.com/python/

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

先看效果: https://renmaiwang.cn/s/jkhfz Hue系列产品将具备高度的个性化定制能力,并且借助内置红、蓝、绿三原色LED的灯泡,能够混合生成1600万种不同色彩的灯光。 整个操作流程完全由安装于iPhone上的应用程序进行管理。 这一创新举措为智能照明控制领域带来了新的启示,国内相关领域的从业者也积极投身于相关研究。 鉴于Hue产品采用WiFi无线连接方式,而国内WiFi网络尚未全面覆盖,本研究选择应用更为普及的蓝牙技术,通过手机蓝牙与单片机进行数据交互,进而产生可调节占空比的PWM信号,以此来控制LED驱动电路,实现LED的调光功能以及DIY调色方案。 本文重点阐述了一种基于手机蓝牙通信的LED灯设计方案,该方案受到飞利浦Hue智能灯泡的启发,但考虑到国内WiFi网络的覆盖限制,故而选用更为通用的蓝牙技术。 以下为相关技术细节的详尽介绍:1. **智能照明控制系统**:智能照明控制系统允许用户借助手机应用程序实现远程控制照明设备,提供个性化的调光及色彩调整功能。 飞利浦Hue作为行业领先者,通过红、蓝、绿三原色LED的混合,能够呈现1600万种颜色,实现了全面的定制化体验。 2. **蓝牙通信技术**:蓝牙技术是一种低成本、短距离的无线传输方案,工作于2.4GHz ISM频段,具备即插即用和强抗干扰能力。 蓝牙协议栈由硬件层和软件层构成,提供通用访问Profile、服务发现应用Profile以及串口Profiles等丰富功能,确保不同设备间的良好互操作性。 3. **脉冲宽度调制调光**:脉冲宽度调制(PWM)是一种高效能的调光方式,通过调节脉冲宽度来控制LED的亮度。 当PWM频率超过200Hz时,人眼无法察觉明显的闪烁现象。 占空比指的...
<think>好的,用户的问题是“如何设置或计算达到1.5A的电流需求”,看起来涉及电子电路或电源配置。首先需要明确,用户可能是在设计电路时需要确保某个部分的电流达到1.5A,或者在选择电源时确定如何满足这个电流需求。接下来要考虑可能的方法,比如调整电阻、选择合适的电源、或者使用电流控制元件。 根据欧姆定律,电流I等于电压V除以电阻R,即I = V/R。所以如果要得到1.5A的电流,可以通过调整电压和电阻的关系来实现。例如,如果电路中的电阻已知,可以通过提高电压来达到所需的电流值。反之,如果电压固定,则需要调整电阻的大小。比如,当电源电压为5V时,所需的电阻应为R = V/I = 5/1.5 ≈ 3.33Ω。 另外,可能需要考虑电源的输出能力。电源必须能够提供至少1.5A的电流,否则会导致电压下降或电源过载。因此,选择电源时需确认其最大输出电流是否满足或超过1.5A,并留有一定的余量以确保稳定性。 在电路设计方面,如果使用可调稳压器(如LM317),可以通过设置合适的电阻值来调节输出电流。例如,LM317的典型应用电路中,调整电阻R1和R2可以设定输出电流。公式为I = 1.25V / R1,因此选择合适的R1值可以得到1.5A的电流。比如,当R1为0.83Ω时,I ≈ 1.5A。同时需要注意电阻的功率承受能力,避免过热。 对于需要恒定电流的应用,比如LED驱动或电池充电,可能需要使用恒流源电路。这类电路通常使用晶体管或运放结合反馈机制来维持恒定电流。例如,使用运放和MOSFET的电路,通过检测电流在采样电阻上的电压,调整MOSFET的导通状态以保持电流稳定在1.5A。 在实际操作中,还需考虑电路中的其他元件,如导线的载流量、连接器的接触电阻,以及散热措施。高电流会导致发热,因此需要确保所有元件和连接点能够承受1.5A的电流而不发生过热。可能需要使用足够粗的导线,并在必要时添加散热片或风扇。 最后,验证和测试是关键。使用万用表或电流表测量实际电流值,确保其符合1.5A的要求。如果存在偏差,可以调整电阻或电源电压进行校准。同时,监测电路的温度和稳定性,确保长时间运行的可靠性。 总结来说,方法包括应用欧姆定律计算参数、选择合适的电源、使用可调稳压器或恒流源设计电路,以及实际测试和调整。每个步骤都需要仔细考虑元件的规格和实际应用条件,以确保达到所需的电流值并保持系统的稳定性和安全性。</think>根据电路需求实现1.5A电流输出的方法可分为以下三种方案: **方案一:基于欧姆定律的参数计算** 电流计算公式: $$I = \frac{V}{R}$$ 当目标电流为1.5A时: - 若已知电源电压$V$,计算所需负载电阻$R = V/1.5$。例如12V电源需$8\Omega$电阻 - 若已知负载电阻$R$,计算所需电压$V = 1.5 \times R$ **方案二:可调电源配置** 使用LM317等可调稳压器时,电流计算公式: $$I = \frac{V_{ref}}{R_1}$$ 设置$R_1 = 0.83\Omega$可获得约1.5A输出。典型电路配置示例: ```arduino Vin ──┬── LM317 Adj ── R1 ──┬── R2 ──┬── Vout │ Out ───────┘ │ └─────────────── GND ──────────┘ ``` 需注意: 1. $R_1$功率需满足$P = I^2R = (1.5)^2 \times 0.83 \approx 1.87W$ 2. 需配合散热片使用 **方案三:恒流源电路设计** 使用运放+MOSFET的典型恒流电路: $$I_{set} = \frac{V_{ref}}{R_{sense}}$$ 当采用TL431基准源($V_{ref}=2.5V$)时,$R_{sense} = 2.5/1.5 \approx 1.67\Omega$ **实施注意事项**: - 电源选择需满足$额定电流 > 1.5A$且$功率容量 > V_{load} \times 1.5$ - 导线截面积应满足1.5A载流量(建议18AWG以上) - 使用电流表串联验证实际输出值 - 高温环境下需增加20%电流余量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leeshuqing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值