平时编程要注意的 BUG

DEBUG的世界

在编程的时候会有很多错误,俗称BUG,我们下来一起看看都有那些BUG吧!

1、bug1:粗心

①、语法错误:SyntaxError: invalid syntax

问题:if 语句后面缺了 “:”

a = input(‘你是谁:’)

if a == ‘游乐王子’

print(‘平平淡淡才是真’)

正解:

a = input(‘你是谁:’)

if a == ‘游乐王子’:

print(‘平平淡淡才是真’)

②、语法错误:SyntaxError: invalid syntax

问题:for 语句后面的冒号 “:” 应为英文输入 “:”

for i in range(3):

print(‘延君贼帅’)

正解:

for i in range(3):

print(‘延君贼帅’)

③、没有验证函数参数是否有效:SyntaxError: unexpected EOF while parsing

问题:print 语句末尾缺了括号

a=10

b=11

print(‘我完成第%d关了,马上完成第%d关’%(a,b)

正解:

a=10

b=11

print(‘我完成第%d关了,马上完成第%d关’%(a,b))

④、与任何外部缩进级别都不匹配:IndentationError: unindent does not match any outer indentation level

问题:第 6 行的 else 与第 4 行的 if 没有对齐

a=int(input(‘今天完成第几关了?’))

if a > 10:

print(‘有10关的笔记’)

if a >= 11:

print(‘有11关的笔记’)

else:

print(‘没11关的笔记’)

else:

print(‘没10关的笔记’)

正解:

a=int(input(‘今天完成第几关了?’))

if a > 10:

print(‘有10关的笔记’)

if a >= 11:

print(‘有11关的笔记’)

else:

print(‘没11关的笔记’)

else:

print(‘没10关的笔记’)

⑤、类型无法比较错误:TypeError: ‘<’ not supported between instances of ‘str’ and ‘int’

问题:input 的值为字符型,18 为整数型,二者无法比较

a=input(‘同学知道延君几岁吗?’)

if a < 18:

print(‘答对了’)

else:

print(‘答错了’)

正解:

a=int(input(‘同学知道延君几岁吗?’))

if a < 18:

print(‘答对了’)

else:

print(‘答错了’)

⑥、语法错误:SyntaxError: invalid syntax

问题:= 是赋值语句,== 是判断语句,不要混淆

a=int(input(‘同学记得今天是 day 几吗?’))

if a = 2:

print(‘答对了’)

else:

print(‘答错了’)

正解:

a=input(‘同学记得今天是 day 几吗?’)

if a == 2:

print(‘答对了’)

else:

print(‘答错了’)

⑦、变量未定义错误:NameError: name ‘random’ is not defined

问题:random 模块未定义,导致提示变量 random 未定义

a=random.random()

print(a)

正解:

import random

a=random.random()

print(a)

##

2、bug2:知识不熟练

①、超出列表范围:IndexError: list index out of range

问题:列表的索引是从 0 开始,而不是 1

a=[‘day1’,’day2’]

print(a[2])

正解:

a=[‘day1’,’day2’]

print(a[1])

②、字典没有 append 方法:AttributeError: ‘dict’ object has no attribute ‘append’

问题:字典的元素新增是 d[‘X’]=Y

d={‘延君’:1,’卡西’:2}

d.append(‘七七’)

print(d)

正解:

d={‘延君’:1,’卡西’:2}

d[‘七七’]=3

print(d)

##

3、bug3、思路不清

在思路不清晰时,我们可以适当在代码中加入 print 语句,打印我们不理解的变量,例如下面,我们不理解第 5 行的 变量 c 为多少,可以在第 5 行下面加上 print(c) ,借此来打印我们不理解的值

def A():

a=’延君’

b=’卡西’

return a,b

def B(c):

print(c)

name1=c[0]

name2=c[1]

print(name1+name2)

def main():

e=A()

B(e)

main()

##

4、try… except… 语句

使用:try 语句内放执行语句,except 语句放捕获错误后需要进行的下一步操作,例如:

try:

a=input(‘同学知道延君几岁吗?’)

if a < 18:

print(‘答对了’)

else:

print(‘答错了’)

except:

print(‘输入有误’)

原因是“input 的值为字符型,18 为整数型,二者无法比较”。

  1. 练习

###

练习-一起来捉虫-参考

1.知识点debug

【参考】

scores = {‘语文’:89, ‘数学’:95, ‘英语’:80}

def get_average(scores): #定义get_average()函数

sum_score = 0 #定义整型变量sum_score

for subject, score in scores.items(): #取出字典中的键和值分别赋值给变量subject,score

    sum_score += score #sun_score=sum_score+score

    print('现在的总分是%d'%sum_score)

ave_score = sum_score/len(scores) #计算平均值

print('平均分是%d'%ave_score)

get_average(scores) #调用函数

2.思维不清debug

【参考】

not_bad_word = True

while not_bad_word:

x = input('请给旺财取个外号:')

if x == '小狗' or x =='汪汪':  # 只要外号是两个中的一个,就会生气。

    not_bad_word = False

    print('我生气了,不想理你了!')

print(‘对不起,以后我不会这么叫你了’)

3.被动掉坑debug

【参考】

deposit = [100,300,900,2000,5000,0,2000,4500]

for i in range(1, len(deposit)):

if deposit[i-1] == 0:  # 判断被除数等于0时,特殊处理。

    print('你上次存款为 0 哦!')

else:

    times = deposit[i]/deposit[i-1]

    print('你的存款涨了%f倍'%times)

###

练习-贴心的除法计算器-参考

print(‘\n欢迎使用除法计算器!\n’)

while True:

try:

    x = input('请你输入被除数:')

    y = input('请你输入除数:')

    z = float(x)/float(y)

except ZeroDivisionError:

    print('0是不能做除数的!')

except ValueError:

    print('除数和被除数都应该是整值或浮点数!')

else:

    print(x,'/',y,'=',z)

    break
讨论数量: 1

求你了,发一篇自制的 :joy:

4年前 评论
Lele1357 (楼主) 4年前
Coolest (作者) 4年前
Lele1357 (楼主) 4年前
Coolest (作者) 4年前
娃哈哈店长 4年前
Lele1357 (楼主) 4年前
Coolest (作者) 4年前
Coolest (作者) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!