Python入门(上)

2024/04/24 Python

前言

最近准备做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

在代码中比较一下两种方式的区别

picture not found

可以发现在第四行,第一种方式有前缀,第二种方式没有前缀。

但是第二种方式在获取方法时报错,需要添加上第一种方式,才能找到对应的方法

建议:使用第一种方式,代码会更清晰

案例】:使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('类型不正确!')

Search

    Table of Contents