二:Python 语法基础——变量、数据类型、输入输出

一、回顾与本篇目标

上一篇我们安装了 Python,写出了第一段程序,还和 JavaScript 做了对比。你知道了 Python 用缩进代替花括号、变量不需要声明关键字、print() 用来输出内容。

这一篇,我们要把 Python 最基础的语法系统地过一遍。学完之后,你就能用 Python 独立写出简单的小程序了——能接收用户输入、能处理数据、能用不同格式输出结果。

本篇的目标:

  1. 掌握 Python 的变量命名规则和赋值方式
  2. 理解 Python 的数字类型和常用运算
  3. 学会字符串的所有常用操作
  4. 学会获取用户输入——input()
  5. 掌握格式化输出的多种方式

二、变量:名字的规矩和赋值的花样

上一篇你看到了,Python 声明变量不需要 letconst,直接写名字和赋值就行。但 Python 对变量名有一些规矩。

变量命名规则

  • 只能包含字母、数字、下划线。不能有空格、中文(虽然 Python 3 其实支持中文变量名,但千万别用)、特殊符号。
  • 不能以数字开头1name 不合法,name1 合法。
  • 区分大小写nameName 是两个不同的变量。
  • 不能用 Python 的关键字:比如 ifforwhileclassdef 等。Python 会直接报错。
  • 命名习惯:Python 社区强烈推荐用下划线命名法——全部小写字母,单词之间用下划线连接。例如 user_namestudent_score。JavaScript 常用的驼峰命名法(userName)在 Python 里也不报错,但不符合 Python 社区的惯例,别人看你的代码会觉得奇怪。

合法与不合法的变量名示例

# 合法的变量名
name = '张三'
user_name = '李四'
age2 = 25
_score = 100       # 下划线开头有特殊含义,后面会讲
PI = 3.14159       # 全大写通常表示常量

# 不合法的变量名(会报错)
# 1name = '错误'    # 不能以数字开头
# user-name = '错误' # 不能用连字符
# if = 10           # 不能用关键字
# my name = '错误'   # 不能有空格

Python 的赋值方式比 JavaScript 更灵活

除了普通的单变量赋值,Python 还支持一些简洁的写法:

1. 多重赋值:一行给多个变量赋值

# 同时给三个变量赋值
x, y, z = 10, 20, 30
print(x)  # 10
print(y)  # 20
print(z)  # 30

# 实用场景:交换两个变量的值,不需要临时变量
a = 1
b = 2
a, b = b, a
print(a)  # 2
print(b)  # 1

2. 链式赋值:多个变量赋同一个值

# 三个变量都是 0
count = total = sum = 0
print(count, total, sum)  # 0 0 0

3. 复合赋值运算符

score = 100
score += 10    # 相当于 score = score + 10
score -= 5     # 相当于 score = score - 5
score *= 2     # 相当于 score = score * 2
score /= 3     # 相当于 score = score / 3

# Python 特有的
score //= 2    # 整除赋值
score **= 2    # 幂运算赋值
score %= 3     # 取余赋值

三、数字类型:整数、浮点数、复数

Python 的数字类型比 JavaScript 丰富。

整数(int)

和 JS 不同,Python 的整数没有大小限制。理论上你可以算 1000 位的数字,Python 也不会溢出。这是 Python 在科学计算领域受欢迎的原因之一。

small = 42
big = 123456789012345678901234567890
huge = 2 ** 100   # 2 的 100 次方,一个非常大的数
print(huge)        # 1267650600228229401496703205376

二进制、八进制、十六进制:

binary = 0b1010      # 二进制,十进制为 10
octal = 0o17         # 八进制,十进制为 15
hexadecimal = 0xFF   # 十六进制,十进制为 255
print(binary, octal, hexadecimal)  # 10 15 255

浮点数(float)

浮点数就是带小数点的数字。Python 的浮点数和 JavaScript 一样,基于 IEEE 754 标准,所以也存在精度问题:

print(0.1 + 0.2)  # 0.30000000000000004  —— 跟 JS 一模一样的问题

科学计数法:

speed_of_light = 3e8    # 3 × 10 的 8 次方 = 300000000
tiny = 1.5e-3           # 0.0015
print(speed_of_light)   # 300000000.0
print(tiny)             # 0.0015

