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=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 为整数型,二者无法比较”。
5、练习
练习-一起来捉虫-参考
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)
print(x,'/',y,'=',z)
break # 默认每次只计算一次,所以在这里写了 break。
except ZeroDivisionError: # 当除数为0时,跳出提示,重新输入。
print('0是不能做除数的!')
except ValueError: # 当除数或被除数中有一个无法转换成浮点数时,跳出提示,重新输入。
print('除数和被除数都应该是整值或浮点数!')
# 方式2:将两个(或多个)异常放在一起,只要触发其中一个,就执行所包含的代码。
# except(ZeroDivisionError,ValueError):
# print('你的输入有误,请重新输入!')
# 方式3:常规错误的基类,假设不想提供很精细的提示,可以用这个语句响应常规错误。
# except Exception:
# print('你的输入有误,请重新输入!')
每一个结果,可能有多个方法,同学们可以多多尝试。