学编程最怕什么?不是算法太难,而是第一行代码就跑不起来。
Python 之所以成为最受欢迎的入门语言,就是因为它足够简单。简单到什么程度?你看:
print(”Hello World”)一行代码,搞定。没有分号,没有大括号,没有 public static void main。这就是 Python 的哲学——用最少代码,做最多的事。
本篇是 Python 系列的第一篇,我们从最基础的概念讲起:注释、变量、数据类型、运算符。学完这些,你就能写出自己的第一个"有用"的 Python 程序了。
写代码不写注释,就像做菜不放盐——能用,但没人想用。
用`#`开头,可以放在代码后面:
# 这是一个单行注释print(”Hello World”)# 在代码后面加注释num = 10# 定义一个变量
用三对单引号或双引号包裹:
'''这是多行注释可以写很多行'''”””这也是多行注释”””
💡 小贴士:三引号还可以用来写"文档字符串"(docstring),放在函数或类的开头,用
help(函数名)可以查看。
变量就像一个贴了标签的盒子,你把数据放进去,以后用标签名就能取出来。
a = 10# 盒子 a 里装了整数 10b = ”zhangsan”# 盒子 b 里装了字符串 ”zhangsan”print(a)# 10print(b)# zhangsan
和 Java、C 不同,Python 变量不需要声明类型,你放什么就是什么:
a = 10# 现在是整数a = ”hello”# 现在变成字符串了,完全没问题!
这就是所谓的动态类型:变量的类型由赋值决定,且可以随时改变。
Python 支持同时给多个变量赋值,非常优雅:
# 相同值var1 = var2 = var3 = 10# 不同值(解包赋值)var1, var2, var3 = 10, 20, 30
在 Java 里交换两个变量需要临时变量:
// Javaint temp = a;a = b;b = temp;
Python 一行搞定:
num1, num2 = num2, num1是不是帅呆了?这就是 Python 的"语法糖",让代码更贴近人类思维。
Python 没有真正的常量(不可改变的变量),但约定:全大写的变量名表示常量。
PI = 3.14159# 约定为常量,但其实可以改MAX_SIZE = 100# 同上
命名规范:
my_nameMAX_VALUEStudentInfodec_num = 10# 十进制(默认)bin_num = 0b1010# 二进制(0b 前缀)oct_num = 0o12# 八进制(0o 前缀)hex_num = 0xa# 十六进制(0x 前缀)print(dec_num)# 10print(bin_num)# 10print(oct_num)# 10print(hex_num)# 10
进制转换函数:
bin(10)# '0b1010'oct(10)# '0o12'hex(10)# '0xa'
Python 3 的整数没有大小限制,可以算超大数:
big_num = 10 ** 100# 1 后面 100 个零,Python 轻松处理
💡 可以用下划线分隔大数字,提高可读性(Python 3.6+):
population = 1_400_000_000 # 14亿
小整数池:Python 预先缓存了 -5 到 256 的整数,这些整数在内存中只有一份。
a = 100b = 100print(id(a) == id(b))# True(指向同一内存地址)a = 300b = 300print(id(a) == id(b))# 可能 False(超出小整数池范围)
0.1 + 0.2# 0.30000000000000004 😱
这不是 bug,是所有遵循 IEEE 754 标准的语言都有的问题。
解决方案:使用 decimal 模块
from decimal import DecimalDecimal(”0.1”) + Decimal(”0.2”)# 0.3 ✅
⚠️ 注意:
Decimal的参数要传字符串,不是浮点数!
科学计数法:
num = 3.14e7# 3.14 × 10^7print(num)# 31400000.0
Python 中 bool 是 int 的子类,True 等价于 1,False 等价于 0:
True + 10# 11False + 10# 10True == 1# TrueFalse == 0# Trueisinstance(True, int)# True(bool 确实是 int 的子类)
这个特性在实际开发中很有用:可以直接对布尔值求和来统计
True的个数。
字符串是编程中最常用的数据类型,Python 的字符串功能非常强大。
创建方式:
str1 = 'hello'# 单引号str2 = ”hello”# 双引号str3 = ”””多行字符串”””# 三引号(保留换行)
转义字符:
\n | "hello\nworld" | |
\t | "hello\tworld" | |
\\ | "C:\\Users" | |
\"\' | "He said \"hi\"" | |
\r | ||
\b |
原始字符串(禁止转义):在处理正则表达式和文件路径时特别有用。
path = ”C:\\Users\\test”# 需要双反斜杠path = r”C:\Users\test”# 用 r 前缀,更清爽!# 正则表达式中也很常用pattern = r”\d+\.\d+”# 匹配数字
type(10)#type(”hello”) #type(3.14)## isinstance 更推荐,它支持继承关系isinstance(10, int)# Trueisinstance(True, int)# True(bool 是 int 子类)type(True) == int# False(type 不认继承)
💡 经验法则:判断类型用
isinstance,查看类型用type。
int(”10”)# 10(字符串转整数)int(”10”, 16)# 16(按16进制解析)float(”3.14”)# 3.14str(100)# ”100”complex(2, 3)# (2+3j)(复数)# 两个实用函数ord(”a”)# 97(字符 → ASCII 码)chr(98)# ”b”(ASCII 码 → 字符)# eval:执行字符串中的表达式eval(”2 + 3”)# 5eval(”len('hello')”)# 5
text = ”你好中国”# 编码:字符串 → 字节byte_data = text.encode(encoding=”utf-8”)# b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\xad\xe5\x9b\xbd'# 解码:字节 → 字符串text = byte_data.decode(encoding=”utf-8”)# ”你好中国”
⚠️ 编码和解码必须使用相同的字符集,否则乱码。
name = input(”请输入你的名字:”)print(”你好,” + name)
⚠️
input()返回的永远是字符串,需要数字时记得转换:age = int(input(”请输入年龄:”))
print(”Hello”, ”World”)# Hello World(默认空格分隔)print(”Hello”, end=””)# 不换行print(”World”)# 接在上面后面print(”A” + ”B”)# AB(字符串拼接)print(”A” * 3)# AAA(重复)
方式一:% 占位符(老式,了解即可)
name = ”Alice”age = 18print(”名字:%s,年龄:%d” % (name, age))print(”圆周率:%.2f” % 3.14159)# 3.14
方式二:.format()(Python 3 推荐)
print(”名字:{},年龄:{}”.format(name, age))print(”名字:{n},年龄:{a}”.format(n=name, a=age))# 数字格式化num = 31415.9print(”{:*^20,.2f}”.format(num))# *****31,415.90****** 居中print(”{:*<20,.2f}”.format(num))# 31,415.90*********** 左对齐print(”{:*>20,.2f}”.format(num))# ***********31,415.90 右对齐
方式三:f-string(Python 3.6+,最推荐)
name = ”Alice”age = 18print(f”名字:{name},年龄:{age}”)print(f”{name=}, {age=}”)# 调试神器:name='Alice', age=18
10 + 4# 14 加10 - 4# 6 减10 * 4# 40 乘10 / 4# 2.5 除(永远返回浮点数!)10 // 4# 2 整除(向下取整)10 % 4# 2 取余10 ** 4# 10000 幂(10的4次方)
⚠️ 注意
/和//的区别:
10 / 3→ 3.333...(浮点数)10 // 3→ 3(整数,向下取整)-10 // 3→ -4(不是 -3!向下取整)
num = 10num += 5# 15num -= 3# 12num *= 2# 24num /= 4# 6.0num //= 2# 3.0num %= 2# 1.0num **= 3# 1.0
海象运算符:=(Python 3.8+):在表达式中同时赋值
# 传统写法data = input(”输入:”)if data:print(data)# 海象运算符if (data := input(”输入:”)):print(data)
10 == 10# True 相等10 != 20# True 不等10 > 5# True 大于10 < 5# False 小于10 >= 10# True 大于等于10 <= 5# False 小于等于
True and False# False 与:两者都True才TrueTrue or False# True 或:有一个True就Truenot True# False 非:取反
短路特性:
andor0 and print(”不会执行”)# 0(短路了)1 or print(”不会执行”)# 1(短路了)
位运算直接操作二进制,在底层开发、加密算法中常用。
a = 17# 00010001b = 13# 00001101a & b# 1 按位与(都为1才1)a | b# 29 按位或(有一个1就1)a ^ b# 28 按位异或(不同才1)~a# -18 按位取反a << 2# 68 左移2位(相当于乘4)a >> 2# 4 右移2位(相当于除4)
💡 位运算小技巧:
x & 1 == 1→ 判断奇数 x >> 1→ 等价于 x // 2x ^ x == 0→ 相同数异或为0(可用于找不同)
numbers = [10, 20, 30, 40, 50]10 in numbers# True 在序列中60 not in numbers# True 不在序列中
a = [1, 2, 3]b = ac = a[:]b is a# True 同一内存地址c is a# False 不同内存地址c == a# True 但值相等
🔑 重要区分:
==比较的是值(内容是否相同) is比较的是内存地址(是否是同一个对象) PEP 8 规范建议:不要用
is比较数字和字符串字面量。
celsius = float(input(”请输入摄氏度:”))fahrenheit = celsius * 9 / 5 + 32print(f”{celsius}°C = {fahrenheit}°F”)
year = int(input(”请输入年份:”))is_leap = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)print(f”{year}年是{'闰年' if is_leap else '平年'}”)
num1 = float(input(”第一个数:”))op = input(”运算符(+,-,*,/):”)num2 = float(input(”第二个数:”))match op:case ”+”: print(f”结果:{num1 + num2}”)case ”-”: print(f”结果:{num1 - num2}”)case ”*”: print(f”结果:{num1 * num2}”)case ”/”: print(f”结果:{num1 / num2}” if num2 != 0 else ”除数不能为0!”)case _: print(”不支持的运算符”)
{var=} 是调试神器 | |
/// 向下取整,is 比地址 == 比值 |
基础语法已经搞定,下一篇我们将学习 Python 最强大的部分之一——流程控制与数据结构。你将学会:
👉 继续阅读第二篇:流程控制与数据结构
📝 学习建议:看完文章后,一定要动手敲代码!每个例子都亲自运行一遍,改一改参数看看结果有什么不同。编程是"做"会的,不是"看"会的。