一、使用IDLE的情况下:
打开IDLE,点击菜单栏中的"File" -> "New File",
在新文件中,保存起来。代码写完要运行,按F5。
其中要输出1+1,也需要放进print()中,不然按F5,看不到结果。
添加注释的三种方法:(注释的作用:解释说明,方便他人阅读)
1、单行注释:一个井号键 "#" 井号后的内容都会被解释器忽略。
2、多行注释:三个单引号 '''abcde''' 或 三个双引号 """abcde"""
3、直接用引号引起来,不赋值给变量,就是注释:'abc' / "abc"
变量的命名规则:变量就是取名字。特点:后者会覆盖前者。
1.由字母、下划线、数字组成。
2.不能以数字开头。
3.不能用关键字。
二、Python中的数值:
Python中数值类型不可变(强类型语言),不可以:1 + "1"
Python中变量无类型(动态类型),无需在变量前写 int, string, float等关键字。
三、Python完全面向对象:
面向对象举例:叫了某个人去买瓶水,他把水买来就好了。
面向过程举例:叫了某个人去买瓶水,给他钱,跟他说买什么牌子,容量多少,下楼,出门左拐,过马路,到了小卖部,问老板买水,再回来。整个过程。
查看内置函数的方式:dir(__builtins__) 注:是双下划线
查看python中所有的关键字:
import keyword
print(keyword.kwlist)
四、基本数据类型 (底层存放数据是二进制方式的)
a = 1
print(type(a)) # <class 'int'>
b = 1.1
print(type(b)) # <class 'float'>
c = True
print(type(c)) # <class 'bool'>
# 复数用于科学研究,这里不常用
e = 1 + 1j
print(type(e)) # <class 'complex'>
bool类型是有具体的数值,可参与算术运算。
True+1 -> 结果是:2
True+0 -> 结果是:1
True==2 -> 结果是:False
另外注意一点:浮点型是不精确的。
先看如下代码的运行结果:
a = 1
c = 1.1
print(c - a) # 结果是:0.10000000000000009
需要精确运算,需要Decimal()方法:
import decimal # 导入十进制的浮点型
d = decimal.Decimal("1.1") # 必须加引号,不然还是调用的float
print(d - 1) # 0.1
# 源码中,括号内是object类型。
"""
class Decimal(object):
'''Floating point class for decimal arithmetic.'''
"""
"""
python完全面向对象 要给参数指定一个数据类型 不然python就会默认。
1.1是个float浮点类型 不加引号的话 传过去了 对于object来说 1.1就是会被默认为float 然后继续执行float不精确运算
"""
两种除法:地板除、天花板除
(1)、地板除:两个斜杠 //
print(5 // 2) # 结果:2。只取整数部分,小数部分全部舍去
(2)、天花板除:普通的除法,但要写在 math.ceil() 这个函数的括号内
import math
# 看见ceil() 抬头看天花板 向上取整
print(math.ceil(5 / 2)) # 结果:3。不管小数多少都会进位
四舍五入的方法:round()
# 不用引入math模块
print(round(7 / 2)) # 结果:4。四舍五入
五、序列类型
简单来说,对象里面的元素是有顺序的。(下标索引从0开始)
(1)、str类型:不可变(改变了需要重新赋值)。
(2)、列表:list -> li = [] 可变(可以在自身的基础上进行修改,不可描述的改变)。注:目前只试出了列表可以自加。
dir(list)查看属性和方法,会发现有"__iter__"就是可迭代的。
list.append() 返回:None 不可言语的改变,需要调一下list的变量。
list.count() 计数括号中那个元素在列表中出现了几次,不加参数会报错。
list.extend(iterable) 将iterable中的元素顺序添加到列表的末尾。
# extend()方法 演示
li1 = ["a", "b"]
li2 = [1, 2]
li1.extend(li2) # return None 不可描述的改变
print(li1) # ['a', 'b', 1, 2]
list.index() 默认返回:括号中元素,第一次出现的索引位置。其中,该方法的可选参数:start,stop 遵循左闭右开的原则。
list.insert(index,item) 指定索引位置,插入元素。
列表切片:遵循左闭右开的原则,切片方向和步长方向要一致!
li[0:3] 左闭右开,从下标0的元素可以取到,但是下标3的元素取不到。(正向索引从0开始,反向索引从-1开始)
步长:[star : stop : n] 第二个冒号后面是步长。(跨台阶的概念)
例如:li[0:5:-1] -> 取不出任何值,返回一个空列表。因为上面说过了:“切片方向和步长方向要一致”。这里步长错了,步长方向是反向了。
(3)、元组:tuple -> tu = (1,2) 不可变。
# 创建空元组不可以在小括号内加逗号
tu = ()
print(type(tu)) # <class 'tuple'>
六、工厂方法:(经过工厂加工一下)
a = "abc"
print(list(a)) # 结果:['a', 'b', 'c']
# 使用 工厂方法,将a的值反转输出
a = 789
print(int(str(a)[::-1]))
print(type(a)) # <class 'int'>
# 先强转成字符串,倒序。然后再强转成int
# 同理字符串也可以转成list
print(list("abcde"[::-1])) # ['e', 'd', 'c', 'b', 'a']
小练习:
# 有个时间形式是(20180206),通过整除和取余,来得到对应的日,月,年
time_date = 20181216
print("年:", time_date // 10000) # 年: 2018
print("月:%.2d" % (time_date // 100 % 100)) # 月:12
print("日:%.2d" % (time_date % 100)) # 日:16
# 使用 / // %,将a的值反转输出
a = 789
c = a // 100 + a // 10 % 10 * 10 + a % 10 * 100
print(c)
# 演示 __iadd__()方法 往列表里面插值
li = [1, 2, 3]
li.__iadd__([614, 616])
"""
Implement self+=value
英文implement的意思是:使生效(使动结构)
这里就会对原列表进行改变,直接生成想要的add结果
同理shell中:li+=[614, 616] 的用法
"""
print("__iadd__()就是直接生效了:", li)
"""
而 __add__()方法 是直接返回了list
不会对原列表进行修改,所以需要赋值给一个新list变量
"""
# 判断字符串是否为回文
s = input("请输入一个字符串:")
g = lambda s: s.__eq__(s[::-1]) # equal的缩写:eq
print(g(s))