前言
最近准备做python相关的项目,其中的术语可能会和JAVA代码对比。
变量、运算符、数据类型与包的导入
1. 注释
# 单行注释
'''
多行注释
单引号和双引号皆可
'''
print("hello")
2. 运算符
算数运算符
# 常规的加减乘除
print(1 + 1) # 2
print(2 - 1) # 1
print(3 * 4) # 12
print(3 / 4) # 0.75
print(3 % 4) # 3
# 不相同的内容
print(3 // 4) # 0 -地板除
print(2 ** 3) # 8 -幂运算
比较运算符
和其他语言无不同之处
逻辑运算符
| 操作符 | 名称 | 示例 | 结果 |
|---|---|---|---|
| and | 与 | print((3 > 2) and (3 < 5)) | False |
| or | 或 | (1 > 3) or (9 < 2) | True |
| not | 非 | not (2 > 1) | False |
位运算符
| 操作符 | 名称 | 示例 | |
|---|---|---|---|
~ |
按位取反 | ~4 |
|
& |
按位与 | 4 & 5 |
|
| ` | ` | 按位或 | |
^ |
按位异或 | 4 ^ 5 |
|
<< |
左移 | 4 << 2 |
|
>> |
右移 | 4 >> 2 |
三元运算符
x, y = 3,5
print(x if x < y else y)
# java
# int x = 3;
# int y = 5;
# int temp = x < y ? x : y;
其他运算符
| 操作符 | 名称 | 示例 |
|---|---|---|
in |
存在 | 'A' in ['A', 'B', 'C'] |
not in |
不存在 | 'h' not in ['A', 'B', 'C'] |
is |
是 | "hello" is "hello" |
is not |
不是 | "hello" is not "hello" |
in 和 not in 在列表、元组、字典中将会很常用,记牢哦
注意点:
- ==, != 对比的是两个变量的值
- is, is not 对比的是两个变量的内存地址
简单来说,当类型为列表、元组、字典时,这两个数据是不相同的
3. 变量和赋值
my_teacher = "老马的程序人生"
your_teacher = "小马的程序人生"
our_teacher = my_teacher + ',' + your_teacher
# 只有变量,不用定义哦
set_1 = {"欢迎", "学习","Python"}
print(set_1.pop()) # Python
4. 数据类型和转换
a = 1031
print(a, type(a))
# type直接查看变量a的类型
b = dir(int)
print(b)
# dir获取对象的属性和方法,类比Java:
# sout(Student.getClass())
布尔型
print(True + True) # 2
print(True + False) # 1
# 偶,没错,在python中boolean型可作加减法
# True视为1,False视为0
# 对应的,空视为False,非空视为True
x = [1,2,3]
m = bool(x) # True
两种获取类型信息的方式
print(isinstance(1, int)) # True
print(type(1)) # int
类型转换
与其他语言无区别
5. 两种方式导入包
导入包有两种方式:
# 只导入了decimal
import decimal
from decimal import Decimal
在代码中比较一下两种方式的区别
可以发现在第四行,第一种方式有前缀,第二种方式没有前缀。
但是第二种方式在获取方法时报错,需要添加上第一种方式,才能找到对应的方法
建议:使用第一种方式,代码会更清晰
【案例】:使1/3保留4位小数
import decimal
decimal.getcontext().prec = 4
c = decimal.Decimal(1)/decimal.Decimal(3)
print(c)
6. print()函数
# 官方定义
def print(self, *args, sep=' ', end='\n', file=None):
# 参数、多参间隔符、结束符、文件
条件语句
import random
guess_num = int(random.random() * 10) # 生成一个0-10的随机数
my_num = input("请输入一个0-10的数字")
num = int(my_num) # 注意点
assert 0 < num < 10 # 断言
if num > guess_num:
print('太大了!')
else:
print('太小了!')
注意:
- input返回的是一个字符串类型的数据,所以需要转为int类型
print(type(my_num))
# 请输入一个0-9的数字7
# <class 'str'>
循环语句
1. while循环
while 布尔表达式:
代码块
# while循环会一直执行代码块,直到布尔表达式为假
# 注意是布尔表达式,而不是True or False
# 布尔表达式,可以是数值,元组,列表等等.
# 当长度或者数值为0,视为假值,即为False,其他情况为True
# 布尔表达式还可和逻辑、比较运算符组合
改造前面的条件语句的案例
import random
guess_num = int(random.random() * 10) # 生成一个0-10的随机数
num = int(input("请输入一个0-10的数字")) # 将input和int组合在一起了
while num != guess_num:
my_str = print("猜大了!") if num > guess_num else print("猜小了!") #三元表达式可以这么用哦!
num = int(input("请重新输入一个0-10的数字"))
else: # 注意点
print("猜对了!答案是%d" % num)
注意:
当使用break跳出循环,else的代码块不会执行哦!
【构建9*9乘法表】
x = 1
while x < 10:
temp = 1
while temp <= x:
print("%d * %d = %d" % (temp, x, temp * x), end=' ')
temp += 1
print()
x = x + 1
2. for循环
可以遍历任何有序序列和可迭代对象,如str、list、tuple、dict
my_str = 'hello'
for index in my_str:
print(index, end = ' ')
for index in range(len(my_str)): # len()长度 range(5) = range(0,5)
if index == 10: # 当等于10的时候,不会执行后面的else语句,和while循环相同
break
print(my_str[index])
else:
print("都输出完了!")
my_dic = {'a':1, 'b':2, 'c':3}
for k,v in my_dic.items() # 这里是dict.items(),别忘了!
pass
注意点:
- range(5)是可迭代的哦,这是一个有序整数序列
- for可以紧跟多个元素哦
【例题】迭代10到20之间的数字(不包括20),如果是质数,进行打印,不是质数,打印它的因子
# 质数的定义:
# 一个大于1的自然数,如果除了1和它本身以外不再有其他因数,那么这个数就是质数
# 解题思路:
# 从2开始叠代到index-1的因子,如果有一个因子是它的整倍数,那么就不是质子;反之,是质子
#
for index in range(10, 20):
num = 2
while num < index:
if index % num == 0:
print('%d * %d = %d' % (num, index / num, index))
break # 这里需要跳出,假设index为10,即会打印2*5=10,也会打印5*2=10
num += 1
else:
print('%d 是一个质数' % index)
3. range函数
range()函数用于创建一个表示整数序列的可迭代对象,具体生成规则取决于传入的start、stop和可选的step参数。
range(start, stop[, step=1])
4. enumerate函数
参数是一个可迭代对象,起始下标默认为0,返回枚举对象
def __init__(self, iterable, start=0):
这就和Java完成不同了,毕竟在Java中列表可不能存储元组,只能存储对象或者Map来实现类似功能,python在这里更加轻量化一些
today_list = ['one_day', 'two_day', 'three_day']
enum_value = enumerate(today_list, start=1) # 根据结果可以发现,这是一个有序序列对象,那就可以迭代!
my_list = list(enum_value)
print(my_list)
# [(1, 'one_day'), (2, 'two_day'), (3, 'three_day')]
for i, value in enum_value:
print(i, value)
5. pass
pass 语句的意思是“不做任何事”
6. 推导式
列表推导式
[ expr for value in collection [if condition] ]
【举例01】求1-10所有数的幂组成的列表
要求: 列表中的每一个元素为元组,元组中第一个参数为元素本身,第二个参数为元素的幂
x = [(x,x ** 2) for x in range(1,11)]
print(x)
【举例02】求1-10所有数的幂组成的列表
元组推导式
( expr for value in collection [if condition] )
temp = (x for x in range(10))
# 偶,我以为这就是一个元组了,实际上不是,这是一个元组推导式,即一个generate,是一个可迭代对象,所以可以使用for..in..
print(temp)
print(tuple(temp)) # 这才是一个元组
# 所以列表推导式返回的是一个列表,元组推导式是返回的一个迭代器
字典推导式
{ key_expr: value_expr for value in collection [if condition] }
temp = {x: x % 2 == 0 for x in range(10)}
print(temp)
# 偶,返回的是一个字典欸,不是迭代器,所以三大可变对象中只有元组推导式是个例外哦
异常处理
异常处理,教程这一块列举的特别多,但不适用。
我们应该在实际开发中遇到了,去记一个,当你大致遇到个七七八八,这个体系再看也不迟。
1. try - except
和Java的try-catch有一些不同,但区别不大
try:
f = open('text.txt')
print(f.read())
except OSError as error:
print('打开文件失败\n原因是:' + str(error))
else:
print('打开成功!')
finally:
print("肯定会执行!")
2. raise
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
try:
my_abs('gd')
except TypeError:
print('类型不正确!')