Python快速上手

这篇博客介绍了Python3的快速上手,包括环境搭建,编写第一个Python程序,学习字符串操作,理解运算符(算术和逻辑),以及掌握流程控制结构。此外,还详细讲解了四大数据容器——list、tuple、set和dict的使用。

环境搭建

首先,安装python环境:

  1. 官网下载对应系统和版本的包进行安装.
  2. 命令行执行python -v是否成功,否则添加环境变量
  3. 安装pip,pip是常用的python包管理器,类似yum,安装方法.

本文主要学习python3,部分语法和python有差异;

第一个python

#!/usr/bin/python3
# 输入参数:./main.py arg1 arg2
import sys
# 导入包,类似头文件
# from somemodule import firstfunc, secondfunc, thirdfunc
# from somemodule import *

print("Hello, Python!")
# 第一个注释
'''
多行注释演示
'''
# 键盘输入
inputnum = int(input("按下 enter 键后退出:"))
print(inputnum)

# 多行命令(同shell)
x = 'hello python'
sys.stdout.write(x + '\n')

print('参数个数为:', len(sys.argv), '个参数。')
print('参数列表:', str(sys.argv))
if len(sys.argv) > 1:
    print('手动列出命令行参数为:')
    for i in sys.argv:
        print(i)
    print('共计', len(sys.argv), "个")
    print('程序名为:', sys.argv[0])
    print('\n python 路径为', sys.path)

字符串

#!/usr/bin/python3
import math

def main():
    # 构造
    MyStr = 'Runoob'
    print(MyStr)  # 输出字符串
    # 切片
    print(MyStr[0:-1])  # 输出第一个到倒数第二个的所有字符
    print(MyStr[0])  # 输出字符串第一个字符
    print(MyStr[2:5])  # 输出从第三个开始到第五个的字符
    print(MyStr[5])
    print(MyStr[2:])  # 输出从第三个开始后的所有字符
    print(MyStr * 2)  # 输出字符串两次
    print(MyStr + '你好')  # 连接字符串
    print('------------------------------')
    print('hello\nrunoob')  # 使用反斜杠(\)+n转义特殊字符
    print(r'hello\nrunoob')  # 在字符串前面添加一个 r,表示原始字符串,不会发生转义
    # 不换行
    print(r"The same line output\n,", end="")
    print(r"next line output")
    # python中字符串不可改变

    # 三引号来表示多行文本,这里不加r的话转义依旧有效
    errHTML = '''
    <HTML><HEAD><TITLE>
    Friends CGI Demo</TITLE></HEAD>
    <BODY><H3>ERROR</H3>
    <B>%s</B><P>
    <FORM><INPUT TYPE=button VALUE=Back
    ONCLICK="window.history.back()"></FORM>
    </BODY></HTML>
    '''
    print(errHTML)

    # print格式化输出
    print("我叫 %s 今年 %d 岁!" % ('小明', 10))
    addr = 0x45ae
    print("point address is 0x%016x" % (addr))  # 按十六进制打印且不足补0

    # f-string python3.6开始支持
    name = 'Runoob'
    print(f'My name is {name}')  # 这里做了变量替换
    print(f'1+2 = {1 + 2}')  # 使用表达式
    print('站点列表 {0}, {1}, 和 {other}。'.format('Google', 'Runoob', other='Taobao'))
    print('my name: {}'.format(name))
    print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi))
    # show a table
    print("a: {0:10d}".format(1))
    print("b: {0:10d}".format(100))
    print("x: {0:10d}".format(1000000))

# 在Python3中,所有的字符串都是Unicode字符串,使用16位来保存一个字符


# 翻转字符串(基于词)
def reverseWords(input):
    print('test reverseWords')
    # 通过空格将字符串分隔符,把各个单词分隔为列表
    inputWords = input.split(" ")

    # 翻转字符串
    # 假设列表 list = [1,2,3,4],
    # list[0]=1, list[1]=2 ,而 -1 表示最后一个元素 list[-1]=4 ( 与 list[3]=4 一样)
    # inputWords[-1::-1] 有三个参数
    # 第一个参数 -1 表示最后一个元素
    # 第二个参数为空,表示移动到列表末尾
    # 第三个参数为步长,-1 表示逆向
    inputWords = inputWords[-1::-1]

    # 重新组合字符串
    output = ' '.join(inputWords)

    return output


