🐍 前端开发 0 基础学 Python 入门指南:数字与字符串篇

🐍 前端开发 0 基础学 Python 入门指南:数字与字符串篇

从 JavaScript 到 Python,深入理解数字类型和字符串操作的差异!

📝 一、Python 中的数字类型

1.1 三种数字类型详解

Python 有三种数字类型,比 JavaScript 更加明确和强大:

python 复制代码
# 1️⃣ 整数 (int) - 没有大小限制!
age = 25
count = -100
big_number = 1_000_000_000  # 可以用下划线分隔,提高可读性
huge = 10 ** 100  # Python 整数可以无限大!

print(f"年龄: {age}, 类型: {type(age)}")  # <class 'int'>

# 2️⃣ 浮点数 (float) - 小数
price = 19.99
temperature = -3.5
scientific = 1.5e-3  # 科学计数法: 0.0015

print(f"价格: {price}, 类型: {type(price)}")  # <class 'float'>

# 3️⃣ 复数 (complex) - 科学计算用
c1 = 3 + 4j  # j 表示虚部(数学中的 i)
c2 = complex(2, -1)  # 2 - 1j

print(f"复数: {c1}")
print(f"实部: {c1.real}, 虚部: {c1.imag}")

1.2 数字类型对比表

类型 Python JavaScript 说明
整数 int Number Python 整数无大小限制
浮点数 float Number 都有精度问题
复数 complex ❌ 无 Python 原生支持,JS 需要库
大整数 int BigInt Python 自动处理,JS 需显式声明

1.3 浮点数精度问题

⚠️ Python 和 JavaScript 都有浮点数精度问题:

python 复制代码
# Python
result = 0.1 + 0.2
print(result)  # 0.30000000000000004
print(result == 0.3)  # False

# ✅ 解决方案1: 使用 round()
print(round(0.1 + 0.2, 2))  # 0.3

# ✅ 解决方案2: 使用 decimal 模块
from decimal import Decimal
precise = Decimal('0.1') + Decimal('0.2')
print(precise)  # 0.3
javascript 复制代码
// JavaScript 同样的问题
console.log(0.1 + 0.2) // 0.30000000000000004
console.log((0.1 + 0.2).toFixed(2)) // "0.30"

🔄 二、类型转换

2.1 数字之间的转换

python 复制代码
# 整数 → 浮点数
x = 10
print(float(x))  # 10.0

# 浮点数 → 整数(截断小数部分)
y = 3.14
print(int(y))  # 3

# 数字 → 复数
print(complex(5))  # (5+0j)

2.2 字符串与数字互转

python 复制代码
# 字符串 → 数字
num_str = "123"
print(int(num_str))  # 123
print(float("45.67"))  # 45.67

# 数字 → 字符串
print(str(100))  # "100"
print(str(3.14))  # "3.14"

# ⚠️ 注意:不能直接转换格式不对的字符串
try:
    int("3.14")  # ❌ 报错!ValueError
except ValueError:
    print("正确方式: int(float('3.14'))")
    print(int(float("3.14")))  # ✅ 先转 float,再转 int

2.3 类型转换对比

操作 Python JavaScript
字符串转整数 int("123") parseInt("123")
字符串转浮点数 float("3.14") parseFloat("3.14")
数字转字符串 str(123) String(123)${123}
错误处理 抛出 ValueError 返回 NaN

关键区别: Python 转换失败会报错,JavaScript 返回 NaN


🎯 三、类型判断

3.1 两种判断方式

python 复制代码
value = 42

# 方式1: type() 函数
print(type(value))  # <class 'int'>
print(type(value) == int)  # True

# 方式2: isinstance() 函数(推荐✅)
print(isinstance(value, int))  # True
print(isinstance(value, (int, float)))  # 可以检查多个类型,True

3.2 判断是否为数字

python 复制代码
def is_number(value):
    """判断是否为数字类型"""
    return isinstance(value, (int, float, complex))

# 测试
print(is_number(42))      # True
print(is_number(3.14))    # True
print(is_number("123"))   # False
print(is_number(2+3j))    # True

3.3 类型判断对比

python 复制代码
# Python
isinstance(42, int)  # True
type(42) == int      # True
javascript 复制代码
// JavaScript
typeof 42 === 'number' // true
Number.isInteger(42) // true

🤔 四、何时使用数字 vs 字符串

