hitting a wall with debugging; not a coding issue as much as one of programming experience
在一个小的圆形区域工作。我无法解决调试阶段出现的问题。诸如"外部引用的变量…"和其他不会处理简单方程的错误(例如半径=面积/pi*半径)。我尝试了很多方法来解决这个问题,除了重写整个程序之外,什么也没用。我的解决方案要么创建一个新问题,要么不解决手头的问题。我已经学习了三个星期的Python,但是我有COBOL的编程经验,所以我了解了函数和流程图的概念。
当你没有解决问题的头脑或工具时,你会怎么做?我想自己解决这些问题。寻求帮助是明智的,但最终你必须自己飞行。
谢谢你的帮助。
通量
添加:
圆面积和半径:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | # Exercise 1 Area of Circle # This prog will ask for circle dimensions and compute # area/radius for the user, then display figures, and # allow to repeat. import sys import pdb PI = 3.14 radius = 0 print ('''Welcome to Ursavion, the leader in math apps This app allows you to quickly and easily find either the area or radius for a circle.''') print ( ) def chooseAR ( ): print ('Do you need to find circle area or circle radius? Enter A/a or A/r. ') choice = input ( ) if choice in ['A', 'a']: areaSol ( ) elif choice in ['R', 'r']: radSol (radius) else: print ('Please enter either A/a or R/r. ') chooseAR ( ) def areaSol ( ): radius = 0 radius = input ('What is the radius of the circle? ') radius = int (radius) area = PI * radius**2 radius = str(radius) area = str(area) print ('The area of a circle with radius ' + radius + ' is ' + area + ' units ' squared') print ( ) print ('Calculate another? y/n ') again = input ( ) if again in [ 'y', 'n']: chooseAR ( ) else: print ('Thank you for using this app.') def radSol (radius): #pdb.set_trace( ) #r = 1.128 for A = 4 area = input ('What is the area of the circle? ') area = int(area) radius = int(radius) radius = area / 3.14 * radius #prog will not eval this formula; float pt prob radius = str(radius) area = str(area) print ('The radius of a circle with area ' + str(area) + ' is ' + str(radius) + ' units') print ( ) again = input ('Calculate another? y/n ') if again in ['Y', 'y', 'N', 'n']: chooseAR( ) else: print ('Thank you for using this app.') chooseAR ( ) # This function is one problem. Program initializes all # functions on first pass, but it needs"chooseAR" here to allow the # program to start, else it never runs; however, the"chooseAR" sets up # an infinite loop if it exists here. |
好吧,根据我的理解,您不想提供一个特定的代码示例,因为您想知道如何自己进行调试?如果不知道您要调试的内容,就很难回答这个问题。好的。
编码时可能出现几种类型的问题好的。
- 错字
- 语法错误
- 逻辑错误
错字
别笑,这是你遇到的最常见的错误。如何调试它们?实际上,最好的方法是校对阅读代码。它还高度依赖于IDE。如果您正在开发类似Microsoft Studio IDE或Apple的Xcode IDE的软件,它会提示您要键入什么,您可以自动完成键入。如果提示没有出现…你可能在打字。好的。
对于在文本编辑器中编程的内容(如shell、python等),这些选项通常不可用。一个技巧是复制粘贴变量名。这样你就不会犯错误了。注意从哪里复制粘贴…您不想在代码上粘贴以前的拼写错误:)好的。
有时,你可以直视打字错误,却看不见。最好的方法是检查变量。同样,有了各种各样的IDE,就有了内置的调试器,您可以做到这一点。对于其他变量,只需回显/打印/输出变量并自己检查它们的值。如果您期望一个变量中有一个值,并且该值为空(或者更好的是,出现"未定义变量"类型错误),那么现在您可以集中精力查看名称中是否有拼写错误。好的。语法错误
语法错误实际上更容易看到,因为它们通常会产生某种错误(在编译时或运行时)。您在语言方面的经验越多,所犯的语法错误就越少。谷歌的代码示例和手册页,为您试图使用和理解其语法的具体结构。StackOverflow也是一个很好的来源。不要害怕问语法错误的问题。这种解释可能会让事情变得更加清楚,而不是盲目地使用试错法。好的。
通常,只需在引号中搜索错误消息,就可以获得修复错误所需的所有信息。好的。逻辑错误
这些是最难调试的,因为它们不是计算机错误,而是您的设计问题。解决这些问题的能力完全来自经验和编程能力。StackOverflow是一个提问的好地方,其他人会为您提供可能的解决方案和解决方法。即使这些解决方案不适用于您的案例,它也会让您的思维朝着正确的方向思考,并给您一些想法。好的。
如果你有经验,去你以前写的程序看看你是如何解决类似问题的。好的。例子
所以,在你的例子中,你没有给我们太多:
- 变量赋值
- 变量引用
- 算术运算
- 操作优先级
其中任何一个都可能带来问题。因此,要进行调试,首先简化表达式:好的。
- 首先打印变量
print area print PI print radius
您应该看到具有预期值的输出。如果其中任何一个为空,则可能键入了变量名。即使它在这里拼写正确,也可能是在您第一次声明它并给它一个值时拼写错误。好的。
- 接下来,做一个简单的操作,比如
temp = PI * radius ,然后打印结果print temp 。验证该值是否符合预期。由于数据类型的兼容性,您可能有语法错误(此处不是这种情况)
但要总结这一点,基于您对"外部引用的变量"的引用,这可能是一个范围问题。通常,您不能引用在其作用域之外声明的变量(例如,在函数内部声明的变量不能被调用此函数的同一个更高的块引用),但类似的东西在语言定义中。你只需要知道你正在编程的语言。好的。
如果你对编程还不熟悉,读一本大型的语言定义书太令人生畏,那么你至少应该读一读这些在每种语言中都很常见(但又不尽相同)的东西。好的。
- 变量声明和引用
- 算子
- 可变范围
- 常见构造
- 函数声明和调用
好啊。
正如你自己所说,这与经验有关。你越有经验,就越不可能问别人每一个小问题。
但是为了获得这种经验和进步,你必须克服这些小问题,因此提问无疑是一种有效的方法。
只要你努力从错误中吸取教训(如果有人能这么说的话),一切都应该是好的。
不管怎样,一些调试人员可能是真正的咳嗽疼痛。