def test_func():
    # 打印:===============test_func================
    str1 = 'test_func'
    print(str1.center(40, '='))

    # byte编解码测试
    print('byte编解码测试')
    str = "菜鸟教程"
    str_utf8 = str.encode("UTF-8")
    str_gbk = str.encode("GBK")
    print(str)

    print("UTF-8 编码:", str_utf8)
    print("GBK 编码:", str_gbk)

    print("UTF-8 解码:", str_utf8.decode('UTF-8', 'strict'))
    print("GBK 解码:", str_gbk.decode('GBK', 'strict'))
    # python3内存里都是unicode编码的,但比较消耗空间
    # 当实际传递和保存数据时,通常先编码成utf-8,然后写盘和传输
    # 接受和读取文件时,则需要从utf-8解码出来

    #  join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串
    print('test join()')
    s1 = "-"
    s2 = ""
    seq = ("r", "u", "n", "o", "o", "b")  # 字符串序列
    print(s1.join(seq))
    print(s2.join(seq))

    # lstrip() 截掉字符串左边的空格或指定字符
    str = "     this is string example....wow!!!     "
    print(str.lstrip())
    str = "88888888this is string example....wow!!!8888888"
    print(str.lstrip('8'))
    print(str.lstrip('is'))  # 只能是左边开始的

    # split() 通过指定分隔符对字符串进行切片,如果第二个参数 num 有指定值,则分割为 num+1 个子字符串
    cfg = "ceph/poolname/lunname"
    print(cfg.split('/'))  # 以空格为分隔符
    print(cfg.split('/', 1))  # 分割 1 + 1 个串
    print(cfg.split('name'))

# 类似main函数,条件判断:当前脚本为直接被执行的脚本时为True
if __name__ == "__main__":
    input = 'I like runoob'
    rw = reverseWords(input)
    print(rw)
    main()
    test_func()

python的变量无需声明直接使用,而字符串变量在py中是不可改变的,如果需要修改,可以将已有字符串变量改变后重新赋值:

MyStr = 'Runoob'
MyStr = MyStr[:3] # 截取MyStr的前3个字符:'Run'

python中print函数本身无法做到C/C++中printf的功能,但字符串本身支持类似的格式化输出:

print("我叫 %s 今年 %d 岁!" % ('小明', 10)) # 2.7 & 3.x支持
# f-string python3.6开始支持
name = 'Runoob'
print(f'My name is {name}')  # 这里做了变量替换
print(f'1+2 = {1 + 2}')  # 使用表达式
print('站点列表 {0}, {1}, 和 {other}。'.format('Google', 'Runoob', other='Taobao'))
print('my name: {}'.format(name))
#

运算(包含算术和逻辑)

#!/usr/bin/python3
import sys

