电脑编程入门指南:变量、条件和循环怎么理解

电脑编程入门指南:变量、条件和循环怎么理解

电脑编程入门指南:变量、条件和循环怎么理解

刚开始学编程,常会遇到三个概念:变量、条件和循环。它们并不神秘:变量用来保存信息,条件用来根据情况选择做法,循环用来重复执行一段操作。把三者组合起来,就能编写许多实用的小程序,例如计算账单、检查输入、批量处理数据。

本文使用 Python 3 作为示例。Python 语法相对简洁,适合入门。文中的代码可以分别复制到 Python 3 环境中运行;如果终端里使用 python3 启动解释器,也可以将它保存为以 .py 结尾的文件后运行。

一、先把程序想成一份操作说明

程序由计算机按顺序执行。比如“读取商品价格和数量,计算总价;如果总价超过预算,就提醒用户”这句话,可以拆成几步:

  1. 保存价格、数量和预算等信息;
  2. 计算总价;
  3. 比较总价与预算;
  4. 根据比较结果显示不同内容。

第一步涉及变量,第三、四步涉及条件。若要处理一批商品,还会用到循环。编程的关键通常不是记住某个符号,而是把需求拆成明确、可验证的小步骤。

二、变量:给数据取名字

变量可以理解为一个有名字的数据位置。程序运行时,可以读取它、用它计算,也可以在之后给它赋新值。在 Python 中,用等号进行赋值:

price = 12.5
quantity = 3
total = price * quantity

print(total)

运行结果是 37.5。这里的 price、quantity 和 total 是变量名,等号右边的表达式先计算,再把结果赋给左边的变量。等号在赋值语句中不是数学上的“左右相等”,而是“把右侧的值存入左侧的变量”。

变量名与重新赋值

变量名应当表达用途,例如 total_price 比 x 更容易理解。Python 变量名可以包含英文字母、数字和下划线,但不能以数字开头;大小写也不同,score 和 Score 是两个名字。Python 的关键字(例如 if、for)不能用作变量名。

score = 80
score = score + 5
print(score)

结果为 85。第二行先读取旧的 score,加上 5,再将新结果重新赋回 score。常见简写是 score += 5,它在这里与 score = score + 5 效果相同。

变量保存的值可以有不同类型。入门时常见的有:

  • int:整数,例如 12;
  • float:浮点数,例如 12.5;
  • str:文本,例如 "hello";
  • bool:布尔值,只能是 True 或 False。
name = "Lin"
age = 20
is_student = True

print(type(name))
print(type(age))
print(type(is_student))

type() 可以查看值的类型。文本需要放在引号中;数字通常不加引号。"20" 是文本,20 是整数,两者看起来相似,却不能在所有运算中互换。

输入与类型转换

input() 会读取用户输入,并返回字符串。即使用户输入的是数字,程序拿到的仍然是文本。如果要做数值计算,通常需要显式转换:

text = input("请输入年龄:")
age = int(text)

print(age + 1)

输入 20 时,程序会输出 21。如果输入 二十、空字符串或带有不符合整数格式的内容,int() 会抛出 ValueError,程序若没有处理这个异常就会中断。把转换写在读取之后,并不代表输入一定有效;稍后会示范如何检查。

int() 用于转换符合整数表示规则的值,float() 用于转换符合浮点数表示规则的值。转换不是“尽量猜测用户的意思”:例如 int("3.5") 不会得到 3,而会报错;int(3.5) 则会得到 3,舍去小数部分。涉及金额时,还要考虑浮点数的精度特点;严格的货币计算可使用以最小货币单位表示的整数,或 Python 的 decimal.Decimal。

三、条件:让程序根据情况选择

条件语句适用于“如果满足某个情况,就做一件事;否则做另一件事”的需求。Python 使用 if、elif 和 else:

temperature = 28

if temperature >= 30:
    print("天气较热")
elif temperature >= 20:
    print("天气适中")
else:
    print("天气较凉")

Python 依次判断条件:第一个条件不成立时,才检查 elif;前面的条件都不成立,才执行 else。因此顺序会影响结果。温度为 32 时,第一个分支已经成立,后面的分支不会再执行。

冒号后的代码块必须缩进。Python 通常使用四个空格缩进一个层级,同一代码块内要保持一致。缩进不是排版装饰,而是语法的一部分;遗漏冒号或缩进不一致,可能导致语法错误或执行逻辑与预期不同。

比较运算与逻辑组合

常见比较运算符包括 ==(相等)、!=(不相等)、>、<、>= 和 <=。不要把赋值符号 = 与比较符号 == 混为一谈:

password = "blue7"

if password == "blue7":
    print("内容一致")

