快速上手python的坑

快速上手python的坑

这篇文章是乱写的

零 使用的软件及其版本

python 3.6

PyCharm Community Edition 2016.2.3

一 输入输出

输出

(在python 3.* 中?)print后要加括号

1 print(123)
2 print("123")

 上述代码还有两处重点

  1. print会自动换行
  2. 数字和字符串不同但可以转换(直接暴力强转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的智能……

原文地址:https://www.cnblogs.com/send-off-a-friend/p/13384732.html