python学习-函数模块,数据结构,字符串和列表(上)

简介: python学习-函数模块,数据结构,字符串和列表

例子1.寻找水仙花数。


说明:水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身.

for i in range(100, 1000):
    a = i//100
    b = i//10 % 10
    c = i % 10
    if i == a**3+b**3+c**3:
       print(i)

例子2.正整数的反转

num  = int(input('请输入正整数'))
## 123456
rever_num = 0
while num >0:
    rever_num = rever_num*10 + num%10
    num //= 10
print(rever_num)

例子3:百钱百鸡问题。


说明:百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:
鸡翁一值钱五,
鸡母一值钱三,
鸡雏三值钱一。
百钱买百鸡,
问鸡翁、鸡母、鸡雏各几何?

for i in range(0,21):
    for j in range(0,34):
        z = 100 -5*i -3*j
        if 5*i + 3*j + z//3 ==100 and z % 3 ==0:
            print(f'公鸡{i}只,母鸡{j}只,小鸡{z}只')

公鸡2只,母鸡30只,小鸡0只
公鸡5只,母鸡25只,小鸡0只
公鸡8只,母鸡20只,小鸡0只
公鸡11只,母鸡15只,小鸡0只
公鸡14只,母鸡10只,小鸡0只
公鸡17只,母鸡5只,小鸡0只
公鸡20只,母鸡0只,小鸡0只

例子4:斐波那契数列。输出前20项。

a, b = 1, 1
# 通过递推公式算出后面的18个数
for _ in range(18):
    a, b = b, a + b
    print(b, end=' ')

例子5:输入M和N计算C(M,N)。


用循环做累乘来计算阶乘

m = int(input('m = '))
n = int(input('n = '))
# 计算m的阶乘
fm = 1
for num in range(1, m + 1):
    fm *= num
# 计算n的阶乘
fn = 1
for num in range(1, n + 1):
    fn *= num
# 计算m-n的阶乘
fm_n = 1
for num in range(1, m - n + 1):
    fm_n *= num
