快速上手python的坑
快速上手python的坑
这篇文章是乱写的
零 使用的软件及其版本
python 3.6
PyCharm Community Edition 2016.2.3
一 输入输出
输出
(在python 3.* 中?)print后要加括号
1 print(123) 2 print("123")
上述代码还有两处重点
- print会自动换行
- 数字和字符串不同但可以转换(直接暴力强转int("123") !)
还可以在print中用逗号分隔,左右两个元素输出之间会自动多一个空格
1 a=123 2 print("a的值是",a)
输出:
1 a的值是 123
输入
一般用input(),该函数返回值是字符串,参数是想要预先告诉输入者的话(可选)
故,当你想要输入一个数字时……
1 a=input("这里是想要预先说的话,比如你可以说'请输入一个数字并按回车'") 2 print(a) 3 print(a+1)
第一行,语法上没问题
第二行,语法上没问题
第三行,语法上没问题,但是在运行中会报错,因为a是个字符串而不能和数字相加
数字只能和数字相加,字符串只能和字符串相加
故,需要把a转化成int类型。
可以在input()前面加上int,即int(input()),也可以在加法运算的a前加上int,即print(int(a)+1)
当然,用途不同,你也可以把两个字符串相加,就是将后面的那个放到前面的末尾。
另外,input()是遇到换行符才返回,所以当两个数据中间不是用换行符分割而是用空格、制表符时,请用一个input()再加上分割函数split()来将几个数据分开 input().split()
例如:
input:123 456 789
那么input().split()就是一个有三个元素的列表(list),["123","456","789"],并且其元素都是字符串而不是数字!
循环与分支
- python的不同层的结构全靠Tab键(也就是制表符,或者说是4个空格?)
- 其实一条语句后面可以加分号的,但是有了第一条就完全没必要了
- while,for,if记得打冒号!!!
列表,元组与字典
列表
未知元素个数的列表该怎么访问?
f1=open("test.txt",'r') list=f1.readlines() #这样你就不能知道list有多少元素了
方法一
使用len()
1 for i in range(len(list)): 2 print(list[i])
方法二(推荐)
直接for
1 for i in list: 2 print(i)
建议第二种。因为短小精悍……
注意,第一种中,i是数字,作为下表访问。第二种中,i是list的元素的类型,直接print。
range()的起始大于末尾
range()一般最多有三个参数,分别是start,stop,step
其实start是可以比stop大的(尽管这不合常理)
如果step为正(或指定step)
1 a=list(range(10,4)) 2 print(a)
输出
1 []
什么都不输出
如果step为负数
1 a=list(range(10,4,-1)) 2 print(a)
输出
1 [10, 9, 8, 7, 6, 5]
输出是倒序的,仍然是左闭右开(这里是包括大的10,不包括小的4)的列表
列表的函数和方法
.append(a)
在后面追加一个元素a
.insert(a,b)
将b插入到下表为a的元素之前,也就是使b插入成为a号元素,后面的元素顺移
.extend(a)
合并两个列表,将a放到原列表之后
.index(a)
返回为a的元素的下标。如果有多个,返回第一次出现的(下标最小的)
.remove(a)
从列表中删除第一次出现的a
.pop(index=-1)
删除列表中下表为index的值(默认为-1也就是最后一个值),并返回这个值
另外最常用的当然有切片和下标访问,切片[起点=0:终点=len(list):步长=1],下标[可正可负]
cmp(list1,list2)
python3没有
len(list)
返回元素个数
max(list)
返回元素中的最大值
min(list)
返回元素中的最小值
list()
将元组转化为列表
del(list[a])
删除list的下标为a的元素,无返回值
注意三种删除(pop,remove,del)
pop是指定下标,remove是指定元素的值,del是指定某个列表的某个下标
别名
当你在定义一个变量b时将其的值赋为另一个变量a时
1 a=123 2 b=a 3 print(id(a)) 4 print(id(b))
这两个变量的id(地址)是相同的
1 1448260512 2 1448260512
然后,当你又把早已定义过的变量b赋或变量c时
1 a=123 2 c=456 3 b=a 4 print(id(a)) 5 print(id(b)) 6 b=c 7 print(a) 8 print(b) 9 print(id(a)) 10 print(id(b)) 11 print(id(c))
b的id会变化为与c的id相同,a的值不会改变
1448260512 1448260512 123 456 1448260512 2861234749232 2861234749232
【也就是说,把一个变量赋给另一个变量时先不会申请行动空间,只有在之后的操作中才会变id】
若把a,b赋值为一个常量
本来a,b的id是不会相同的
但是如果a,b的值相同(不一定要初值!),
那么a,b会自动分配为一个内存
1 a=123 2 b=123 3 print(a) 4 print(b) 5 print(id(a)) 6 print(id(b))
输出
1 123 2 123 3 1448260512 4 1448260512
为什么不一定要初值?
如:我在开始时,两个数据本不一样,但后来将其相等了
1 a=123 2 b=1234 3 print(a) 4 print(b) 5 print(id(a)) 6 print(id(b)) 7 b=123 8 print(a) 9 print(b) 10 print(id(a)) 11 print(id(b))
输出
1 123 2 1234 3 1448260512 4 1634576400176 5 123 6 123 7 1448260512 8 1448260512
我承认python的智能……