学习Python,一是由于暑假学的c++头疼,据说Python简单,那我就试试吧,二是由于Python形势一片大好,算是附和潮流吧!python
1、初识Pythonc++
一、第一个Python代码git
1 print("Hello World")
依然是熟悉的Hello World, 对于只学过c和c++的我来讲,着实有点奇怪,怎么main()没了(实际上是有的),头文件也没了,甚至连一句语句的末尾标识逗号也不见踪迹。api
二、概览app
用下面一段猜大小的代码码来解释一下python与c(c++)的区别dom
c:学习
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 5 int main(void) 6 { 7 int try_num, true_num, x, count; 8 9 while(1) 10 { 11 printf("请选择: 1.猜大小 2.退出: "); 12 scanf("%d", &x); 13 if(x == 2) 14 break; 15 srand(time(0)); 15 true_num = rand() % 100 + 1; 16 printf("请输入你猜的数字(1-100): "); 17 scanf("%d", &try_num); 18 count = 1; 19 while(try_num != true_num) 20 { 21 if(try_num >= 1 && try_num <= 100) 22 { 23 if(try_num > true_num) 24 printf("你猜大了!\n"); 25 else 26 printf("你猜小了!\n"); 27 } 28 else 29 printf("你输入的数字有误!\n"); 30 printf("请再次输入你猜的数字: "); 31 scanf("%d", &try_num); 32 count++; 33 } 34 printf("你终于猜对了, 共用了%d次.\n", count); 35 } 36 37 return 0; 38 }
Python:spa
1 import random 2 3 4 while True: 5 x = int(input("请选择: 1.猜大小 2.退出: ")) 6 if x == 2: 7 break 8 true_num = random.randint(1, 100) 9 try_num = int(input("请输入你猜的数字(1-100): ")) 10 count = 1 11 while try_num != true_num: 13 if try_num in range(1, 101): 14 if try_num > true_num: 15 print("你猜大了!") 16 else: 17 print("你猜小了!") 18 else: 19 print("你输入的数字有误!") 20 try_num = int(input("请再次输入你猜的数字: ")) 21 count += 1 22 print("你终于猜对了, 共用了%d次" % count)
能清楚的看出,用Python写出的代码较c简洁美观,没有冗余,在语法上的几点区别总结以下:c++11
二者也具备高级语言的相似特色:orm
2、基本数据类型
与c不一样,Python的面向对象特征更加明显,连int,float等也有本身的方法;
与c++相比,Python的list,tuple,dict 等相较与STL的容器更容易使用,内置的方法也较丰富
一、int, float, complex
int, float,complex方法
对于complex a, 能够经过a.real和a.imag使用其实部和虚部
二、bool: True, False
例如, 能够
1 a = True 2 while a: 3 # ... 4 if ...: 5 a = False
三、str: 经过'', "" 或 str()构建
str方法
a.对str中的方法的总结:
b.几个方法详解:
1 # 经过位置 2 string1 = "{0} is the most {1} teacher of life" 3 str1 = string1.format("Suffering", "powerful") 4 # str1 = "Suffering is the most powerful teacher of life" 5 string2 = "{0}, {1}, {0}" 6 str2 = string2.format("Edward", "Tang"} 7 # str2 = "Edward, Tang, Edward" 8 9 # 经过关键词 10 string = "{name} is {age}" 11 str = string.format(name="Edward", age=19) 12 # str = "Edward is 19" 13 14 # 填充和对齐 15 # ^、<、>分别是居中、左对齐、右对齐,后面带宽度 16 # :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充 17 string1 = "{: >6}" 18 str1 = string1.format("Ed") 19 # str1 = " Ed" 20 string2 = "{:*<6}" 21 str2 = string2.format("Ed") 22 # str2 = "Ed****" 23 24 # 控制精度 25 string = “{:.2f}” 26 str1 = string.format(3.1415926) 27 # str1 = "3.14" 28 29 # 金额分隔符 30 string = "{:,}" 31 str = string.format(1234567) 32 # str = "1,234,567"
1 # s.maketrans('s1', 's2') s1 和 s2 的长度必须一致,生成一个转换表 2 # s.translate(table) 对字符串s按照table里的字符映射关系替换 3 s = "I was a handsome boy" 4 table = s.maketrans("abcde", "12345") 5 str = s.translate(table) 6 # str = "I w1s 1 h1n4som5 2oy"
1 # join用于用指定str链接参数的str序列 2 lst = ['a', 'b', 'c', 'd'] 3 s = '-'.join(lst) 4 # s = "a-b-c-d" 5 6 def accum(s): 7 return '-'.join(c.upper() + c.lower() * i for i, c in enumerate(s)) 8 # s = "abcd",返回 “A-Bb-Ccc-Dddd” 9 10 # split用于用指定参数拆分str 11 s = "a-b-c-d" 12 lst = s.split('-') 13 # lst = ['a', 'b', 'c', 'd']
c.索引和切片:
Python中的索引和C相似,可是能够从右边开始:
1 word = "python" 2 # word[0] = 'p' 3 # word[5] = 'n' 4 # word[-1] = 'n', 表示最后一个, -0和0同样
除了索引, 还支持切片:
1 word = "python" 2 # word[0: 2] = 'py' 3 # word[2: 5] = 'tho' 4 # word[: 2] = 'py', 等同于[0: 2] 5 # word[3:] = 'hon', 等同于[3: len(word)] 6 # word[::-1] = "nohtyp",反转字符串
切片和c++中的迭代器相似,都是为单闭合区间;
切记str是const的, 不能够经过赋值等改变它们
四、list:经过[]或list()构建
1 def append(self, p_object): 2 pass 3 # 添加元素p_object到list末尾,p_object能够是任何类型 4 5 def clear(self): 6 pass 7 # 清空list中的元素 8 9 def copy(self): 10 pass 11 # 返回一个list的浅拷贝 12 13 def count(self, value): 14 pass 15 # 返回list中的value的个数 16 17 def extend(self, iterable) 18 pass 19 # 添加整个iterable到list末尾,扩展list 20 21 def index(self, value, start=None, stop=None): 22 pass 23 # 返回子序列[start, stop)中value第一次出现的下标,未找到报错 24 25 def insert(self, index, p_object): 26 pass 27 # 插入一个p_object到下标为index的元素以前 28 29 def pop(self, index=None): 30 pass 31 # 弹出index位置的元素并返回此元素, list为空或index超出范围会报错 32 33 def remove(self, value): 34 pass 35 # 清除list中第一个值为value的元素,不返回此值 36 37 def reverse(self): 38 pass 39 # 反转整个list 40 41 def sort(self, key=None, reverse=False): 42 pass 43 # 排序list,key能够为lambda或cmp,reverse为True须要反转
a.对list中方法的总结:
b.几个方法详解:
1 lst = [1, 5, 4, 3, 8] 2 lst.append(3) 3 # lst = [1, 5, 4, 3, 8, 3] 4 lst.append([1, 2, 3]) 5 # lst = [1, 5, 4, 3, 8, 3, [1, 2, 3]],始终把参数当作一个元素 6 lst.extend([1, 2, 3]) 7 #[1, 5, 4, 3, 8, 3, [1, 2, 3], 1, 2, 3],合并为一个list
c.索引和切片:
与str基本一致,可是因为list可变,还存在一个del语言:
1 lst = [3, 4, 5, 6, 7] 2 del lst[0] 3 # lst = [4, 5, 6, 7] 4 del lst[1:3] 5 # lst = [4, 7] 6 del lst[:] 7 # lst = []
5.tuple:经过()或tuple()构建(括号能够省略), 只包含一个元素时,在元素后面添加逗号
def count(self, value): pass # 返回tuple中value的个数 def index(self, value, start=None, stop=None): pass # 返回子序列[start, stop)中第一个值为value的下标
tuple和list的区别在于其不能改变,全部不少方法没有
tuple也有索引和切片,再也不赘述
要想对tuple进行强制修改,能够经过list()构造
6.dict:经过{}或dict()构建
1 def clear(self): 2 pass 3 # 清空dict中的元素 4 5 def copy(self): 6 pass 7 # 返回dict的一个拷贝 8 9 def fromkeys(*args, **kwargs): 10 pass 11 # 返回一个dict,全部的key都对应同一个value(默认为None) 12 13 def get(self, k, d=None): 14 pass 15 # 返回key为k时对应的value,若是不存在,返回d 16 17 def setdefault(self, k, d=None): 18 pass 19 # 返回key为k时对应的value,若是不存在,添加一个k: d 20 21 def items(self): 22 pass 23 # 返回dict中全部key, value构成的dict_items() 24 25 def keys(self): 26 pass 27 # 返回dict中全部key构成的dict_keys() 28 29 def values(self): 30 pass 31 # 返回dict中全部value构成的dict_values() 32 33 def pop(self, k, d=None): 34 pass 35 # 弹出dict中k所对应的value,没找到返回d 36 37 def popitem(self): 38 pass 39 # 随机弹出dict中一个(key, value),dict为空时出错 40 41 def update(self, E=None, **F): 42 pass 43 # 用另外一个dict F 来更新原dict, 返回None
a.对dict中方法的总结:
b.几个方法详解:
1 dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} 2 # key为str的构建时也能够写成 dic = dict(k1 = 'v1', k2 = 'v2', k3 = 'v3) 3 k = dic.pop('k1') 4 # k = 'v1'且 dic = {'k2': 'v2', 'k3': 'v3'} 5 item = dic.popitems() 6 # item = (‘k2’, 'v2')或('k3', v3') 由于dic是无序的,且dic会随之变化
1 dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} 2 s1 = get('k1') # s1 = dic['k1'] 3 s2 = get('k4', 'v4') # s2 = 'v4' 4 s1 = setdefault('k1') # s1 = dic['k1'] 5 s2 = setdefault('k4', 'v4') # dic['k4'] = 'v4'
1 dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} 2 for k in dic.keys(): 3 print(k) 4 for v in dic.values(): 5 print(v) 6 for k, v in dic.items(): 7 print(k, v) 8 # 分别输出了dic中全部的key, value和键值对
1 # fromkeys第一个参数能够是任意类型的序列, 2 # 第二个参数为空默认value都为None 3 dic = dict.fromkeys(('k1', 'k2', 'k3')) 4 # dic = {'k2': None, 'k1': None, 'k3': None} 5 dic = dict.fromkeys(('k1', 'k2', 'k3'), 520) 6 # dic = {'k2': 520, 'k3': 520, 'k1': 520} 7 8 # update将dic1更新, 返回None 9 dic1 = {'k1': 13, 'k2': 14, 'k3': 520} 10 dic2 = {'k4': 'Edward', 'k3': '250'} 11 dic = dic1.update(dic2) 12 # dic = None 13 # dic2 = {'k1': 13, 'k2': 14, 'k3': 250, 'k4': 'Edward'}
7.set:经过set()构建
1 def add(self, *args, **kwargs): 2 pass 3 # 向set中添加一个元素,返回None 4 5 def clear(self, *args, **kwargs): 6 pass 7 # 清空set中的元素 8 9 def copy(self, *args, **kwargs): 10 pass 11 # 返回一个set的浅拷贝 12 13 def difference(self, *args, **kwargs): 14 pass 15 # 返回一个set,其中不含参数集合中的元素,差集 16 17 def difference_update(self, *args, **kwargs): 18 pass 19 # 和difference()相比,set自身更新为差集,返回None 20 21 def symmetric_difference(self, *args, **kwargs): 22 pass 23 # 返回集合之间的对称差集 24 25 def symmetric_difference_update(self, *args, **kwargs): 26 pass 27 # 和symmetric_difference()相比,set自身更新为对称差集,返回None 28 29 def intersection(self, *args, **kwargs): 30 pass 31 # 返回set和参数集合的交集 32 33 def intersection_update(self, *args, **kwargs): 34 pass 35 # 和intersection()相比,set自身更新为交集,返回None 36 37 def union(self, *args, **kwargs): 38 pass 39 # 返回set和参数集合的并集 40 41 def update(self, *args, **kwargs): 42 pass 43 # 和union()相比,set自身更新为并集,返回None 44 45 def discard(self, *args, **kwargs): 46 pass 47 # 清除set中的参数元素,返回None, 若没有不作任何事, 48 49 def isdisjoint(self, *args, **kwargs): 50 pass 51 # 返回集合之间是否交集为空 52 53 def issubset(self, *args, **kwargs): 54 pass 55 # 返回是否set为参数集合的子集 56 57 def issuperset(self, *args, **kwargs): 58 pass 59 # 返回是否set为参数集合的父集 60 61 def pop(self, *args, **kwargs): 62 pass 63 # 弹出set中一个随机的值并返回,set为空会出错 64 65 def remove(self, *args, **kwargs): 66 pass 67 # 清除set中的参数元素,返回None,没有会出错
a.对set中方法的总结:
b.集合的运算符:
a, b, c均为集合 差集:c = a - b 等同于 c = a.difference(b) a -= b 等同于 a.difference_update(b) 对称差集:c = a ^ b 等同于 c = a.symmetric_difference(b) a ^= b 等同于 a.symmetric_difference_update(b) 交集:c = a & b 等同于 c = a.intersection(b) a &= b 等同于 a.intersection_update(b) 并集:c = a | b 等同于 c = a.union(b) a |= b 等同于 a.update(b) 判断子集: a <= b 等同于 a.issubset(b) 判断父集: a >= b 等同于 a.issupperset(b)