2024/12/13 【字符串】卡码网54.替换数字 知识点:数组填充类问题中,用到的从后向前操作的双指针法

54. 替换数字(第八期模拟笔试)

替换数字 | 代码随想录

和LeetCode不一样,需要完成函数的编写和测试函数的主函数体的编写,要自己输入输出。

注意的是输出不要有多余的提示内容,会报错。

def toNumber(s : str):
    s_list = list(s)
    n = len(s)
    for i in range(n):
        if s_list[i].isdigit():
            s_list[i] = "number"
    return ''.join(s_list)

if __name__ == "__main__":
    s = input()
    print(toNumber(s))

代码随想录给出了一个双指针的C++代码实现,提到针对这类题目的常见解法思路:

其实很多数组填充类的问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。

目前第一遍过只用了Python,C++的解法有时间学习:

#include <iostream>
using namespace std;
int main() {
    string s;
    while (cin >> s) {
        int sOldIndex = s.size() - 1;
        int count = 0; // 统计数字的个数
        for (int i = 0; i < s.size(); i++) {
            if (s[i] >= '0' && s[i] <= '9') {
                count++;
            }
        }
        // 扩充字符串s的大小,也就是将每个数字替换成"number"之后的大小
        s.resize(s.size() + count * 5);
        int sNewIndex = s.size() - 1;
        // 从后往前将数字替换为"number"
        while (sOldIndex >= 0) {
            if (s[sOldIndex] >= '0' && s[sOldIndex] <= '9') {
                s[sNewIndex--] = 'r';
                s[sNewIndex--] = 'e';
                s[sNewIndex--] = 'b';
                s[sNewIndex--] = 'm';
                s[sNewIndex--] = 'u';
                s[sNewIndex--] = 'n';
            } else {
                s[sNewIndex--] = s[sOldIndex];
            }
            sOldIndex--;
        }
        cout << s << endl;       
    }
}

 1.Python函数头里,形参的正确书写方式

报错详解:

  1. 错误代码

    def toNumber(string s):
    • 这里 string s 的写法是错误的。
    • Python 函数参数的定义格式是 参数名:类型(类型标注是可选的),而不是像某些语言(如 C++ 或 Java)那样写成 类型 参数名
  2. 修正方法

    • 改为:
      def toNumber(s: str):
      • s 是参数名,str 是类型标注(可省略)。
      • 也可以直接写:
        def toNumber(s):

2.Python中空列表的正确添加元素方式:

s_list = list()s_list[i] = str(s[i])

  • s_list 是一个空列表,不能直接通过索引 i 给它赋值,因为列表初始时没有任何元素。这会导致 IndexError
  • 正确的做法是通过 append 方法添加元素。

3.Python的Input函数

Python 的 input() 函数用于从用户输入获取数据。它会等待用户在终端输入内容,并返回输入的字符串。输入的内容始终是一个字符串,如果需要其他数据类型,需要进行转换。

基本语法:

input(prompt)
  • prompt: 这是可选参数,用来给用户显示的提示信息。提示信息会在用户输入之前显示在终端上。
  • 返回值: 返回用户输入的内容(字符串)。

示例 1:简单使用

name = input("请输入您的名字: ")
print(f"你好,{name}!")
  • 程序会显示提示信息 "请输入您的名字: ",然后等待用户输入。用户输入的内容会存储在 name 变量中,最后打印出 "你好,{name}!"

示例 2:将输入转换为整数

因为 input() 返回的总是字符串,如果你需要获取其他类型的数据(如整数、浮点数等),需要手动转换。

age = input("请输入您的年龄: ")
age = int(age)  # 将字符串转换为整数
print(f"您的年龄是 {age} 岁。")
  • 用户输入的内容先被存储为字符串,然后通过 int() 函数将其转换为整数。

示例 3:一次读取多个输入

你可以使用 split() 方法将一个输入按空格分割,读取多个值。

x, y = input("请输入两个数字,用空格分隔: ").split()
x = int(x)
y = int(y)
print(f"两个数字的和是: {x + y}")
  • input().split() 将输入的字符串按空格分割成多个部分,返回一个列表。在这个例子中,xy 分别接受了用户输入的两个数字,并将它们转换为整数,然后计算和。

示例 4:获取浮点数输入

如果需要获取浮点数类型的输入,可以使用 float() 函数进行转换。

weight = input("请输入您的体重 (kg): ")
weight = float(weight)  # 转换为浮点数
print(f"您的体重是 {weight} 公斤。")

示例 5:默认值和错误处理

你可以设置输入的默认值并处理用户的错误输入:

try:
    number = input("请输入一个数字: ")
    number = int(number)
    print(f"您输入的数字是: {number}")