4.1 使用规则表

场景 类型 原因 示例
需要计算 数字 加减乘除、比较大小 价格、年龄、数量
不需要计算 字符串 仅用于显示、存储 电话号码、身份证号
有前导零 字符串 数字会丢失前导零 邮政编码 "010001"
编号/代码 字符串 可能包含字母、特殊字符 订单号、产品编号
统计计算 数字 求和、平均、排序 成绩、销量

4.2 实例对比

python 复制代码
# ❌ 错误示例:电话号码用数字
phone_wrong = 13800138000
# 问题1: 如果是 01088888888,前导0会丢失
# 问题2: 无法添加分隔符如 "-"

# ✅ 正确示例:电话号码用字符串
phone_correct = "010-88888888"

# ✅ 价格用数字(需要计算)
price1 = 19.99
price2 = 29.99
total = price1 + price2  # 49.98 ✅

# ❌ 价格用字符串(会拼接!)
price_str1 = "19.99"
price_str2 = "29.99"
result = price_str1 + price_str2  # "19.9929.99" ❌

JavaScript 同样的规则:

javascript 复制代码
// ✅ 正确
let phone = '010-88888888'
let price = 19.99

// ❌ 错误
let phone = 13800138000 // 前导0会丢失

📊 五、字符串大小比较

5.1 Python 字符串比较规则

按字典序(Unicode 码点)逐字符比较:

python 复制代码
# 基本比较
print('abc' < 'abd')  # True
print('apple' < 'banana')  # True

# ⚠️ 数字字符串比较(注意陷阱!)
print('100' < '20')  # True(字符串比较,'1' < '2')
print('100' < '2')   # True('1' < '2')
print(100 < 20)      # False(数字比较)

# 大小写敏感
print('Apple' < 'banana')  # True(大写字母 ASCII 码更小)
print('a' < 'A')  # False(小写字母 ASCII 码更大)
print(f"ord('A')={ord('A')}, ord('a')={ord('a')}")  # 65 vs 97

# 长度不同
print('abc' < 'abcd')  # True
print('abc' < 'ab')    # False

5.2 Python vs JavaScript 对比

特性 Python JavaScript 说明
比较方式 <, >, <=, >= <, >, <=, >= 语法相同
比较规则 Unicode 字典序 Unicode 字典序 规则相同
大小写 区分 区分 都区分大小写
推荐方法 直接用 <, > localeCompare() 方法 JS 推荐用方法
python 复制代码
# Python
print('apple' < 'banana')  # True
javascript 复制代码
// JavaScript
console.log('apple' < 'banana') // true
console.log('apple'.localeCompare('banana')) // -1(推荐)

5.3 数字字符串排序

🔥 Python 和 JavaScript 的关键区别:

python 复制代码
# Python - 字符串排序
nums_str = ['100', '20', '3']
print(sorted(nums_str))  # ['100', '20', '3']

# Python - 数字排序
nums_int = [100, 20, 3]
print(sorted(nums_int))  # [3, 20, 100] ✅ 直观!
javascript 复制代码
// JavaScript - 字符串排序
let numsStr = ['100', '20', '3']
console.log(numsStr.sort()) // ['100', '20', '3']

// JavaScript - 数字排序(⚠️ 陷阱!)
let numsInt = [100, 20, 3]
console.log(numsInt.sort()) // [100, 20, 3] ❌ 默认按字符串排序!

// ✅ 正确方式:提供比较函数
console.log(numsInt.sort((a, b) => a - b)) // [3, 20, 100]

总结: Python 数字排序更直观,JavaScript 需要额外提供比较函数!


✨ 六、字符串拼接与运算

6.1 字符串拼接(加法)

python 复制代码
# 方式1: 使用 + 号
str1 = "Hello"
str2 = "World"
print(str1 + " " + str2)  # "Hello World"

# 方式2: f-string(推荐✅)
name = "张三"
age = 25
print(f"{name}今年{age}岁")  # "张三今年25岁"

# 方式3: format() 方法
print("{}今年{}岁".format(name, age))

# 方式4: % 格式化(旧式)
print("%s今年%d岁" % (name, age))

对比 JavaScript:

javascript 复制代码
// JavaScript
let str1 = 'Hello'
let str2 = 'World'
console.log(str1 + ' ' + str2) // "Hello World"