多个条件可以用 and(都成立)、or(至少一个成立)和 not(取反)组合。下面检查年龄是否处于指定范围:

age = 25

if age >= 18 and age <= 65:
    print("在范围内")
else:
    print("不在范围内")

Python 也支持链式比较:18 <= age <= 65 与上面的范围判断含义相同。范围边界是否包含在内,取决于使用 < 还是 <=。写条件前应先确认需求,例如“年龄大于 18”不包含 18,而“年龄至少为 18”包含 18。

and 和 or 采用短路判断:对于 A and B,若 A 已经为假,就不会再计算 B;对于 A or B,若 A 已经为真,也不会再计算 B。这一特性有时可用于先检查对象是否存在,再访问其内容。不过复杂条件最好加括号并拆成多行,减少阅读歧义。

真值与常见判断错误

条件位置除了布尔值,也可以出现其他类型的值。Python 中空字符串、数字 0、None 等通常被视为假;非空字符串和非零数字通常被视为真。因此:

name = input("请输入名字:")

if name:
    print("已输入内容")
else:
    print("没有输入内容")

这个判断只检查字符串是否为空,不会自动去掉空格。用户输入几个空格时,字符串仍然非空。如果业务上认为空格不算有效内容,可以先使用 strip() 去除首尾空白,再判断。

name = input("请输入名字:").strip()

if name:
    print("已输入内容")
else:
    print("没有输入有效内容")

不要把 if value is True 当成通用的真假判断。它检查的是对象身份是否恰好为布尔值 True,而不是值是否为真。通常直接写 if value:,或者根据需求明确比较,例如 if count == 0:。

四、循环:重复执行任务

循环适合处理重复工作,例如逐个检查名单、计算一串数据的总和,或让程序持续等待合法输入。Python 入门阶段常用 for 和 while 两种循环。

for 与 range

for 循环常用于遍历一组值。配合 range(),可以按整数序列重复执行:

for number in range(1, 6):
    print(number)

结果是从 1 到 5,每个数字一行。要特别注意:range(start, stop) 包含起点 start,但不包含终点 stop。所以 range(1, 6) 生成的是 1、2、3、4、5,而不是 1 到 6。

其他常用写法:

  • range(5) 生成 0 到 4;
  • range(2, 8, 2) 生成 2、4、6,第三个参数是步长;
  • range(5, 0, -1) 生成 5、4、3、2、1。

range() 的步长不能为 0;递减序列需要负步长。若起点、终点和步长方向不匹配,序列可能为空,例如 range(1, 5, -1) 不会产生数字。由于终点不包含在序列中,循环次数常出现“差一”的错误,写完后可以手动列出前后几个值进行核对。

遍历列表

for 也可以逐个读取列表中的元素,不必自己维护下标:

prices = [3.5, 8.0, 2.5]
total = 0

for price in prices:
    total += price

print(total)

结果为 14.0。每轮循环中,变量 price 依次取得列表里的一个值。遍历集合时,如果只需要元素本身,直接遍历通常比手动使用下标更简单,也不容易写出越界错误。

while:条件成立就继续

while 会在每轮开始前检查条件,只要条件为真,就执行循环体。它适用于循环次数不确定、但可以用条件判断何时结束的场景:

count = 3

while count > 0:
    print(count)
    count -= 1

print("结束")

程序输出 3、2、1,然后结束。每轮都要确认循环状态能够朝结束条件推进。如果忘记执行 count -= 1,条件会一直成立,循环就可能无法结束,这称为无限循环。遇到这种情况,可在终端使用中断操作停止程序,具体按键取决于运行环境,常见的是 Ctrl+C。

break 与 continue

break 会立即结束当前所在的循环;continue 会跳过本轮剩余语句,直接进入下一轮。示例中找到目标后停止:

numbers = [4, 7, 9, 12]

for number in numbers:
    if number == 9:
        print("找到 9")
        break

如果把 break 改成 continue,循环不会结束,只会跳过当前轮次剩余的代码。初学者使用这两个语句时,最好先画出“条件成立时,循环还会不会继续”的执行路径,避免把“跳过本轮”和“结束整个循环”混淆。

五、把变量、条件和循环组合起来

下面的完整示例读取一串整数,计算总和与平均值,并在输入不合法时提示用户。用户输入以空格分隔的整数,例如 3 5 8。

text = input("请输入若干个整数,并用空格分隔:").strip()

if not text:
    print("没有输入数字")
