python 上机实践答案 python上机题及答案

Python初学者常见趣味错误集锦

这两年教Python编程,学生基本都是0基础小白,他们犯的各种错误非常天真,有时还很有想象力,分享出来,大家瞧瞧,自己或自己的学生,有则改之,无则一笑。

一、不知道程序是顺序执行的

有小白写道:

a = b + c
b?=?int(input())
c?=?int(input())
print(a)

希望打出b、c之和。小白的心路历程如下:我一开始就讲得很清楚了,a等于b加c啊。后面我又告诉你b和c是输入来的,小白都应该知道打出a自然应该是b、c之和嘛。可惜Python解释器很笨,看不懂他那高级的倒叙写作手法。程序是顺序执行的,对老师来说这好像是天经地义,甚至用不着说。但总有个别学生不明白这句话的真实含义,如果提都没提,他们就完全没有概念了。

二、不知道中文标点符号用不得

曾经有组织某著名编程等级考试的老师告诉我,每次考试都有考生连打印"hello,world"都写不出0分而返。我说怎么可能,知道自己一行程序都不会写还去考,还不如吃饱撑死算了。这位老师说,这些人都因为对考试提供的机器环境不够熟悉,把引号或者括号或者空格打成了中文全角的了。英语还不好看不懂错误信息,结果死活都过不了。我听完感觉就是他们的机器好坑。后来发现小白们犯这个错误真的很普遍,而且他们对着Pycharm在全角标点下面画出来的血淋淋红线也义无反顾勇往直前。

三、误以为字符串里面可以包含变量

s =
print("I am s m tall")

小白天真地想,我前面说了s=了,傻子都应该知道,那个字符串里的s就是嘛,所以应该输出 I am1. m tall。想得美。当然还有更过分的,觉得print("4+5")应该输出9。

四、想用字符串却不加引号

print(hello,world)就想输出hello,world, print(a/nb)就想输出a的值,换行,然后输出b的值。放荡不羁,天马行空。

五、误把除号当分数线

亲们,/ 是 ÷ ,不是分子分母之间的分数线啊!因此a/b*c是a÷b×c,不是a/(b*c)。

六、在Python程序中野蛮使用代数思维

写个(a+b)c,就觉得是(a+b)*c, 2c就是两倍的c, |x|就是绝对值x。虽然没人告诉他们可以这么干。大概法律系的学生爱犯这种错误,还以为法不禁止即可为呢。

七、抗拒elif

也不知道是elif不好记,还是本身就是错别字惹人讨厌,许多小白在本该用if...elif...elif...的地方就是不用elif,而是写多个并列的if。比如:

if a < 3:
???????.....
elif?a>=?3?and?a?

在小白看来,和

if a < 3:
???????.....
if?a?>=?3?and?a?

没区别,反正那两个条件都是最多只可能满足一个。应该这么教育他们:

if你有不到3块钱:
???????我给你7元
elif?你的钱不少于3块但不到块
???????你给我2块

能和:

if 你有不到3块钱:
???????我给你7块
if 你的钱不少于3块但不到块
???????你给我2块

一样吗?

八、追求界面友好的圣母心

在OJ(在线程序评测平台)上做题,总有学生输入的时候喜欢写:

a = input("亲,请输入一个数:") 这样,显得非常人性化。只不过你的程序是给OJ服务器用的,它不需要人性化,它只会觉得你啰里啰唆然后给你个Wrong Answer。

九、不知道input()一次会输入一行

初学者程序在OJ上提交得到的runtime error,最多的原因就是多用了input()。比如要求两个数的和,输入是:

程序这么写:

a = int(input())
b = int(input())
print(a+b)

卒。

十、print的时候乱用逗号

print时用','分开要输出的多项,会导致输出的多项之间出现空格,这可能导致输出不符合题目要求。解决办法是把要输出的多项全部变成字符串,然后用"+"连接,或者用格式控制的那一套办法。

十一、'/'的结果一定是小数,小数参与运算结果就是小数

题目要求输出结果是整数,比如,却输出小数。忘记了除法 / 的结果一定是小数,以及含小数的算式结果一定是小数,就可能导致这个问题。根据实际情况,可以考虑用int(x)或round(x)将小数x转换成整数,就能解决这个问题。

十二、程序输出的大小写和题目要求的不一致

不仔细看题目要求的输出,自己随便乱敲。比如题目要求输出"YES",程序输出的是"Yes",题目要求输出"case 1#",程序输出是"case #1"之类。程序中要输出的固定文字,一定要从题目的样例输出中拷贝粘贴,不要自己敲。据我经验,每次期末上机考试,都会有学生仅仅因为这种问题在一道题上卡很长时间,甚至最后也无法通过,这道题一分不得。有的学生只是捶胸顿足,悔之晚矣,有的就会抱怨考试评分标准不公,甚至社会不公,猜测最严重者可造成一生的心理阴影。

十三、各种runtimeerror:

runtime error原因排行榜:

  • 多用了input()
  • 做了不合法的转换。如x为"a12"或""时做int(x),或x为"abc"时做float(x)。
  • 字符串或者列表下标越界
  • 将字符串与数值相加

最后说一个错误,是老师和教科书常犯的了,虽然基本不影响写程序,但是如果被好事的学生指出来,未免有点尴尬。那就是所谓”多行注释“的提法,说什么用三个单引号括起来的,就是多行注释,比如:

a=a+b
'''
这里是多行注释
真的很多行
'''
print(a)
"那这个岂不也是注释"
print(b)

那玩意是字符串好吧,不是什么注释。当然你要像上面那样写个没用的字符串当注释用,几乎也不影响什么。只不过那样的话,像第7行,字符串就都是注释了,成何体统。下面的程序可以证明三引号括起来的东西不是注释:

if a == 0:
''' 这个是注释吗?
   我看不是的
'''
print(a)

如果把上面那行所谓的注释的缩进搞得和print语句不对齐,马上就会报错。哪有注释还要求缩进对齐的?且在Pycharm里面,它是字符串的绿色,而不是注释的灰色。

另外再多一句嘴,不是关于bug的,而是关于码德码风的:严禁在程序里面使用脏字!人家写个函数名字叫做 solve(),偏有人写个函数要叫 f**k(),变量名f**k1,f**k2.....。虽然个别,但不是孤例。十几年前我就碰到,现在还能碰到。大概他们觉得程序交到OJ没人看吧,说不定反倒还要怪我偷窥了。须知天道昭昭,人前人后一个样,才是一个正直的程序员。

最后进个广告,我在中国大学MOOC上开了非常不专业的Python课,“实用Python程序设计",实用,实用啊!所谓不专业,当然不是我不专业,而是强调专门面向非计算机专业的同学,欢迎学习!

谢谢阅读!

原文链接:,转发请注明来源!