// 模板字符串(类似 Python 的 f-string)
let name = '张三'
let age = 25
console.log(`${name}今年${age}岁`) // "张三今年25岁"

6.2 字符串重复(乘法)

Python 独有特性:

python 复制代码
# 字符串重复
print("Ha" * 3)    # "HaHaHa"
print("-" * 20)    # "--------------------"
print("🔥" * 5)    # "🔥🔥🔥🔥🔥"

# 实用场景:创建分隔线
print("=" * 50)

JavaScript 需要使用方法:

javascript 复制代码
// JavaScript
console.log('Ha'.repeat(3)) // "HaHaHa"
console.log('-'.repeat(20)) // "--------------------"

6.3 字符串长度 - len()

python 复制代码
# Python 使用 len() 函数
text1 = "Hello"
text2 = "你好世界"
text3 = "Hello你好"
empty = ""

print(len(text1))  # 5
print(len(text2))  # 4(中文也是1个字符)
print(len(text3))  # 7
print(len(empty))  # 0

# len() 统计字符数,不是字节数
print(len(text2.encode('utf-8')))  # 12(UTF-8 字节数)

对比 JavaScript:

javascript 复制代码
// JavaScript 使用 .length 属性
let text1 = 'Hello'
let text2 = '你好世界'

console.log(text1.length) // 5
console.log(text2.length) // 4

6.4 字符串操作对比表

操作 Python JavaScript
获取长度 len(str) str.length
字符串拼接 str1 + str2 str1 + str2
字符串重复 str * 3 str.repeat(3)
格式化 f"{var}" ${var}

🚨 七、字符串和数字的加法运算

7.1 Python vs JavaScript 的重大区别

这是 Python 和 JavaScript 最大的区别之一!

python 复制代码
# Python - 严格类型,不允许混合
num = 100
text = "200"

# ❌ 这会报错!
try:
    result = num + text
except TypeError as e:
    print(f"❌ 错误: {e}")
    # TypeError: unsupported operand type(s) for +: 'int' and 'str'

# ✅ 必须显式转换
print(num + int(text))      # 300(数字相加)
print(str(num) + text)      # "100200"(字符串拼接)
javascript 复制代码
// JavaScript - 自动类型转换
let num = 100
let text = '200'

console.log(num + text) // "100200"(⚠️ 自动转为字符串!)
console.log(num + Number(text)) // 300
console.log(String(num) + text) // "100200"

7.2 对比表格

操作 Python JavaScript
数字 + 数字 数学加法 数学加法
字符串 + 字符串 字符串拼接 字符串拼接
数字 + 字符串 ❌ 报错(TypeError) ✅ 字符串拼接
类型安全 ✅ 严格,更安全 ⚠️ 宽松,易出错

7.3 常见陷阱

python 复制代码
# 陷阱1: input() 返回字符串
user_input = input("请输入一个数字: ")  # 假设输入 "10"
print(type(user_input))  # <class 'str'>

# ❌ 错误
# result = user_input + 5  # TypeError!

# ✅ 正确
result = int(user_input) + 5
print(result)  # 15

# 陷阱2: 字符串数字的比较
print('9' > '10')  # True(字符串比较!'9' > '1')
print(9 > 10)      # False(数字比较)

# 陷阱3: 列表拼接
list1 = [1, 2, 3]
list2 = [4, 5]
print(list1 + list2)  # [1, 2, 3, 4, 5](列表拼接)

JavaScript 的陷阱:

javascript 复制代码
// 自动转换导致的混乱
console.log('5' + 3) // "53"(字符串拼接)
console.log('5' - 3) // 2(数学运算!)⚠️
console.log('5' * 3) // 15(数学运算!)⚠️

// Python 会在这些情况下都报错,更安全!

🆚 八、总结对比

8.1 数字类型总结

特性 Python JavaScript
整数类型 int(无限大) Number/BigInt
浮点数 float Number
复数 complex(原生支持) ❌ 需要库
精度问题 ✅ 有(同 JS) ✅ 有
类型转换 int(), float(), str() parseInt(), parseFloat()
转换失败 抛出异常 返回 NaN

8.2 字符串操作总结

特性 Python JavaScript
拼接 + 或 f-string + 或模板字符串
重复 * 3 .repeat(3)
长度 len(str) str.length
比较 <, > <, >.localeCompare()
类型混合 ❌ 严格禁止 ✅ 自动转换

