不适合人类阅读的学习笔记
Python语句不需要分号分割,但是Python各语句严格按照缩进对其方式运行
与C++一样,可以将一些非空,非零的值作为bool值的真,其余的为假
Python中以
#
作为注释的开始,多行注释可以用三引号对。
环境
Python推荐使用jetbrain公司的pycharm
Python可以直接使用自带的IDE逐句执行,方便测试
基础
Python中不需要声明变量类型,编译器会根据赋值自动判别,但是作为程序的编写者,我们需要清楚某个变量究竟是什么类型的
Python中单独的下划线是特殊的变量,表示上一次运算的结果。
输出
标准输出格式:
print([输出1,输出2,....,输出n][,sep = 分隔符][,end = 结束符])
默认以空格分割,换行符结尾
各个输出之间以逗号间隔
print()
函数不写参数即默认输出一个空行。在一批数据输出结束后,好的编程习惯是在末尾加上一个print()
,使得输出美观。Python的输出可以有运算在里面,例如:
print(5 * '*')
则会打印出*****
在输出字符串时,可以在字符串的引号前加一个
r
使得转义字符\
失效。
输入
相比较于java,Python的输入可以说是非常灵活而且简便了
1
a = input() #若调用此函数,就算输入的是数字,a的数据类型仍然为str,Python默认将命令行读入的数据作为str类型,因为str是万能的~
但是,对于如下的情况:
1
2a =eval(input()) #eval() 函数用来执行一个字符串表达式,并返回表达式的值.例如 eval('2 * 3')返回 6
#此时只能输入数字,且a是整型还是浮点型由输入数据的特征决定如果想要同时为多个变量赋值,则只能使用
eval()
函数了1
x,y = eval(input()) #输入时以逗号间隔
对于eval()函数的使用,一定要确保参数去掉引号之后的值是有意义的
一些数据类型
综述一些注意点
序列的概念:序列是一个排序的项目 容器,按 非负整数索引。Python提供的内置序列包包括字符串,元组和列表。(序列就是可以通过索引或者切片访问的容器)
所有的序列都是可以迭代的,即可以作为循环的迭代器。
内置函数
len()
可以将任意一个容器作为参数,并返回该容器中元素的数量内置函数
min()
和max()
以一个可以比较的非空容器作为参数,返回其最小最大值。(如果给的参数不止一个,则返回最大或最小的 参数)对于字典使用
min()
和max()
则会返回字典最大或最小的 键。关键字
in
可以检查某个元素是否在一个容器中。例如k in D
(D是一个字典)则检查k是不是D当中的一个关键字。reversed(seq)
函数: seq代表一个可迭代对象,比如列表1
2
3
4
5>>> a = [1,2,3,4,5]
>>> b = reversed(a) #此时b为一个迭代器
>>> b1 = list(b) #将这个迭代器转化为列表
>>> b1
>>> [5,4,3,2,1]sum()
函数:1
2sum(seq, start = m) #sum()有两个参数,第二个为可选参数
# 返回可迭代对象中的所有项目的和再加上start的值
一些基础数据类型的注意点
输入一个数,获取其各个位的数值的方法:注意Python的整除符号与别的编程语言不同
1
2
3
4假设 x = 123
个位 = x % 10
十位 = x // 10 % 10 (注意,Python与其他编程语言的整除符号不同,比如C++就是 '/' 即表示整除,而Python为 '//')
百位 = x //100 % 10复数:
1
2
3
4
5a = complex(2,3)
b = 1 + 2j
c = 3 - 5j
#a,b,c都是复数
#要获取复数的实部和虚部,可使用例如:a.real(a的实部), a.imag(a的虚部),结果都是浮点型45e15
表示45*10^15,这是科学计数法的写法要判断两个浮点数是否相等,如果不确定精度的情况下,最好不要使用
==
来判断。因为可能存在看起来一样的数实际上因为精度不同而被判定为不等。解决的方法是abs(x - y) < 1.0e-15
,即是用两数之差的绝对值小于一个很小的数,即可判断两数近似相等。关于Python中的bool类型,与C++类似,非零数或非空容器为真,0,None和空容器为假
List
Python中list里的元素允许是不同的数据类型,这一点完全打破了C和C++体系的传统,所以平常编写程序不推荐这样做。list中也允许某个元素是list或者元组什么的。
例:
classmates = ["Mike","Davaid"]
len()
函数可以获得list中的元素个数与其他编程语言不同的是,Python的list下标允许负数的index,例如:
classmates[-1]
就表示这个list的最后一个元素,以此类推。append()
方法:在list末尾末尾添加元素:classmates.append("Alex")
把元素插入到指定的位置,比如索引号为1的位置:
classmates.insert(1, 'Jack')
这样Jack的位置索引即为1,原来索引为1的元素及后面的元素依次后移。删除list末尾的元素,使用
.pop()
方法,要删除指定位置的元素,使用.pop(i)
的方法,i为元素的索引。
tuple
元组与;list非常类似,但是tuple一经初始化其内容便不允许修改,不允许插入和删除等操作。
元组一般用来保存那些不允许修改的数据以保障安全。
但是如果tuple中某个元素是list时,这个list中的元素还是可以修改的。
disk
disk(字典)是一种键-值对类型的数据结构,在其他语言中会被称为map。dict的key必须为不可变的量
注意,Python中的dick类型是以hash方式存储的,读取速度非常快。
将数据添加进dick的方式,除了初始化时设定之外,还可以直接给一个键赋值的方式添加,例如:
1
2d = {'A': 95, 'B': 75, 'C': 85} #初始化添加元素
d['E'] = 100 #直接赋值添加元素判断一个key是否存在的方法:
"Thomas" in d
#若不存在会返回falsed.get("Thomas")
#若不存在返回nulld.get("Thomas",-1)
#自己指定返回的值
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
通过
.add(key)
的方法添加元素。通过
.remove(key)
的方法删除元素。符号
&
和|
分别表示集合的交和并list的简单的去重:
1
2
3
4
5
6
7>>> a = [1,2,2,3,4,5,5,6,1]
>>> b= set(a)
>>> b
>>>{1,2,3,4,5,6}
>>>a =list(b)
>>>a
>>>[1,2,3,4,5,6]
条件判断
Python的if判断语句的判断条件部分不需要用括号括起来,这与其他的大多数语言均不同
格式:
1
2
3
4
5
6
7
8if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>例:
1
2
3
4
5
6
7age = 20
if age >= 6 and age <= 30: #多条件判断用 and 链接
print('teenager')
elif not (age >= 18): #not相当于 非,后面的内容用括号括起来
print('adult')
else:
print('kid')与input结合(涉及数据类型转换):
1
2
3
4
5
6
7s = input('birth: ')
birth = int(s) #如果没有这句转换会报错,因为input进来的是str,不能直接和int比较,因此要先转换为int再比较。
#但是如果此处的输入不是一个数值类型,int函数无法强制转化便会报错。
if birth < 2000:
print('00前')
else:
print('00后')利用运算符优先级: z = x if x > y else y
循环
例(求和):
1
2
3for x in [1,2,3,4,5,6]:
sum = sum + x
print(sum)range()
函数: 生成从0 - 输入数值-1 的一个迭代器,可用作循环条件。例list(range(5))
的结果为[0,1,2,3,4]
例求 1- 100 的和:
1
2
3
4sum = 0
for x in range(101):
sum = sum + x
print(sum)while循环示例:(素数的判断)
1
2
3
4
5
6
7
8
9
10
11
12import math
m = int(input("Please enter a num: ")) #待判断的数 m
i,j = 2, int(math.sqrt(m)) #只需要计算 2 到 根号m 范围内是否有m的因数即可,后面的计算均为重复计算
flag = 1 #素数标志
while i < j and flag == 1:
if m % 1 == 0
flag = 0 #不是素数的标志
i += 1
if flag and m > 1: #素数必须大于1
print(m, "是素数")
else:
print(m, "不是素数")while和for语句使用拖尾的else子句:
1
2
3
4for ... :
...
...
else ... #注意这个else是与for对齐的这种写法的else子句块会在循环 正常终止时执行。意思就是,如果循环中的break语句生效而导致的循环终止,是不会触发这个else子句的执行的。因此这种写法可以 优雅地判断一个循环是正常结束还是break掉了。
在循环中使用print()输出时,注意Print之后是否正确地结束循环或者进入下一个输出,否则可能出现重复输出大量重复数据的可能。
求两个数的最大公约数(辗转相除法):
1
2
3
4
5
6
7
8a,b = eval(input("请输入两个整数: "))
if a > b : a,b = b,a #Python中可以简便地交换两个变量的值
r = a % b
while r != 0
a,b = b,r
r = a % b
print("最大公约数是:",b)
print()输出[100,1000]以内的所有素数
1
2
3
4
5
6
7
8
9
10
11
12
13
14import math
n = 0
for m in range(101,1000,2) #直接去掉100和1000,这两个肯定不是素数
i,j = 2, int(math.sqrt(m))
while i <= j:
if not(m % j): #如果 m % j == 0 就是找到因数了,直接退出这一次循环,进入下一个循环
break
else:
i = i + 1
else:
print(m, end = " ")
n += 1
if n % 10 == 0: print("\n") #每输出10个数就换行
print()
函数
函数定义的格式
1 | def 函数名([参数1,参数2,参数3...]): #参数没有参数类型,如果要设置参数的默认值则要满足从右向左的原则 |
- Python中可以让函数返回一个有多个元素的tuple来实现返回多个值的要求。
一些注意点
abs()
函数的返回值与参数一致,而fabs()
的返回值均为浮点型Python支持连续的不等式,例如
a > b > c
等价于a > b && b > c
最后更新于2018.4.28