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

相关文章
|
5月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
190 62
|
20天前
|
算法 数据可视化 开发者
为什么要学习数据结构与算法
今天,我向大家介绍一门非常重要的课程——《数据结构与算法》。这门课不仅是计算机学科的核心,更是每一位开发者从“小白”迈向“高手”的必经之路。
为什么要学习数据结构与算法
|
23天前
|
存储 人工智能 索引
Python数据结构:列表、元组、字典、集合
Python 中的列表、元组、字典和集合是常用数据结构。列表(List)是有序可变集合,支持增删改查操作;元组(Tuple)与列表类似但不可变,适合存储固定数据;字典(Dictionary)以键值对形式存储,无序可变,便于快速查找和修改;集合(Set)为无序不重复集合,支持高效集合运算如并集、交集等。根据需求选择合适的数据结构,可提升代码效率与可读性。
|
1月前
|
人工智能 自然语言处理 Shell
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
43 8
|
1月前
|
缓存 Shell 开发工具
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 &quot;hello world!&quot; 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
42 4
|
2月前
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
|
4月前
|
Python
Python Internet 模块
Python Internet 模块。
149 74
|
5月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
168 63
|
5月前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
154 61
|
5月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性

热门文章

最新文章