# 计算C(M,N)的值
print(fm//fn//fm_n)

用函数修改上面的求组合数

def fac(num):
    fn = 1
    for i in range(1,num+1):
        fn*=i
    return fn

m = int(input('m = '))
n = int(input('n = '))
print(fac(m)//fac(n)//fac(m-n))

定义默认参数

def add(a=0, b=0, c=0):
    return a + b + c
print(add(1,2))

任意多个参数:可变参数

# 用星号表达式来表示args可以接收0个或任意多个参数
def add(*args):
    total = 0
    # 可变参数可以放在for循环中取出每个参数的值
    for val in args:
        total += val
    return total

print(add(1,2,3,4,5,6,7))

用模块管理函数

module1.py

def foo():
    print('hello, world!')

module2.py

def foo():
    print('goodbye, world!')

test.py

import module1
import module2

# 用“模块名.函数名”的方式(完全限定名)调用函数,
module1.foo()    # hello, world!
module2.foo()    # goodbye, world!

as关键字

test.py

import module1 as m1
import module2 as m2

m1.foo()    # hello, world!
m2.foo()    # goodbye, world!

from...import...

from module1 import foo
foo()    # hello, world!
from module2 import foo
foo()    # goodbye, world!
from module1 import foo as f1
from module2 import foo as f2

f1()    # hello, world!
f2()    # goodbye, world!
函数是功能相对独立且会重复使用的代码的封装

字符串的定义


所谓字符串,就是由零个或多个字符组成的有限序列

s1 = 'hello, world!'
s2 = "你好,世界!"
print(s1, s2)
# 以三个双引号或单引号开头的字符串可以折行
s3 = '''
hello, 
world!
'''
print(s3, end='')
提示:print函数中的end=''表示输出后不换行,即将默认的结束符\n(换行符)更换为''(空字符)。

转义字符和原始字符串

# 头尾带单引号的hello, world!
s1 = '\'hello, world!\''
print(s1)
# 头尾带反斜杠的hello, world!
s2 = '\\hello, world!\\'
print(s2)

反斜杠和字符n

在字符串'hello\n'中,\n表示换行;而在r'hello\n'中,\n不再表示换行,就是反斜杠和字符n。

# 字符串s1中\t是制表符,\n是换行符
s1 = '\time up \now'
print(s1)
# 字符串s2中没有转义字符,每个字符都是原始含义
s2 = r'\time up \now'
print(s2)

拼接和重复

s1 = 'hello' + ' ' + 'world'
print(s1)    # hello world
s2 = '!' * 3
print(s2)    # !!!
s1 += s2     # s1 = s1 + s2
print(s1)    # hello world!!!
s1 *= 2      # s1 = s1 * 2
print(s1)    # hello world!!!hello world!!!

比较运算

s1 = 'a whole new world'
s2 = 'hello world'
print(s1 == s2, s1 < s2)      # False True
print(s2 == 'hello world')    # True
print(s2 == 'Hello world')    # False
print(s2 != 'Hello world')    # True
s3 = '骆昊'
print(ord('骆'), ord('昊'))               # 39558 26122
s4 = '王大锤'
print(ord('王'), ord('大'), ord('锤'))    # 29579 22823 38180
print(s3 > s4, s3 <= s4)      # True False

is运算符

s1 = 'hello world'
s2 = 'hello world'
s3 = s2
# 比较字符串的内容
print(s1 == s2, s2 == s3)    # True True
# 比较字符串的内存地址
print(s1 is s2, s2 is s3)    # False True

成员运算 in和not in

s1 = 'hello, world'
print('wo' in s1)    # True
s2 = 'goodbye'
print(s2 in s1)      # False

获取字符串长度

s1 = 'hello, world'
print(len(s1))                  # 12
print(len('goodbye, world'))    # 14

索引和切片

如果希望从字符串中取出某个字符,我们可以对字符串进行索引运算,运算符是[n],其中n是一个整数,假设字符串的长度为N,那么n可以是从0到N-1的整数,其中0是字符串中第一个字符的索引,而N-1是字符串中最后一个字符的索引,通常称之为正向索引;在Python中,字符串的索引也可以是从-1到-N的整数,其中-1是最后一个字符的索引,而-N则是第一个字符的索引,通常称之为负向索引。注意,因为字符串是不可变类型,所以不能通过索引运算修改字符串中的字符。
s1 = 'abc123456'
N = len(s1)

# 获取第一个字符
print(s1[0], s1[-N])    # a a

# 获取最后一个字符
print(s1[N-1], s1[-1])  # 6 6

# 获取索引为2或-7的字符
print(s1[2], s1[-7])    # c c

# 获取索引为5和-4的字符
print(s1[5], s1[-4])    # 3 3
s1 = 'abc123456'

# i=2, j=5, k=1的正向切片操作
print(s1[2:5])       # c12

# i=-7, j=-4, k=1的正向切片操作
print(s1[-7:-4])     # c12

# i=2, j=9, k=1的正向切片操作
print(s1[2:])        # c123456

# i=-7, j=9, k=1的正向切片操作
print(s1[-7:])       # c123456

# i=2, j=9, k=2的正向切片操作
print(s1[2::2])      # c246

# i=-7, j=9, k=2的正向切片操作
print(s1[-7::2])     # c246

# i=0, j=9, k=2的正向切片操作
print(s1[::2])       # ac246

# i=1, j=-1, k=2的正向切片操作
print(s1[1:-1:2])    # b135

# i=7, j=1, k=-1的负向切片操作
print(s1[7:1:-1])    # 54321c

# i=-2, j=-8, k=-1的负向切片操作
print(s1[-2:-8:-1])  # 54321c

# i=7, j=-10, k=-1的负向切片操作
print(s1[7::-1])     # 54321cba

# i=-1, j=1, k=-1的负向切片操作
print(s1[:1:-1])     # 654321c

# i=0, j=9, k=1的正向切片
print(s1[:])         # abc123456

# i=0, j=9, k=2的正向切片
print(s1[::2])       # ac246

# i=-1, j=-10, k=-1的负向切片
print(s1[::-1])      # 654321cba

# i=-1, j=-10, k=-2的负向切片
print(s1[::-2])      # 642ca

python学习-函数模块,数据结构,字符串和列表(下):https://developer.aliyun.com/article/1483337

相关文章
|
4月前
|
算法 Python
【Python深入学习】- 书籍推荐|数据结构和算法介绍|内建集合数据类型
【Python深入学习】- 书籍推荐|数据结构和算法介绍|内建集合数据类型
57 1
|
8月前
|
存储 安全 BI
2.0 Python 数据结构与类型
数据类型是编程语言中的一个重要概念,它定义了数据的类型和提供了特定的操作和方法。在 python 中,数据类型的作用是将不同类型的数据进行分类和定义,例如数字、字符串、列表、元组、集合、字典等。这些数据类型不仅定义了数据的类型,还为数据提供了一些特定的操作和方法,例如字符串支持连接和分割,列表支持排序和添加元素,字典支持查找和更新等。因此,选择合适的数据类型是 python 编程的重要组成部分。
110 0
|
14天前
|
Python
python学习-函数模块,数据结构,字符串和列表(下)
python学习-函数模块,数据结构,字符串和列表
57 0
|
24天前
|
存储 Python
python基础篇:图解Python字典,一目了然的键值对数据结构!
【4月更文挑战第6天】python基础篇:图解Python字典,一目了然的键值对数据结构!
28 2
python基础篇:图解Python字典,一目了然的键值对数据结构!
|
1月前
|
存储 Python
请简述Python中的列表、元组和字典的区别?
请简述Python中的列表、元组和字典的区别?
12 1
|
1月前
|
存储 索引 Python
Python数据结构讲解列表
Python数据结构讲解列表
24 0
|
1月前
|
存储 索引 Python
怎么理解python中的列表、集合和字典
怎么理解python中的列表、集合和字典
16 0
|
2月前
|
存储 数据挖掘 C语言
Python数组与列表的区别
Python数组与列表的区别
|
8月前
Python--各数据结构解包小例子
Python--各数据结构解包小例子
62 0
|
4月前
|
Serverless 数据库 索引
Python基础语法、内建数据结构列表、元组、字典、集合的讲解及应用(附源码 超详细必看)
Python基础语法、内建数据结构列表、元组、字典、集合的讲解及应用(附源码 超详细必看)
53 0

热门文章

最新文章