帮助孩子找到常见的编程语义错误
Posted 六一编程网
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了帮助孩子找到常见的编程语义错误相关的知识,希望对你有一定的参考价值。
当孩子们第一次学习编码时,很容易犯语义错误。与语法错误不同,语义错误通常更难捕获。这是因为语义错误通常是编程逻辑中的错误,而不是您键入错误的内容。在这里,您会找到几个您和编程初学者在几种不同的编程语言中可能遇到的语义错误的示例。
无限循环
无限循环是永无止境的循环!他们无限地运行。这可能是一个问题,因为看起来似乎代码无法正常工作,但实际上该程序可以永远运行。
使用Java
如果您编写了一个小型Java程序,要在其中打印数字0到9,则可能会编写如下内容:
for(int index = 0; index < 10; index--)
{
System.out.println(index);
}
但是这段代码有错误!代码没有将索引更新为index + 1,而是将索引更新为index – 1!因此,代码执行以下操作:
index = 0
Is index < 10? Yes
Print index 0
index = index – 1 index = -1
Is index < 10? Yes
Print index -1
index = index – 1 index = -2
Is index < 10? Yes
Print index -2
index = index – 1 index = -3
Is index < 10? Yes
Print index -3
这将永远持续下去,因为索引不可能大于或等于10。因此,当您运行Java代码时,程序将永远打印,直到您杀死该程序!
使用Scratch
尽管无限循环可能是个问题,但某些编程语言还是故意实现了无限循环,以产生一些非常巧妙的效果!例如,在Scratch中有一个永远的方块,可以做一些很酷的事情。
off-by-one错误
另一个非常常见的错误称为off-by-one错误。在处理列表和遍历列表时,这很常见。
使用Scratch
与往常一样,Scratch会为用户处理一个错误,而并没有真正表明存在问题。例如,下图显示了一个循环浏览宠物列表的程序,其精灵名为Hi petName,其中petName被列表中的项(卢克,温斯顿或公主)代替。循环重复四次,但是列表中只有三项。在最后一次迭代中,Scratch没有完全中断,而是在打印Hi之后不显示任何内容。
使用Python
其他编程语言并不那么宽容。例如,在Python中,您可能使用以下程序来与这三种宠物打招呼:
pets = ['Luke’, 'Winston', 'Princess']
for x in range(1, 3):
print (‘Hi ‘ + pets[x])
如果运行此程序,则输出为:
无法显示“ Hi Luke”的原因是因为Python中的列表从0开始而不是从1开始。正确的代码是:
pets = ['Luke', 'Winston', 'Princess']
for x in range(0, 3):
print ('Hi ' + pets[x])
Python中使用的范围函数:
range(0, 3)
表示元素0、1和2,因为range函数包含第一个数字,但不包含第二个数字。
Python中off-by-one错误的另一个版本是,如果超出了列表的长度。例如:
pets = ['Luke', 'Winston', 'Princess']
for x in range(0, 4):
print ('Hi ' + pets[x])
这甚至会引起更多的问题,因为您正在尝试访问的元素不仅仅只是丢失列表中的一个元素,而且还没有访问任何其他元素。运行此代码的输出是:
Hi Luke
Hi Winston
Hi Princess
Traceback (most recent call last):
File "filename.py", line 4, in
print ('Hi ') + pets[x]
IndexError: list index out of range
实际存在错误,因为宠物[4]的数据不存在,因此计算机无法解决;因此它不知道该怎么办。
对于编程初学人员而言,off-by-one错误是非常棘手的,尤其是当他们在列表从1开始的语言与列表从0开始的语言之间切换时。
以上是关于帮助孩子找到常见的编程语义错误的主要内容,如果未能解决你的问题,请参考以下文章