复数(complex)

Python 原生支持复数,这在科学计算中非常有用:

z = 3 + 4j
print(z.real)  # 3.0  —— 实部
print(z.imag)  # 4.0  —— 虚部

日常开发基本用不到复数,但知道 Python 有这个能力就行。

算术运算符

运算符 含义 示例 结果
+ 加法 10 + 3 13
- 减法 10 - 3 7
* 乘法 10 * 3 30
/ 除法(总是得到浮点数) 10 / 3 3.3333333333333335
// 整除(向下取整) 10 // 3 3
% 取余数 10 % 3 1
** 幂运算 2 ** 10 1024

Python 特有的两个运算符

  • //:整除,结果向下取整。JS 没有这个运算符,需要用 Math.floor()
  • **:幂运算。JS 里是 Math.pow() 或 ES7 的 **

注意 /// 的区别

print(10 / 3)    # 3.3333333333333335 —— 普通除法,结果总是浮点数
print(10 // 3)   # 3 —— 整除,得到整数部分

类型转换函数

print(int('42'))       # 42 —— 字符串转整数
print(float('3.14'))   # 3.14 —— 字符串转浮点数
print(int(3.9))        # 3 —— 浮点数转整数(直接截断,不是四舍五入)
print(str(100))        # '100' —— 数字转字符串
print(round(3.14159, 2))  # 3.14 —— 四舍五入保留两位小数
print(abs(-10))        # 10 —— 绝对值
print(max(3, 7, 1))    # 7 —— 取最大值
print(min(3, 7, 1))    # 1 —— 取最小值
print(pow(2, 10))      # 1024 —— 和 2 ** 10 一样

四、字符串:文本处理的瑞士军刀

字符串是编程中最常用的数据类型之一。Python 的字符串操作非常强大,而且设计得比 JavaScript 更一致。

创建字符串的四种方式

# 单引号
s1 = '你好,世界'

# 双引号(和单引号完全等价,选一种你喜欢的就行)
s2 = "你好,世界"

# 三引号:可以跨多行
s3 = '''这是第一行
这是第二行
这是第三行'''

# 三双引号也可以
s4 = """这也是
多行字符串"""

和 JavaScript 一样,单引号里可以直接写双引号,双引号里可以直接写单引号,不需要转义:

quote = "他说:'Python 很简单'"
print(quote)  # 他说:'Python 很简单'

字符串的索引(下标)

Python 中字符串的每个字符都有一个编号,从 0 开始。你可以用 字符串[索引] 来获取单个字符:

text = 'Python'
print(text[0])    # 'P' —— 第一个字符
print(text[1])    # 'y' —— 第二个字符
print(text[-1])   # 'n' —— 倒数第一个字符
print(text[-2])   # 'o' —— 倒数第二个字符

负索引是 Python 的一个特色:-1 表示最后一个,-2 表示倒数第二个,依此类推。JS 里获取最后一个字符要写 str[str.length - 1],Python 的 text[-1] 简洁得多。

字符串切片:截取子串

切片是 Python 字符串操作中最强大的功能。语法:字符串[开始:结束:步长]

text = 'Hello World'

print(text[0:5])     # 'Hello' —— 从索引 0 到索引 5(不包括 5)
print(text[6:])      # 'World' —— 从索引 6 到末尾
print(text[:5])      # 'Hello' —— 从开头到索引 5(不包括 5)
print(text[:])       # 'Hello World' —— 整个字符串的副本

# 步长
print(text[::2])     # 'HloWrd' —— 每隔一个字符取一个
print(text[::-1])    # 'dlroW olleH' —— 反向,相当于反转字符串

切片规则

  • [开始:结束]:包括开始,不包括结束。
  • 省略开始:从开头取。
  • 省略结束:取到末尾。
  • [::-1]:反转整个字符串,这是一个非常常用的技巧。

字符串的常用方法

Python 的字符串方法非常多,这里列出最常用的:

text = '  Hello Python  '

# 大小写转换
print(text.upper())          # '  HELLO PYTHON  ' —— 全部大写
print(text.lower())          # '  hello python  ' —— 全部小写
print(text.title())          # '  Hello Python  ' —— 每个单词首字母大写

# 去除空白
print(text.strip())          # 'Hello Python' —— 去除首尾空白
print(text.lstrip())         # 'Hello Python  ' —— 只去除左侧空白
print(text.rstrip())         # '  Hello Python' —— 只去除右侧空白

# 查找和替换
print(text.find('Python'))   # 8 —— 返回子串的位置,找不到返回 -1
print(text.replace('Python', 'World'))  # '  Hello World  ' —— 替换

# 判断开头和结尾
print(text.startswith('  He'))  # True
print(text.endswith('  '))      # True

# 拆分和拼接
words = '苹果,香蕉,橘子'
print(words.split(','))      # ['苹果', '香蕉', '橘子'] —— 按逗号分割成列表
print(', '.join(['苹果', '香蕉', '橘子']))  # '苹果, 香蕉, 橘子' —— 用逗号拼接列表

# 计数
print('hello hello hello'.count('hello'))  # 3 —— 统计子串出现次数

和 JavaScript 的对比

  • text.upper() 相当于 JS 的 text.toUpperCase()
  • text.strip() 相当于 JS 的 text.trim()
  • text.split(',') 和 JS 一样。
  • ','.join(list) 在 JS 里是 list.join(',')——注意调用的对象反过来了。JS 是在数组上调用 join,Python 是在分隔符字符串上调用 join。这是一个很容易搞混的点。

格式化字符串:把变量嵌入到文字中

Python 有三种方式把变量嵌入到字符串中,最推荐的是 f-string(Python 3.6 以上):

name = '张三'
age = 28
score = 95.5

# 方式一:f-string(最推荐,Python 3.6+)
print(f'我叫{name},今年{age}岁,成绩是{score}分')

# 方式二:format 方法(旧版,但也很常用)
print('我叫{},今年{}岁,成绩是{}分'.format(name, age, score))

# 方式三:% 占位符(老式风格,不推荐但可能会在旧代码里看到)
print('我叫%s,今年%d岁,成绩是%.1f分' % (name, age, score))

f-string 的更多用法:

# 可以在花括号里做运算
a = 10
b = 3
print(f'{a} + {b} = {a + b}')      # 10 + 3 = 13
print(f'{a} / {b} = {a / b:.2f}')  # 10 / 3 = 3.33 —— :.2f 表示保留两位小数

# 对齐和填充
print(f'{name:>10}')    # '        张三' —— 右对齐,总宽度 10
print(f'{name:<10}')    # '张三        ' —— 左对齐
print(f'{name:^10}')    # '    张三    ' —— 居中
print(f'{name:*^10}')   # '****张三****' —— 用星号填充

f-string 是 Python 最方便的字符串格式化方式,相当于 JavaScript 的模板字符串(`我叫${name}`)。

五、获取用户输入:input()

input() 函数让程序能接收用户从键盘输入的内容。它相当于 JavaScript 里的 prompt()

基本用法

# 提示用户输入姓名
name = input('请输入你的名字:')
print(f'你好,{name}!')

程序运行到 input() 时会暂停,等待用户输入。用户输入内容并按回车后,输入的内容以字符串形式返回,存储到 name 变量中。

重要:input() 的返回值永远是字符串

这是最容易出错的地方。即使用户输入的是数字,input() 返回的也是字符串:

age = input('请输入你的年龄:')
print(type(age))  #  —— 是字符串,不是数字!

# 如果要做数学运算,必须先转换
age = int(input('请输入你的年龄:'))
print(f'明年你就{age + 1}岁了')  # 正确,age 现在是整数

type() 函数用来查看变量的类型,相当于 JavaScript 的 typeof

完整示例:一个简单的计算器

# 简单的加法计算器
print('===== 加法计算器 =====')
num1 = float(input('请输入第一个数字:'))
num2 = float(input('请输入第二个数字:'))
result = num1 + num2
print(f'{num1} + {num2} = {result}')

运行这个程序,终端会依次询问两个数字,然后输出它们的和。用 float() 而不是 int(),因为用户可能输入小数。

六、布尔值与比较运算

布尔值只有两个:TrueFalse。注意首字母大写,和 JavaScript 的 true/false(全小写)不同。

比较运算符

Python 的比较运算符和 JavaScript 基本一致:

运算符 含义 示例 结果
== 等于 10 == 10 True
!= 不等于 10 != 5 True
> 大于 10 > 5 True
< 小于 10 < 5 False
>= 大于等于 10 >= 10 True
<= 小于等于 5 <= 3 False

Python 的一个特色:连续比较

# 这个在 JS 里要写成 x > 0 && x < 10
x = 5
print(0 < x < 10)   # True
print(10 < x < 20)  # False

逻辑运算符

Python 使用英文单词而不是符号:

JavaScript Python 含义
&& and 并且
|| or 或者
! not 取反
age = 25
has_ticket = True

# 并且:两个条件都要满足
print(age >= 18 and has_ticket)   # True

# 或者:满足一个即可
print(age < 18 or has_ticket)     # True

# 取反
print(not has_ticket)             # False

Python 的“真值”和“假值”

和 JavaScript 类似,Python 中某些值在条件判断中会被当作 False

  • False
  • 00.0
  • ''(空字符串)
  • [](空列表)
  • {}(空字典)
  • None(相当于 JS 的 null/undefined)

其他所有值都是 True

if []:
    print('空列表是真值')    # 不会执行
else:
    print('空列表是假值')    # 会执行

None:Python 的“空”

None 是 Python 中表示“没有值”的特殊常量,相当于 JavaScript 的 nullundefined 的结合体。

result = None
print(result is None)   # True —— 判断变量是不是 None 用 is,不要用 ==

七、print() 的进阶用法

我们已经用了很多次 print(),但它还有一些实用的参数:

# sep 参数:多个值之间的分隔符(默认是空格)
print('苹果', '香蕉', '橘子')            # 苹果 香蕉 橘子
print('苹果', '香蕉', '橘子', sep=', ')  # 苹果, 香蕉, 橘子
print('苹果', '香蕉', '橘子', sep='-')   # 苹果-香蕉-橘子

# end 参数:末尾追加的内容(默认是换行符 \n)
print('第一行', end='')
print('还是第一行')   # 两行输出在同一行

print('第一行', end='---')
print('第二行')       # 输出:第一行---第二行

八、本篇动手练习

练习 1:个人信息卡片

新建 practice2-1.py,用 input() 获取用户的姓名、年龄、城市,然后用 f-string 格式化输出一张个人信息卡片。

练习 2:温度转换器

新建 practice2-2.py,编写一个摄氏温度转华氏温度的程序。公式:华氏度 = 摄氏度 × 9/5 + 32。用户输入摄氏度,输出对应的华氏度,保留一位小数。

练习 3:字符串操作练习

新建 practice2-3.py,输入一个英文句子,完成以下操作:

  • 全部转为大写并输出
  • 统计某个字母出现的次数
  • 把句子里的某个词替换成另一个词
  • 把句子分割成单词列表并输出

练习 4:计算圆的面积和周长

新建 practice2-4.py,用户输入圆的半径,输出圆的面积(π × 半径²)和周长(2 × π × 半径)。π 可以用 3.14159,或者用 import math 然后 math.pi。结果保留两位小数。

九、本篇小结

这一篇你系统学习了 Python 的基础语法:

  • 变量:不需要声明关键字,命名用下划线风格。支持多重赋值和链式赋值。
  • 数字类型:int(无限精度)、float(有精度问题)、complex(复数)。运算符中 // 整除和 ** 幂运算是 Python 特有的。
  • 字符串:索引(支持负数)、切片([start:end:step])、丰富的内置方法(upperstripsplitjoin 等)。f-string 是最推荐的格式化方式。
  • input():获取用户输入,返回值永远是字符串,需要数学运算时记得转换类型。
  • 布尔值TrueFalse(首字母大写)。比较运算符和 JS 基本一致,逻辑运算符用 andornot
  • print()sep 参数控制分隔符,end 参数控制结尾字符。

你现在已经能用 Python 写出和用户交互的小程序了。下一篇,我们学习条件判断和循环——if/elif/elsefor 循环、while 循环,以及 Python 特有的循环控制方式。

下一篇预告

下一篇——《条件判断与循环——if、for、while》:详细讲解 Python 的分支结构和循环结构。和 JavaScript 的差异:elif 代替 else iffor...in 的使用方式、range() 函数的完整用法、while 循环和 break/continue。还有 Python 特有的 for...else 结构。

Python 零基础入门,每周更新。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容