except ValueError:
    print("输入无效,请输入一个整数。")
  • 如果用户输入的不是有效的整数,程序会捕获到 ValueError 异常,并给出提示。

4. python的主函数怎么写?

在 Python 中,主函数通常是一个用于组织代码的函数,通常被命名为 main(),并且在程序的执行入口处调用。Python 的主函数并不像 C 或 C++ 中那样必需,但是为保持代码结构清晰,通常推荐定义一个主函数。

Python 中的主函数是通过 if __name__ == "__main__": 语句来控制程序入口的,这样可以确保主函数只在该脚本被直接运行时执行,而在该脚本被导入为模块时不执行。

示例

def main():
    # 主程序代码
    print("Hello, World!")

if __name__ == "__main__":
    # 程序入口
    main()

解析

  1. def main():定义一个主函数 main(),通常用来包含你想要运行的代码。
  2. if __name__ == "__main__"::这是一个标准的 Python 程序入口判断语句。只有当脚本被直接运行时,__name__ 才会等于 "__main__",此时 main() 函数才会被调用。
    • 如果这个脚本被其他脚本导入,__name__ 会是该模块的名字,而不是 "__main__",此时 main() 不会被调用。

为什么需要 if __name__ == "__main__":

  1. 模块化:你可以将代码组织成模块并在其他 Python 文件中导入,而无需执行主函数中的代码。例如:
    import mymodule
    # 这时 main() 不会被执行,只会执行模块内的函数
  2. 可测试性:通过 if __name__ == "__main__":,你可以在该模块被导入时避免执行不必要的代码,只在直接运行时才执行主逻辑。

5.Python中怎么把代码组织成模块?

在 Python 中,模块是一个包含函数、类和变量的文件,它为代码的组织和重用提供了强大的支持。将代码组织成模块的过程主要包括以下步骤:


(1). 创建一个模块

  • 一个 .py 文件就是一个模块,文件名就是模块名。
  • 在模块中,可以定义函数、类、变量,甚至包含其他模块的导入语句。

示例:创建一个模块 mymodule.py

# 文件名:mymodule.py

# 定义一个函数
def greet(name):
    return f"Hello, {name}!"

# 定义一个变量
PI = 3.14159

# 定义一个类
class Calculator:
    def add(self, a, b):
        return a + b

    def subtract(self, a, b):
        return a - b

(2). 导入模块

  • 在另一个 Python 脚本中,可以通过 import 语句导入模块并使用其中的内容。

示例:导入 mymodule.py

# 文件名:main.py

# 导入模块
import mymodule

# 使用模块中的函数、变量和类
print(mymodule.greet("Alice"))  # 输出:Hello, Alice!
print(f"The value of PI is: {mymodule.PI}")  # 输出:The value of PI is: 3.14159

calc = mymodule.Calculator()
print(calc.add(5, 3))  # 输出:8
print(calc.subtract(5, 3))  # 输出:2

(3). 模块的多种导入方式

(1) 导入整个模块

import mymodule
print(mymodule.greet("Alice"))

(2) 导入特定内容

from mymodule import greet, PI
print(greet("Alice"))
print(PI)

(3) 导入并重命名

import mymodule as mm
print(mm.greet("Alice"))

(4) 导入所有内容 (不推荐,可能会导致命名冲突)

from mymodule import *
print(greet("Alice"))
print(PI)

(4). 将代码组织成包

  • 包是一个包含多个模块的目录。目录下需要有一个特殊的 __init__.py 文件(可以是空文件,也可以包含初始化代码)。
  • 结构示例:
myproject/
    mypackage/
        __init__.py
        module1.py
        module2.py
    main.py

使用包

# 导入包中的模块
from mypackage import module1, module2

# 或者
import mypackage.module1

(5). 模块的文件路径

  • 模块所在路径:Python 默认会在当前目录、标准库路径以及 PYTHONPATH 环境变量中查找模块。
  • 扩展模块路径:如果模块不在默认路径中,可以将路径添加到 sys.path
import sys
sys.path.append('/path/to/your/module')
import mymodule

(6). 创建可执行模块

可以在模块文件中定义一个 main 函数,并通过 if __name__ == "__main__": 来使模块既可以作为库使用,也可以直接运行。

示例:在 mymodule.py

def greet(name):
    return f"Hello, {name}!"

if __name__ == "__main__":
    # 测试模块功能
    print(greet("Test"))

在主程序中:

import mymodule
print(mymodule.greet("Alice"))  # 使用模块功能

运行 mymodule.py 时:

Hello, Test

通过以上方法,可以将代码模块化,不仅便于组织和管理,还能提升代码的可重用性和可维护性。

posted @ 2024-12-17 16:04  axuu  阅读(10)  评论(0编辑  收藏  举报