注释
单行注释使用符号(#)
#print(hello world)
多行注释可以使用符号(''')
'''
print(hello world)
'''
代码换行
如果代码是在过长,需要换行
a = 3+\
5
基本数据类型
counter = 1 # 整型变量
miles = 1.0 # 浮点型变量
name = "hello world" # 字符串
answer = True #布尔型 注意True 和False 必须开头大写 写true是不行的
变量
Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
可以使用type()查询变量类型
a = 3
print(type(a))
输出:<class 'int'>
可以多元赋值
x,y = 1,2
id与==
id可以理解成C语言中的内存地址
==是值比较
a = 3
b = 3
print(id(a)) #21132060
print(id(b)) #21132060
print(a==b) #True
######################################
a = 2.5
b = 2.5
print(id(a)) #19622112
print(id(b)) #24311676
print(a==b) #True
从上面例子可以看出,首先==是值比较,但是id,在一些比较短小的数据时,python编译器会做优化,指向同一个地址,就造成第一个例子,a,b的内存地址一致,但是第二个例子就说明了id一致的情况一般就出现在int和str类型比较短的时候。
print()函数
1.print可以直接输出字符串、数值类型、变量(无论什么类型的变量)
print(1)
s = 'Hello'
print(s)
2.格式化输出
s = 'Hello'
x = len(s)
print("The length of %s is %d" % (s,x))
########################################
pi = 3.141592653
print('%10.3f' % pi) #字段宽10,精度3
3.142
print("pi = %.*f" % (3,pi)) #用*从后面的元组中读取字段宽度或精度
pi = 3.142
print('%010.3f' % pi) #用0填充空白
000003.142
print('%-10.3f' % pi) #左对齐
3.142
print('%+f' % pi) #显示正负号
+3.141593
################################
如何让 print 不换行
for x in range(0,10):
print (x,end = '')
0123456789
3.拼接字符串
"Hello""World"
'HelloWorld'
x = "Hello"
y = "world"
x+y
'Helloworld'
#####这样写会报错
xy
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
xy
NameError: name 'xy' is not defined
数字和运算
1.运算符描述示例运算结果
运算符 描述 示例 结果
+ 加法 5 + 8 13
- 减法 90 – 10 80
* 乘法 4 * 7 28
/ 浮点数除法 7 / 2 3.5
// 整数除法 7 // 2 3
% 模(求余) 7 % 3 1
** 幂 3 ** 4 81
^ 异或 1 ^ 2 3
2.进制类型
在Python 中,除十进制外你还可以使用其他三种进制的数字:
‒ 0b 或0B 代表二进制
‒ 0o 或0O 代表八进制
‒ 0x 或0X 代表十六进制
3.数学函数
函数太多,我们只举例常用的。
math.pi
math.e
abs() 与 fabs() 用于获得绝对值 fabs()精度更高(详情Stack Overflow)
#abs与fabs的适用类型及输出值类型
In [7]: type(abs(-2))
Out[7]: int
In [8]: type(abs(-2.0))
Out[8]: float
In [9]: type(abs(3+4j))
Out[9]: float
In [10]: type(math.fabs(-2))
Out[10]: float
In [11]: type(math.fabs(-2.0))
Out[11]: float
In [12]: type(math.fabs(3+4j))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/alexei/<ipython-input-12-8368761369da> in <module>()
----> 1 type(math.fabs(3+4j))
TypeError: can't convert complex to float
#######################################
#abs与fabs效率差别
In [1]: %timeit abs(5)
10000000 loops, best of 3: 86.5 ns per loop
In [2]: from math import fabs
In [3]: %timeit fabs(5)
10000000 loops, best of 3: 115 ns per loop
In [4]: %timeit abs(-5)
10000000 loops, best of 3: 88.3 ns per loop
In [5]: %timeit fabs(-5)
10000000 loops, best of 3: 114 ns per loop
In [6]: %timeit abs(5.0)
10000000 loops, best of 3: 92.5 ns per loop
In [7]: %timeit fabs(5.0)
10000000 loops, best of 3: 93.2 ns per loop
In [8]: %timeit abs(-5.0)
10000000 loops, best of 3: 91.8 ns per loop
In [9]: %timeit fabs(-5.0)
10000000 loops, best of 3: 91 ns per loop
向下取整的整数(floor())和向上取整的整数(ceil()):
floor 返回不大于的最大整数
found 则是4舍5入的计算,入的时候是到大于它的整数
ceil 则是不小于他的最小整数
math.floor | math.round | math.ceil | |
---|---|---|---|
1.4 | 1 | 1 | 2 |
1.5 | 1 | 2 | 2 |
1.6 | 1 | 2 | 2 |
-1.4 | -2 | -1 | -1 |
-1.5 | -2 | -1 | -1 |
-1.6 | -2 | -1 | -1 |
>>> math.floor(98.6)
98
>>> math.floor(-271.1)
-272
>>> math.ceil(98.6)
99
>>> math.ceil(-271.1)
-271
>>>math.round(1.4)
1
>>>math.round(-1.4)
-1
factorial() 计算阶乘(在数学中以n! 表示):
>>> math.factorial(1)
1
>>> math.factorial(3)
6
>>> math.factorial(5)
120
使用log() 计算自然对数(此处传入两个参数,第一个是对数,也就是log上方的数,第二个为底数,就是log下方的数,底数默认是e):
>>> math.log(1.0)
0.0
>>> math.log(math.e)
1.0
>>> math.log(1,2)
0.0
pow() 做的工作与上面正好相反,它用于计算一个数的指数(此函数可以用来开多次范根):
>>> math.pow(2, 3)
8.0
>>> math.pow(4,1.0/3)
指数运算符** 也可以进行同样的计算,但是结果略不同(同理可以用于开多次方根)
>>> 2**3
8
>>> 2.0**3
8.0
使用sqrt() 得到平方根:
>>> math.sqrt(100.0)
10.0
常见的三角函数:
sin()、cos()、tan()、asin()、acos()、atan()、atan2()
math 库还包含hypot()2 函数帮你计算给定两直角边对应的斜边长度:
>>> x = 3.0
>>> y = 4.0
>>> math.hypot(x, y)
5.0
角坐标转换:
>>> math.radians(180.0)
3.141592653589793
>>> math.degrees(math.pi)
180.0
>>> math.sin(math.radians(30))
0.49999999999999994
>>> math.cos(math.radians(60))
0.5000000000000001
复数运算
>>> 1j * 1j
(-1+0j)
>>> (7 + 1j) * 1j
(-1+7j)
for的生成式
i = [i+3 for i in list if i%2]
print(i)
字符串
1.创建 单引号双引号都可以
'Hello World!'
"Python Runoob"
2.使用\转义
转义符\t(tab 制表符)常用于对齐文本,之后会经常见到:
>>> print('\tabc')
abc
>>> print('a\tbc')
a bc
>>> print('ab\tc')
ab c
>>> print('abc\t’)
abc
还有 :\n,\’,\……
3.拼接、复制、提取
拼接:
>>> a = 'mo'
>>> b=a
>>> c='da'
>>> a+b+c
'momoda'
>>> print(a+b+c)
momoda
>>> print(a,b,c)
mo mo da
>>>
复制
>>> a='mo'*2 +'\n'
>>> b='da'*5 + '\n'
>>> print(a+b)
momo
dadadadada
提取
>>> letters =
'abcdefghijklmnopqr
stuvwxyz'
>>> letters[0]
'a'
>>> letters[1]
'b’
>>> letters[-1]
'z'
>>> letters[-2]
'y'
4.字符串分片
分片操作(slice)可以从一个字符串中抽取子字符串(字符串的一部分)
[:] 提取从开头到结尾的整个字符串
[start:] 从start 提取到结尾
[:end] 从开头提取到end - 1
[start:end] 从start 提取到end - 1
[start:end:step] 从start 提取到end - 1,每step 个字符提取一个
5.字符串常用操作
len(letters) : 获取字符串长度
letters.split(‘,’): 字符串分割
‘, ’.join(letters): 字符串合并
须注意:如果是join中直接写元素,会导致第一种输出结果。要想实现拼接,必须在join括号中,写('xxx','xxx') 这样才会有第二种输出效果。也就是说要在join的括号中套用tuple
a = 'abcdefg'
print((',').join(a))
>>>a,b,c,d,e,f,g
print(('@').join(('zhangsan','163.com')))
zhangsan@163.com
letters.strip(‘.‘): 删除字符串首尾字符
letters.capitalize(): 首字母大写
letters.upper()/lower(): 让所有字母变大写/小写
letters.swapcase(): 大小写转换
letters.replace('a ', 'a famous ', 100) 最后的数字是替换不超过 100次
str.startswith(prefix)
str.endswith(suffix) #是否以
str.isalnum() # 是否全是字母和数字,并至少有一个字符。
str.isalpha() # 是否全是字母,并至少有一个字符。
str.isdigit() # 是否全是数字,并至少有一个字符。
str.isspace() # 是否全是空白字符,并至少有一个字符。
str.islower() # 字母是否全是小写
str.isupper() # 字母是否全是大写
str.istitle() # 首字母是否大写
原始字符串
在字符串最外面加r,这里r的含义是raw,就是输出不含转义的最原始的字符串
print("a\rb\rc")
print(r"a\rb\rc")
>>>c
>>>a\rb\rc
#######################
open("E:\2017-8-23\笔记.docx","r+")
>>>ValueError: embedded null character
open(r"E:\2017-8-23\笔记.docx","r+")
>>>#不报错
print("%s是个好学生,年龄%d"%("张三", 36)) #张三是个好学生,年龄36
print("{},{}".format("张三", 36)) #张三,36
print("{1},{0}".format("张三", 36)) #36,张三
练习
本章介绍了Python 最基本的元素:数字、字符串以及变量。我们试着在交互式解释器里完成一些相关的练习。
# (1) 一个小时有多少秒?这里,请把交互式解释器当作计算器使用,将每分钟的秒数(60)
print('1',60 * 60)
# (2) 将上一个练习得到的结果(每小时的秒数)赋值给名seconds_per_hour 的变量。
seconds_per_hour = 60 * 60
print('2',seconds_per_hour)
# (3) 一天有多少秒?用你的seconds_per_hour 变量进行计算。
print('3',24 * seconds_per_hour)
# (4) 再次计算每天的秒数,但这一次将结果存储在名为seconds_per_day 的变量中。
seconds_per_day = 24 * seconds_per_hour
print('4',seconds_per_day )
# (5) 用seconds_per_day 除以seconds_per_hour,使用浮点除法(/)。
print('5',seconds_per_day / seconds_per_hour)
# (6) 用seconds_per_day 除以seconds_per_hour,使用整数除法(//)。
# 除了末尾的.0,本练习所得结果是否与前一个练习用浮点数除法得到的结果一致?
print('6',seconds_per_day // seconds_per_hour)
#############################################
1 3600
2 3600
3 86400
4 86400
5 24.0
6 24