# 算术运算
print(5 + 4)  # 加法
print(4.3 - 2) # 减法,在混合计算时,Python会把整型转换成为浮点数
print(3 * 7)  # 乘法
print(2 / 4)  # 除法,得到一个浮点数
print(2 // 4) # 除法,得到一个整数
print(17 % 3) # 取余
print(2 ** 5) # 乘方
# Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型

# 条件运算
if 10 > 8:
    print('10 > 8')
if 10 == 10:
    print('10 == 10')
if 10 != 8:
    print('10 != 8')

# 逻辑预算
# and or not
# and比or not有更高的优先级
a = 10
b = 20
if a or b:
    print("4 - 变量 a 和 b 都为 true,或其中一个变量为 true")
else:
    print("4 - 变量 a 和 b 都不为 true")
if not (a and b):
    print("5 - 变量 a 和 b 都为 false,或其中一个变量为 false")
else:
    print("5 - 变量 a 和 b 都为 true")

# 赋值运算
a = b = 2
b += a # 相当于b = b + a,因此b必须先定义
print(b)
# 还支持 -= *= /= %= **= //=
# 海象表达式:在表达式内部为变量赋值(需要3.8以上版本支持)
# a = '01234567891'
# 在这个示例中,赋值表达式可以避免调用 len() 两次:
# if (n := len(a)) > 10: # n被赋值后,还可以用n和10作比较,而正的赋值运算符不行
#     print(f"List is too long ({n} elements, expected <= 10)")

# 位运算,和c++类似
# 支持: & | ^ ~ << >>

# 成员运算:测试实例中包含了一系列的成员,包括字符串,列表或元组
a = 10
b = 20
list = [1, 2, 3, 4, 5];
if (a in list):
    print("1 - 变量 a 在给定的列表中 list 中")
else:
    print("1 - 变量 a 不在给定的列表中 list 中")
if (b not in list):
    print("2 - 变量 b 不在给定的列表中 list 中")
else:
    print("2 - 变量 b 在给定的列表中 list 中")

# 身份运算,对应C语言就算看内存实例是不是相同
a = 20
b = 20
if (a is b):
    print("1 - a 和 b 有相同的标识")
else:
    print("1 - a 和 b 没有相同的标识")
if (id(a) == id(b)):
    print("2 - a 和 b 有相同的标识")
else:
    print("2 - a 和 b 没有相同的标识")

流程控制

#!/usr/bin/python3

# python的条件判断只有if,else使用"elif:"
# num=int(input("输入一个数字:"))
num=78
if num%2==0:
    if num%3==0:
        print ("你输入的数字可以整除 2 和 3")
    else:
        print ("你输入的数字可以整除 2,但不能整除 3")
else:
    if num%3==0:
        print ("你输入的数字可以整除 3,但不能整除 2")
    else:
        print  ("你输入的数字不能整除 2 和 3")

str='zxcvasdf'
if 'cv' in str:
    print('cv in %s' % str)

# 循环支持for和while,还可以和else配合使用
count = 0
while count < 5:
   print (count, " 小于 5")
   count = count + 1
else:
   print (count, " 大于或等于 5")

# for <variable> in <sequence>:
#     <statements>
# else:
#     <statements>
for i in range(5):
    print(i, end='')
for i in range(1, 5):
    print(i, end='')

# break和 continue 功能一致,不演示

数据容器(list、tuple、set、dict)

#!/usr/bin/python3
import sys


def list_demo():
    print('\ntest list')
    """
    列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)
    列表是写在方括号 [] 之间、用逗号分隔开的元素列表
    和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表
    """
    # 构造
    list = ['abcd', 786, 2.23, 'runoob', 70.2]
    tinylist = [123, 'runoob']
    tinylist_null = []

    print("list 截取:")
    print(list)  # 输出完整列表
    print(list[0])  # 输出列表第一个元素
    print(list[1:3])  # 从第二个开始输出到第三个元素
    print(list[2:])  # 输出从第三个元素开始的所有元素
    print(tinylist * 2)  # 输出两次列表
    print(list + tinylist)  # 连接列表
    print('list中的元素是可以改变的')
    a = [1, 2, 3, 4, 5, 6]
    print(a)
    a[0] = 9
    a[2:5] = [13, 14, 15]
    a[2:5] = []  # 将对应的元素值设置为 []
    print(a)

    # 列表推导式
    print('列表推导式')
    vec = [2, 4, 6]
    print([3*x for x in vec])
    print([[x, x**2] for x in vec])
    freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
    print([weapon.strip() for weapon in freshfruit])

def tuple_demo():
    print('\ntest tuple')
    # 元组的元素不能修改,元组写在小括号 () 里,元素之间用逗号隔开
    # 构造
    test_tuple = ('abcd', 786, 2.23, 'runoob', 70.2)
    tinytuple = (123, 'runoob')

    print(test_tuple)  # 输出完整元组
    print(test_tuple[0])  # 输出元组的第一个元素
    print(test_tuple[1:3])  # 输出从第二个元素开始到第三个元素
    print(test_tuple[2:])  # 输出从第三个元素开始的所有元素
    print(tinytuple * 2)  # 输出两次元组
    print(test_tuple + tinytuple)  # 连接元组
    # tuple[0] = 9 tuple is not allow modify
    # 截取的方法和list string一致,这里不演示了

    # 构造0或在1的元祖语法:
    tup1 = ()  # 空元组
    tup2 = (20,)  # 一个元素,需要在元素后添加逗号


def set_demo():
    # 基本功能是进行成员关系测试和删除重复元素
    print('\ntest set')
    # 构造
    student1 = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
    # 插入
    add_item = ('I', 'OK')
    student1.update(add_item) # update 是通过seq类型,把每一项插入set中
    print(student1)
    student1.remove('I')
    student1.remove('OK')
    student1.add(add_item)  # add 是直接把入参当作一个对象,而set要求是不可修改的类型,因此这里传tuple
    print(student1)
    student1.remove(add_item) # 允许移除tuple
    student2 = set(('Tom', 'Jim', 'Mary', 'Mary', 'Jim')) # set中需要指定一个seq,可以是string,list,tuple等,set会负责去重
    student_list = ['Tom', 'Jim', 'Mary']
    student_tuple = ('Tom', 'Jim', 'Mary')
    test_list2set = set(student_list)
    test_tuple2set = set(student_tuple)
    print(student1)
    print(student2)
    print("test list covert to set ", test_list2set)
    print("test tuple covert to set ", test_tuple2set)

    # 成员测试
    if 'Rose' in student1:
        print('Rose 在集合中')
    else:
        print('Rose 不在集合中')

    # set可以进行集合运算
    a = set('abracadabra')
    b = set('alacazam')
    print('a=', a)
    print('b=', b)
    print('a - b=', a - b)  # a 和 b 的差集
    print('a | b=', a | b)  # a 和 b 的并集
    print('a & b=', a & b)  # a 和 b 的交集
    print('a ^ b=', a ^ b)  # a 和 b 中不同时存在的元素


def dictionary_demo():
    # 字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合
    # 键(key)必须使用不可变类型
    # 在同一个字典中,键(key)必须是唯一的
    print('\ntest dictionary')
    # 构造
    test_dict = {}
    test_dict['one'] = "1 - 菜鸟教程"
    test_dict[2] = "2 - 菜鸟工具"
    print(test_dict)
    tinydict = {'name': 'runoob', 'code': 1, 'site': 'www.runoob.com'}
    print(tinydict)
    # 访问
    print(r"tinydict['code']=", tinydict['code'])
    print(test_dict['one'])  # 输出键为 'one' 的值
    print(test_dict[2])  # 输出键为 2 的值
    print(tinydict)  # 输出完整的字典
    print(tinydict.keys())  # 输出所有键
    print(tinydict.values())  # 输出所有值
    # 构造函数 dict() 可以直接从键值对序列中构建字典如下:
    d1 = dict([('Runoob', 1), ('Google', 2), ('Taobao', 3)])
    print(d1)
    d2 = {x: x**2 for x in (2, 4, 6)}
    print(d2)
    d3 = dict(Runoob=1, Google=2, Taobao=3)
    print(d3)

def main():
    a = b = c = 1  # 允许同时赋值
    a, b, c = 1, 2, "runoob"  # 允许分别赋值
    """
    python3有6种基本数据类型:
    Number(数字)
    String(字符串)
    List(列表)
    Tuple(元组)
    Set(集合)
    Dictionary(字典)
    不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)
    可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)
    """
    # Python3 支持 int、float、bool、complex(复数)
    # 内置的 type() 函数可以用来查询变量所指的对象类型,type()不会认为子类是一种父类类型
    print(type(a), type(c))
    # bool: True False 本质上是1和0
    # del语句可以删除一些引用
    del c

    list_demo()
    tuple_demo()
    # string、list 和 tuple 都属于 sequence(序列)
    set_demo()
    dictionary_demo()


if __name__ == '__main__':
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值