8.3 核心差异

特性 Python JavaScript
类型安全 ✅ 严格,报错明确 ⚠️ 宽松,自动转换
数字+字符串 ❌ TypeError ✅ 字符串拼接
数字排序 ✅ 直接 sorted() ⚠️ 需要比较函数
哲学 显式优于隐式 灵活但易出错

💡 最佳实践

9.1 类型转换要显式

python 复制代码
# ✅ 好
result = int(input("输入数字: ")) + 10

# ❌ 不好(会报错)
# result = input("输入数字: ") + 10

9.2 使用 isinstance() 判断类型

python 复制代码
value = 42
if isinstance(value, (int, float)):
    print("这是数字")

9.3 电话、编号用字符串

python 复制代码
phone = "010-88888888"  # ✅
order_id = "ORD-2024-001"  # ✅
zip_code = "010001"  # ✅ 保留前导0

9.4 字符串格式化优先用 f-string

python 复制代码
name = "Python"
age = 30
print(f"{name} 已经 {age} 岁了")  # 推荐

9.5 注意浮点数精度

python 复制代码
# 金融计算使用 Decimal
from decimal import Decimal
price = Decimal('19.99')
quantity = Decimal('3')
total = price * quantity  # 精确计算

🎯 实战练习

创建一个购物车计算程序:

python 复制代码
print("=== 购物车结算系统 ===\n")

# 输入商品信息
product1 = input("商品1名称: ")
price1 = float(input("商品1价格: "))
quantity1 = int(input("商品1数量: "))

product2 = input("商品2名称: ")
price2 = float(input("商品2价格: "))
quantity2 = int(input("商品2数量: "))

# 计算
subtotal1 = price1 * quantity1
subtotal2 = price2 * quantity2
total = subtotal1 + subtotal2

# 输出
print("\n=== 购物清单 ===")
print(f"{product1}: ¥{price1} × {quantity1} = ¥{subtotal1:.2f}")
print(f"{product2}: ¥{price2} × {quantity2} = ¥{subtotal2:.2f}")
print("-" * 40)
print(f"总计: ¥{total:.2f}")

# 类型检查
print(f"\n类型验证:")
print(f"price1 是数字? {isinstance(price1, (int, float))}")
print(f"product1 是字符串? {isinstance(product1, str)}")

📚 核心要点

  1. 数字类型

    • Python 有 int, float, complex 三种
    • 整数无大小限制(比 JS 强大)
    • 浮点数都有精度问题
  2. 类型转换

    • Python 严格,不自动转换 ✅
    • 转换失败会报错,不会返回 NaN
    • 使用 int(), float(), str() 显式转换
  3. 类型判断

    • isinstance() 判断(推荐)
    • type() 获取类型
  4. 使用规则

    • 需要计算 → 用数字
    • 不需要计算的"数字" → 用字符串
    • 电话、编号、邮编 → 字符串
  5. 字符串操作

    • + 拼接,* 重复
    • len() 获取长度
    • f-string 格式化(类似 JS 模板字符串)
  6. 关键区别

    • Python: 类型严格,显式转换
    • JavaScript: 类型宽松,自动转换
    • Python 哲学: 显式优于隐式

本文适合前端开发者快速掌握 Python 的数字和字符串操作,通过对比 JavaScript 理解两种语言的差异。

相关推荐
深蓝电商API4 小时前
用 Selenium 搞定动态网页:模拟点击、滚动、登录全流程
爬虫·python·selenium
芒果量化4 小时前
Optuna - 自动调参利器&python实例
开发语言·python·算法·机器学习
tiantian_cool4 小时前
HarmonyOS 开发环境配置指南 - macOS 版
前端
木头左4 小时前
基于波动率自适应的ETF动态止盈止损模型构建与优化
python
jerryinwuhan4 小时前
pybullet入门到入门_1
开发语言·人工智能·python
写不来代码的草莓熊4 小时前
vue前端面试题——记录一次面试当中遇到的题(10)
前端·vue.js·面试
tiantian_cool4 小时前
正确的 .gitignore 配置
前端·github
三小河4 小时前
封装 classNames:让 Tailwindcss 类名处理更优雅
前端·javascript
起这个名字4 小时前
ESLint 导入语句的分组排序
前端·javascript