入手python时踩过的坑——缩进篇

本篇文章适合python初学者食用。
相信很多刚开始入手python的新人,都跟我一样,习惯了C/C++采用分号来结束语句和花括号来标明代码块的方式,导致在用python写个简简单单的“hello world”都能Error半天 。(哈哈,又是无中生有系列!)所以,我只能痛定思痛,写下这惨痛的经历并总结经验。
在python中,代码块是通过冒号+缩进来实现的,语句末尾的冒号表示创建一个子代码块,有C/C++花括号那味了。同一级别的代码必须有相同的缩进,也就是所有同一级别的代码都必须左对齐,多一个空格少一个空格都不行!!!(不得不说python就是一头倔驴!)所以对于习惯了C/C++的python新手来说,下次程序报错时,不妨先看一下是不是缩进的问题,当然更多时候是忘记写冒号了(我是不会告诉你我就是那个经常忘记写冒号的憨憨的! )。
无图无真相,下面我们来CC编程实操:

>>> x = "错误演示"
>>>   print(x) #print前留有空格
SyntaxError: unexpected indent #存在不必要空格

>>> for i in range(5) #句尾忘记打上冒号
SyntaxError: invalid syntax #提示非法语法

>>> for i in range(5): #子代码块的缩进错误
print(x)
SyntaxError: expected an indented block #提示句首缺少空格

>>> x = "正确演示"
>>> for i in range(5):
		print(x)
正确演示
正确演示
正确演示
正确演示
正确演示

>>> x, y = "第二级","第三级"
>>> for i in range(3):
		print(x)
		for j in range(2): #与print(x)同级,缩进相同
			print(y)
			print("同是第三级") #与print(y)同级,缩进相同
		print("同是第二级") #与print(x)同级,缩进相同
第二级
第三级
同是第三级
第三级
同是第三级
同是第二级
第二级
第三级
同是第三级
第三级
同是第三级
同是第二级
第二级
第三级
同是第三级
第三级
同是第三级
同是第二级

>>> for i in range(3):
		print(x)
		for j in range(2):
			print(y)
		      print("同是第三级") #与第三级错位
	      print("同是第二级") #与第二级错位
	    
SyntaxError: unexpected indent #存在不必要空格

是不是感觉python没有C/C++那么人性化呢?但相反这确是python的一大优点。其他语言没有强制缩进,导致一些程序员不追求代码的美观,一通乱写,当你看到这些代码时,你就会发现你的眼睛废了(这次真的是我的一个朋友了!!! 我说了他几次了,还是不听,因为他们老师没强制要求缩进,他个人也不注重美化,他拿他的代码来问我题,我都宁愿自己重新打一遍。)无图无真相,就问你难不难受?
在这里插入图片描述
在这里插入图片描述

所以,python 的这种强制性缩进,既能让代码简化(少打了许多花括号和分号),又能让代码美观(zzqq,专治各种强迫症。)虽然刚开始会比较难适应,但慢慢习惯了你就会发现世界如此美妙。
这么说python缩进没有缺点?那也不是,相信很多同仁都喜欢ctrl+c和ctrl+v吧,有时你就会发现你别人能运行的代码你不能运行,这就是在复制粘贴缩进错乱的结果。

既然讲到了ctrl+c和crtl+v,那就顺便讲讲为啥会在复制粘贴的过程中出现缩进错乱。

假设你的小伙伴给了你一段代码,他又喜欢使坏,故意将“Tap”键和空格键混用。假设他的电脑设定了“Tab = 4个空格”,而你的电脑设定了“Tap = 8个空格”,又找到了一个防止抄袭的方法,只不过只能玩一次,一次之后人还在不在我就不知道了 )这时,你就会发现这份代码无法运行。

这就是前面提到的缩进错乱引起的严重结果。

测验如下:(CSDN博客代码片段中的Tap = 4个空格,而我使用的python IDLE中的Tap = 8个空格,代码从CSDN复制到IDLE

>>> for i in range(2):
	print("1") #使用Tap
	for i in range(2):
		print("2") #使用Tap	
1
2
2
1
2
2
#程序在IDLE中可以正常运行
>>> for i in range(2):
    print("1") #使用4个空格
    for i in range(2):
        print("2") #使用4个空格
1
2
2
1
2
2
#程序在IDLE中可以正常运行
>>> for i in range(2):
	print("1") #使用Tap
    for i in range(2):
        print("2") #使用4个空格
        
SyntaxError: unindent does not match any outer indentation level
#程序在IDLE中报错

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

既然存在这个问题,那我们就要解决这个问题。

方式1:手动将Tap换成空格或将空格换成Tap。你行你上啊!!!
在这里插入图片描述

方式2:利用函数expandtabs()预处理代码,将代码中的Tap设定为指定空格数。
使用方法:先将代码存放为字符串code,可以选择程序输入、文件导入、手动添加三引号号等方式。然后new_code = code.expandtabs(空格数),这时new_code中所有的Tap都会被换成指定数量的空格,实现了大一统。(简直就是秦始皇再世

>>> code = """for i in range(2):
	print("1") #使用Tap
    for i in range(2):
        print("2") #使用4个空格"""
>>> new_code = code.expandtabs(4) #注意空格数要保持一致,否则就是做无用功
>>> print(new_code)
for i in range(2):
    print("1") #Tap变成4个空格
    for i in range(2):
        print("2") #使用4个空格
>>> for i in range(2): #处理过的代码,可以正常运行
    print("1") #Tap变成4个空格
    for i in range(2):
        print("2") #使用4个空格  
1
2
2
1
2
2

方式3:修改所用软件中Tap的值。具体方式自行参考不同软件的使用手册。

当然,还是得从根本上解决这个问题,参考方式如下:
在这里插入图片描述

敲黑板!!!python是采用冒号+缩进来标示代码块,谨防忘记缩进,避免不必要的缩进,并且同级代码的缩进必须相同,不能多也不能少。谨记Tab和空格不要混用,否则性命难保!

凉梦空间

欢迎你进入我的个人博客网站参观交流:https://www.liangmeng.xyz

在这里插入图片描述

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉丶梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值