分支和循环
if 语句
Python if 语句
python
# Python - 基本 if 语句
age = 18
if age >= 18:
print("成年人")
elif age >= 12:
print("青少年")
else:
print("儿童")
# 条件表达式(三元运算符)
status = "成年" if age >= 18 else "未成年"
print(status)
# 多重条件
score = 85
if 90 <= score <= 100:
grade = "A"
elif 80 <= score < 90:
grade = "B"
elif 70 <= score < 80:
grade = "C"
else:
grade = "D"JavaScript if 语句
javascript
// JavaScript - 基本 if 语句
const age = 18;
if (age >= 18) {
console.log("成年人");
} else if (age >= 12) {
console.log("青少年");
} else {
console.log("儿童");
}
// 条件表达式(三元运算符)
const status = age >= 18 ? "成年" : "未成年";
console.log(status);
// 多重条件
const score = 85;
let grade;
if (score >= 90 && score <= 100) {
grade = "A";
} else if (score >= 80 && score < 90) {
grade = "B";
} else if (score >= 70 && score < 80) {
grade = "C";
} else {
grade = "D";
}条件判断对比
| 操作 | Python | JavaScript |
|---|---|---|
| 相等 | == 或 is | === |
| 不等 | != 或 is not | !== |
| 逻辑与 | and | && |
| 逻辑或 | or | || |
| 逻辑非 | not | ! |
for 和 while 语句
Python 循环
python
# Python - for 循环
fruits = ["apple", "banana", "orange"]
# 遍历列表
for fruit in fruits:
print(fruit)
# 遍历范围
for i in range(5):
print(i) # 0, 1, 2, 3, 4
# 遍历字典
person = {"name": "Alice", "age": 25}
for key, value in person.items():
print(f"{key}: {value}")
# 带索引的遍历
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
# Python - while 循环
count = 0
while count < 5:
print(count)
count += 1
# break 和 continue
for i in range(10):
if i == 3:
continue # 跳过 3
if i == 7:
break # 在 7 处停止
print(i)JavaScript 循环
javascript
// JavaScript - for 循环
const fruits = ["apple", "banana", "orange"];
// 遍历数组
for (const fruit of fruits) {
console.log(fruit);
}
// 传统 for 循环
for (let i = 0; i < 5; i++) {
console.log(i);
}
// 遍历对象
const person = { name: "Alice", age: 25 };
for (const [key, value] of Object.entries(person)) {
console.log(`${key}: ${value}`);
}
// 带索引的遍历
fruits.forEach((fruit, index) => {
console.log(`${index}: ${fruit}`);
});
// JavaScript - while 循环
let count = 0;
while (count < 5) {
console.log(count);
count++;
}
// break 和 continue
for (let i = 0; i < 10; i++) {
if (i === 3) {
continue; // 跳过 3
}
if (i === 7) {
break; // 在 7 处停止
}
console.log(i);
}循环方法对比
| 功能 | Python | JavaScript |
|---|---|---|
| 遍历列表/数组 | for item in list | for (const item of array) |
| 带索引遍历 | enumerate() | forEach() 或 for (let i = 0; ...) |
| 遍历字典/对象 | items() | Object.entries() |
| 范围循环 | range(n) | for (let i = 0; i < n; i++) |
列表推导和字典推导
Python 列表推导
python
# Python - 列表推导
numbers = [1, 2, 3, 4, 5]
# 基本列表推导
squares = [x**2 for x in numbers]
print(squares) # [1, 4, 9, 16, 25]
# 带条件的列表推导
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(even_squares) # [4, 16]
# 嵌套列表推导
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [item for row in matrix for item in row]
print(flattened) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 字典推导
names = ["Alice", "Bob", "Charlie"]
name_lengths = {name: len(name) for name in names}
print(name_lengths) # {'Alice': 5, 'Bob': 3, 'Charlie': 7}
# 集合推导
numbers = [1, 2, 2, 3, 3, 4, 5]
unique_squares = {x**2 for x in numbers}
print(unique_squares) # {1, 4, 9, 16, 25}JavaScript 数组方法
javascript
// JavaScript - 数组方法
const numbers = [1, 2, 3, 4, 5];
// map 方法(类似列表推导)
const squares = numbers.map((x) => x ** 2);
console.log(squares); // [1, 4, 9, 16, 25]
// filter + map(带条件的列表推导)
const evenSquares = numbers.filter((x) => x % 2 === 0).map((x) => x ** 2);
console.log(evenSquares); // [4, 16]
// flatMap(嵌套列表推导)
const matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];
const flattened = matrix.flatMap((row) => row);
console.log(flattened); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
// 对象推导(使用 reduce)
const names = ["Alice", "Bob", "Charlie"];
const nameLengths = names.reduce((acc, name) => {
acc[name] = name.length;
return acc;
}, {});
console.log(nameLengths); // {Alice: 5, Bob: 3, Charlie: 7}
// Set 推导
const uniqueSquares = new Set(numbers.map((x) => x ** 2));
console.log([...uniqueSquares]); // [1, 4, 9, 16, 25]推导式 vs 数组方法对比
| 功能 | Python 推导式 | JavaScript 数组方法 |
|---|---|---|
| 转换 | [f(x) for x in list] | list.map(f) |
| 过滤 | [x for x in list if condition] | list.filter(condition) |
| 过滤+转换 | [f(x) for x in list if condition] | list.filter(condition).map(f) |
| 嵌套 | [item for row in matrix for item in row] | matrix.flatMap(row => row) |
高级循环技巧
Python 高级技巧
python
# Python - zip 函数
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f"{name} is {age} years old")
# Python - 列表切片
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(numbers[::2]) # [1, 3, 5, 7, 9] (步长为2)
print(numbers[::-1]) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] (反转)
# Python - 生成器表达式
squares_gen = (x**2 for x in range(1000000)) # 内存效率高JavaScript 高级技巧
javascript
// JavaScript - 解构赋值
const names = ["Alice", "Bob", "Charlie"];
const ages = [25, 30, 35];
for (const [index, name] of names.entries()) {
console.log(`${name} is ${ages[index]} years old`);
}
// JavaScript - 数组切片
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(numbers.filter((_, i) => i % 2 === 0)); // [1, 3, 5, 7, 9]
console.log([...numbers].reverse()); // [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
// JavaScript - 生成器函数
function* squaresGenerator() {
for (let i = 0; i < 1000000; i++) {
yield i ** 2;
}
}练习
- 编写一个程序,根据分数输出等级(A、B、C、D)
参考答案:
python
# Python
score = 85
if 90 <= score <= 100:
grade = "A"
elif 80 <= score < 90:
grade = "B"
elif 70 <= score < 80:
grade = "C"
else:
grade = "D"
print(grade)javascript
// JavaScript
let score = 85;
let grade;
if (score >= 90 && score <= 100) {
grade = "A";
} else if (score >= 80 && score < 90) {
grade = "B";
} else if (score >= 70 && score < 80) {
grade = "C";
} else {
grade = "D";
}
console.log(grade);- 使用循环计算 1 到 100 的和
参考答案:
python
# Python
s = 0
for i in range(1, 101):
s += i
print(s)javascript
// JavaScript
let s = 0;
for (let i = 1; i <= 100; i++) {
s += i;
}
console.log(s);- 创建一个列表推导,生成 1-20 中所有偶数的平方
参考答案:
python
# Python
even_squares = [x**2 for x in range(1, 21) if x % 2 == 0]
print(even_squares)javascript
// JavaScript
let evenSquares = [];
for (let x = 1; x <= 20; x++) {
if (x % 2 === 0) evenSquares.push(x ** 2);
}
console.log(evenSquares);
// 或者:
let evenSquares2 = Array.from({ length: 20 }, (_, i) => i + 1)
.filter((x) => x % 2 === 0)
.map((x) => x ** 2);
console.log(evenSquares2);- 比较 Python 和 JavaScript 的循环语法差异
参考答案:
- Python: for item in list, while 条件, enumerate, range, for key, value in dict.items()
- JavaScript: for (let i = 0; i < n; i++), for...of, for...in, arr.forEach, Object.entries(obj)
- 实现一个简单的猜数字游戏
参考答案:
python
# Python
import random
answer = random.randint(1, 10)
while True:
guess = int(input("猜一个 1-10 的数字: "))
if guess == answer:
print("猜对了!")
break
elif guess < answer:
print("太小了")
else:
print("太大了")javascript
// JavaScript (Node.js)
const readline = require("readline").createInterface({
input: process.stdin,
output: process.stdout,
});
const answer = Math.floor(Math.random() * 10) + 1;
function ask() {
readline.question("猜一个 1-10 的数字: ", (input) => {
const guess = parseInt(input);
if (guess === answer) {
console.log("猜对了!");
readline.close();
} else if (guess < answer) {
console.log("太小了");
ask();
} else {
console.log("太大了");
ask();
}
});
}
ask();下一步
现在你已经掌握了 Python 的控制流语句,接下来我们将学习函数编程。