关于python:不像编程经验那样编码问题

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是一个提问的好地方,其他人会为您提供可能的解决方案和解决方法。即使这些解决方案不适用于您的案例,它也会让您的思维朝着正确的方向思考,并给您一些想法。好的。

如果你有经验,去你以前写的程序看看你是如何解决类似问题的。好的。例子

所以,在你的例子中,你没有给我们太多:radius = area / PI * radius这实际上不是一个简单的陈述。有:好的。

  • 变量赋值
  • 变量引用
  • 算术运算
  • 操作优先级

其中任何一个都可能带来问题。因此,要进行调试,首先简化表达式:好的。

  • 首先打印变量print areaprint PIprint radius

您应该看到具有预期值的输出。如果其中任何一个为空,则可能键入了变量名。即使它在这里拼写正确,也可能是在您第一次声明它并给它一个值时拼写错误。好的。

  • 接下来,做一个简单的操作,比如temp = PI * radius,然后打印结果print temp。验证该值是否符合预期。由于数据类型的兼容性,您可能有语法错误(此处不是这种情况)

但要总结这一点,基于您对"外部引用的变量"的引用,这可能是一个范围问题。通常,您不能引用在其作用域之外声明的变量(例如,在函数内部声明的变量不能被调用此函数的同一个更高的块引用),但类似的东西在语言定义中。你只需要知道你正在编程的语言。好的。

如果你对编程还不熟悉,读一本大型的语言定义书太令人生畏,那么你至少应该读一读这些在每种语言中都很常见(但又不尽相同)的东西。好的。

  • 变量声明和引用
  • 算子
  • 可变范围
  • 常见构造
  • 函数声明和调用

好啊。


正如你自己所说,这与经验有关。你越有经验,就越不可能问别人每一个小问题。

但是为了获得这种经验和进步,你必须克服这些小问题,因此提问无疑是一种有效的方法。

只要你努力从错误中吸取教训(如果有人能这么说的话),一切都应该是好的。

不管怎样,一些调试人员可能是真正的咳嗽疼痛。