阿里天池训练营学习笔记
学习链接~AI训练营-阿里云天池
Python学习笔记
写在开头:
写python程序也就是我们俗称的“py交易”(手动滑稽O(∩_∩)O),python作为一门开源的编程语言,在学习的时候自然而言的采取“编程的思维”,这个话太形而上学了(自己码龄尚浅,菜鸡一枚),但在我看来就是通过不断上机跑程序来验证自己学的知识,很多事情通常都是为了简单而去设置的,所以没有那么多的为什么,“能解决问题才是最关键的”,但是解决问题只是我们的初级目标,在这个过程中如何写最“高效”的程序——用最短的代码,花费最少的时间,最少的内存来解决问题,这是我们在这个过程中不断要思考的问题(这些话写的太严肃了,其实我本人就是一个铁憨憨,那么快乐的学习之旅就要开始了,有木有炒鸡激动~)
学习地址如下:
Python训练营
task1
- 变量、运算符与数据类型
- 位移码
- 条件语句
- 循环语句
- 异常处理
上述列举的内容和C语言中涉及到的相差不大,但如果python是你接触到的第一门编程语言的话,上手就需要花费一些精力了。
1. 常见运算符
整理一些常见的运算符
操作符 | 名称 | 示例 |
---|---|---|
/ | 除 | 3/4=0.75 |
// | 整除 | 3//4=0 |
% | 取余 | 3%4=3 |
** | 幂 | 2**3=8 |
~ | 按位取反 | ~4=-5 |
& | 按位与 | 4&5=4 |
^ | 按位异或 | 4^5=1 |
<< | 左移 | 4<<2 =16 |
>> | 右移 | 4>>2=1 |
in | 存在 | ‘A’ in [‘A’, ‘B’, ‘C’] |
not in | 不存在 | ‘h’ not in [‘A’, ‘B’, ‘C’] |
is | 是 | “hello” is “hello” |
not is | 不是 | “hello” is not “hello” |
** | 指数(最高优先级) | |
~± | 按位翻转,一元加号和减号 | |
* / % // | 乘,除,取模和取整除) | |
+ - | 加法减法 | |
>> << | 右移,左移运算符 | |
& | 位‘AND’ | |
^| | 位运算符 | |
<=<>>= | 比较运算符 | |
<>==!= | 等于运算符 | |
=%=/=//=-=+=*=**= | 赋值运算符 | |
is is not | 身份运算符 | |
in not in | 成员运算符 | |
not and or | 逻辑运算符 |
比如:
print(1 + 1) # 2
print(2 - 1) # 1
print(3 * 4) # 12
print(3 / 4) # 0.75
print(3 // 4) # 0
print(3 % 4) # 3
print(2 ** 3) # 8
print(-3 ** 2) # -9
print(3 ** -2) # 0.1111111111111111
print(1 << 3 + 2 & 7) # 0
print(-3 * 2 + 5 / -2 - 4) # -12.5
print(3 < 4 and 4 < 5) # True
一些注意点:
- is, is not 对比的是两个变量的内存地址
- ==, != 对比的是两个变量的值
- 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
- 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。
2. 数据类型与转换
类型 | 名称 | 示例 |
---|---|---|
int | 整型 <class 'int'> | -876, 10 |
float | 浮点型<class 'float'> | 3.149, 11.11 |
bool | 布尔型<class 'bool'> | True, False |
【例1】通过 print()
可看出 a
的值,以及类 (class) 是int
。
a = 1031
print(a, type(a))
# 1031 <class 'int'>
【例2】找到一个整数的二进制表示,再返回其长度
a = 1010
print(bin(a))
#0b1111110010
print(a.bit_length())
#10
注
- 有时候我们想保留浮点型的小数点后
n
位。可以用decimal
包里的Decimal
对象和getcontext()
方法来实现。
【例3】使 1/3 保留 4 位
import decimal
from decimal import Decimal
decimal.getcontext().prec = 4
c = Decimal(1) / Decimal(3)
print(c)
# 0.3333
——————2020/1/21 暂时更新到此处
----------------------续----------------------
1.获取类型信息
通常有两种方式:
type()
不考虑继承关系,不会认为子类是一种父类类型。isinstance()
会认为子类是一种父类类型,考虑继承关系。
当判断两个类型是否相同时,推荐使用 isinstance()
。
【例】
print(int('100')) # 100
print(int(100.12)) # 100
print(float('100.12')) # 100.12
print(float(100)) # 100.0
print(str(10 + 10)) # 40
print(str(15.1 + 5.5)) # 20.6
2.类型转换
- 转换为整型
int(x, base=10)
- 转换为字符串
str(object='')
- 转换为浮点型
float(x)
3.print()函数
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
【例】一个输出实例
alist = ['abc', 'def', 'ghi', 'jkl']
print("words as follows")
for item in alist:
print(item)
for item in alist:
print(item, 'another string', sep='&')
# words as follows
# abc
# def
# ghi
# jkl
# abc&another string
# def&another string
# ghi&another string
# jkl&another string
注: 上述例子中item
值与another string
两个值之间用sep
设置的参数&
分割。由于end
参数没有设置,因此默认是输出解释后换行,即end
参数的默认值为\n
。
4.条件语句
经典例题:
temp = input("猜一猜我想的是哪个数字?")
guess = int(temp) # input 函数将接收的任何数据类型都默认为 str。
if guess == 520:
print("你太了解我的心思了!")
print("哼,猜对也没有奖励!")
else:
print("猜错了,我现在心里想的是520!")
print("游戏结束,不玩儿啦!")
注:
Python
使用缩进而不是大括号来标记代码块边界,因此要特别注意else
的悬挂问题。- elif 语句即为 else if。
【例】
temp=input("Please input your scores")
score=int(temp)
if 100 >= score >=90:
print('A')
elif 89 >= score >=80:
print('B')
elif 79 >= score >= 60:
print('C')
elif 59 >= score >= 0:
print('D')
else:
print('输入错误!')
5.循环语句
1)while 布尔表达式:
代码块
2)while 布尔表达式:
代码块
else:
代码块
3)for 迭代变量 in 可迭代对象:
代码块
4)for 迭代变量 in 可迭代对象:
代码块
else:
代码块
【例】
for i in 'ILovePythpn':
print(i, end=' ') # 不换行输出
dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
for key, value in dic.items():
print(key, value, sep=':', end=' ')
# a:1 b:2 c:3 d:4
【例】表示10-99所有的素数,如果不是素数则表示其因子分解。
for num in range(10, 100):
for i in range(2,num):
if num%i==0:
print("%d = %d*%d" %(num,i,num/i))
break
else:
print(num, '是一个质数')
6.一些函数
1) range()函数
- range(2, 9)表示
2
到8
的整数。 - range(1, 10, 2)表示
1
到9
步长为2
的整数。 - range(10)表示
range(0,10)
2) enumerate()函数
enumerate(sequence, [start=0])
- sequence:一个序列、迭代器或其他支持迭代对象。
- start:下标起始位置。
- 返回 enumerate(枚举) 对象
names = ["张三", "李四", "王五", "刘六"]
names = list(enumerate(names))
print(names)
#[(0, '张三'), (1, '李四'), (2, '王五'), (3, '刘六')]
names = list(enumerate(names, start=1))
print(names)
#[(1, (0, '张三')), (2, (1, '李四')), (3, (2, '王五')), (4, (3, '刘六'))]
3)randint()函数
import random
secret = random.randint(a,b) #[a,b]之间的随机数
4)break与continue
5)推导式
【例】
x = [i ** 2 for i in range(1, 10)]
print(x)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]
x = [(i, i ** 2) for i in range(6)]
print(x)
# [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
x = [[i, j] for i in range(0, 3) for j in range(0, 3)]
print(x)
# [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
x[0][0] = 10
print(x)
# [[10, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
【元组表达式】
a = (x for x in range(10))
print(a)
# <generator object <genexpr> at 0x0000025BE511CC48>
print(tuple(a))
#表示元组:tuple
# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
从上面这一组代码中可以看成,如果要表示一个元组a
的数据,不能直接print(a)
,而应该用一个for
循环
for each in a:
print(each, end=' ')#表示不换行
如果是一个数组,则可以直接写为print(tuple(a))
7.文件打开
f = open('test.txt')
print(f.read())
f.close()
——————2020/1/22 暂时更新到此处