Skip to content

分支和循环

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";
}

条件判断对比

操作PythonJavaScript
相等==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);
}

循环方法对比

功能PythonJavaScript
遍历列表/数组for item in listfor (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;
  }
}

练习

  1. 编写一个程序,根据分数输出等级(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. 使用循环计算 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. 创建一个列表推导,生成 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);
  1. 比较 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)
  1. 实现一个简单的猜数字游戏

参考答案:

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 的控制流语句,接下来我们将学习函数编程。