else:
    parts = text.split()
    numbers = []
    valid = True

    for part in parts:
        try:
            number = int(part)
        except ValueError:
            print("输入中包含非整数内容:" + part)
            valid = False
            break
        else:
            numbers.append(number)

    if valid:
        total = 0
        for number in numbers:
            total += number

        average = total / len(numbers)
        print("总和:", total)
        print("平均值:", average)

这段程序先把输入保存到 text,再用条件判断是否为空;split() 将文本拆成多个部分;第一个循环逐项转换,并在转换失败时停止;第二个循环累加数字。因为空输入已被单独处理,且只有全部转换成功才会计算平均值,所以 len(numbers) 不会是 0。

示例用 try/except 处理无法转换为整数的情况。这比假设用户一定按要求输入更稳妥。对于真实程序,还应明确接受的格式,例如是否允许负数、是否允许逗号、最多允许多少个数字,以及错误时是重新询问还是退出。输入规则是程序需求的一部分,不能只靠变量类型推断。

六、输入参数的边界与安全注意事项

程序不会自动替你限制输入

用户通过 input() 输入的内容是文本。用 int() 或 float() 转换,只能确认内容能否按相应规则转换,不能替代业务范围校验。例如输入 999999 可能是合法整数,却未必是合理的年龄。应在转换后检查边界:

text = input("请输入 1 到 120 之间的年龄:").strip()

try:
    age = int(text)
except ValueError:
    print("请输入整数")
else:
    if 1 <= age <= 120:
        print("年龄有效")
    else:
        print("年龄超出允许范围")

这里的 1 和 120 是示例业务规则,不是 Python 对年龄的限制。真正的边界要由具体应用决定。对于非常大的输入、海量数据或长时间运行的任务,也要考虑资源消耗:设置合理的数量、长度或时间上限,并在超限时给出可理解的处理结果。不要把“能转换”误当成“安全、可信、符合业务”。

不要把普通输入当作代码执行

不要用 eval() 执行用户输入来“方便地读取表达式”。例如,用户提供的字符串可能包含任意 Python 代码;执行它会带来代码执行风险。对于预期为整数的输入,应使用 int() 并捕获错误;对于结构化数据,使用适当的解析器,并继续验证解析结果的字段、类型和范围。

安全处理输入通常包括几步:限定预期格式;进行解析;检查范围和业务规则;在显示或传递给其他系统时按相应上下文处理。条件判断本身不是安全机制,隐藏按钮或只在客户端做一次检查,也不能替代服务端校验。涉及账户、权限、文件、网络请求或数据库的程序,需要结合相应系统的安全做法,不能仅凭入门示例保证安全。

七、初学者常见错误排查

  • 把 = 写成相等比较:赋值用 =,比较两个值是否相等用 ==。
  • 忘记输入转换:input() 返回字符串。两个数字文本用 + 连接时可能得到拼接结果,而不是数值相加;计算前要按需求转换。
  • 忽略转换失败:用户输入可能不符合格式。使用 try/except 或先按明确规则验证,避免程序意外中断。
  • 判断边界写错:< 不包含边界,<= 包含边界。对于 range(),结束值也不包含在内。
  • 条件顺序不合理:如果先写一个宽泛条件,后面的更具体条件可能永远没有机会执行。按需求检查分支顺序。
  • 循环没有进展:while 循环里如果相关变量不变,条件可能始终为真。检查每轮状态是否更新,以及退出条件是否可达。
  • 缩进不一致:Python 依靠缩进划分代码块。使用编辑器统一缩进,避免混用空格和制表符。
  • 变量名拼写不一致:Python 区分大小写。total 与 Total 是不同变量;拼写错误可能导致未定义变量错误。

排查时可以先读报错信息中的错误类型和行号,再检查出错行及其上下文。也可以暂时打印关键变量的值和类型,例如 print(value, type(value))。小步验证比一次写很长的程序更容易定位问题。

八、练习:用循环统计符合条件的数字

下面的程序计算 1 到 10 中所有偶数的总和。可以先自己预测结果,再运行验证:

total = 0

for number in range(1, 11):
    if number % 2 == 0:
        total += number

print(total)

结果是 30。运算符 % 表示取余数,偶数除以 2 的余数为 0。这里的循环范围是 1 到 10,因为 range(1, 11) 不包括终点 11。可以尝试把范围改为其他数字,或把条件改成 number % 2 != 0 来统计奇数。

结语

掌握变量、条件和循环,就拥有了理解许多程序的基础。变量保存状态,条件表达规则,循环处理重复;真正写程序时,还要确认类型、范围、边界和错误输入。遇到新需求,可以先用自然语言列出步骤,再将每一步转成代码,并用正常值、边界值和错误输入分别测试。这样写出的程序更容易理解,也更不容易被意料之外的输入打断。

© 版权声明

相关文章