资讯详情

Python 入门实战:用循环和条件判断实现「坐标移动与路线记录」

📅 2026/10/8 18:59:10 | 华诺云谱 👁 阅读
Python 入门实战:用循环和条件判断实现「坐标移动与路线记录」
一、前言学完 Python 的基础语法之后很多人会陷入语法都会题目不会写的状态。其实入门阶段的编程题套路高度一致读输入 → 循环处理每一步 → 用条件判断决定怎么做 → 把过程和数据存起来 → 输出结果。今天用一个很典型的小题目——坐标移动与路线记录——把上面这条链路完整走一遍。它看起来简单但把状态维护轨迹记录列表追加边界判断这几个入门必考点全考到了。二、题目描述初始位置为(x, y) (0, 0)输入一串只包含大写字母F、B、L、R的字符串不含空格。程序从左到右逐个处理每个字母计为一步。字母处理规则Fy 加 1x 不变By 减 1x 不变Lx 减 1y 不变Rx 加 1y 不变程序要求使用input()读取一串字母使用循环和条件判断更新坐标用列表记录起点和每一步结束后的位置并按顺序输出输出最终坐标、总步数及是否回到起点最终 x、y 均为 0 时输出已回到起点否则输出未回到起点。输入输出示例输入FRBL测试数据需分别运行输出完整路线和结果输入最终坐标总步数是否回到起点FRBL(0, 0)4是FFRBL(0, 1)5否RRBB(2, -2)4否三、思路分析这道题的核心其实只有一句话循环负责走条件负责往哪走列表负责记住走过的路。拆成三个要点① 状态怎么存用一个变量对(x, y)表示当前坐标初始为(0, 0)。每读一个字母就根据字母去修改x或y——这就是状态维护。② 一步一步怎么走for循环遍历字符串的每一个字符在循环体里用if/elif/elif/elif判断是哪个字母然后对坐标做对应加减。③ 轨迹怎么记先用列表存一个起点[(0, 0)]然后每走完一步就把当前坐标append进去。这样列表里天然就是起点 → 中途 → 终点的完整路线顺序完全正确。④ 结果怎么算最终坐标 循环结束后(x, y)的值总步数 列表长度 − 1因为多存了一个起点是否回到起点 判断x 0 and y 0。四、完整代码# -*- coding: utf-8 -*- 9.30 号任务 · 上午位置计算与路线记录 题目要求 -------- 初始位置为 (x, y) (0, 0)输入一串只含大写字母 F / B / L / R 的字符串 不含空格程序从左到右逐个处理每个字母计为一步。 字母 处理规则 ---- ------------------ F y 加 1x 不变 B y 减 1x 不变 L x 减 1y 不变 R x 加 1y 不变 程序要求 -------- 1. 使用 input() 读取一串字母使用循环和条件判断更新坐标 2. 用列表记录起点和每一步结束后的位置并按顺序输出 3. 输出最终坐标、总步数及是否回到起点 最终 x、y 均为 0 输出“已回到起点”否则输出“未回到起点”。 def step(x, y, command): 根据单个指令字母返回移动一步后的新坐标 (x, y)。 参数: x, y : 当前坐标 command : 单个指令字符F / B / L / R 之一 返回: (x, y) : 移动后的新坐标 if command F: # 向前y 加 1 y 1 elif command B: # 向后y 减 1 y - 1 elif command L: # 向左x 减 1 x - 1 elif command R: # 向右x 加 1 x 1 # 非法字符不改变坐标保持鲁棒性不计为一步 return x, y def walk(commands): 处理一整串指令返回 (路线列表, 最终坐标, 总步数)。 路线列表以起点 (0, 0) 开始之后每走一步追加一个位置。 x, y 0, 0 route [(x, y)] # 列表第 1 个元素记录起点 for command in commands: if command not in FBLR: # 跳过非法字符不计入步数 continue x, y step(x, y, command) route.append((x, y)) # 每走一步记录一次当前位置 steps len(route) - 1 # 总步数 位置个数 - 起点 return route, (x, y), steps def format_route(route): 把路线列表拼成 (0, 0) → (0, 1) → ... 的字符串。 return → .join(({}, {}).format(px, py) for px, py in route) def show_result(commands): 对一组输入完成计算并打印全部结果。 route, (x, y), steps walk(commands) back_to_start (x 0 and y 0) print(- * 46) print(输入{}.format(commands)) print(路线{}.format(format_route(route))) print(最终坐标({}, {}).format(x, y)) print(总步数{}.format(steps)) print(已回到起点 if back_to_start else 未回到起点) def main(): 基本任务在运行窗口中输入一串字母输出路线与结果。 print( * 46) print(上午任务位置计算与路线记录) print( * 46) print(\n【基本任务】请输入一串字母F/B/L/R直接回车则只跑测试) commands input().strip().upper() if commands: show_result(commands) # 按题目“测试与提交”要求依次运行三组给定输入 print(\n【测试与提交】三组测试数据) for case in [FRBL, FFRBL, RRBB]: show_result(case) if __name__ __main__: main()五、运行结果RBL为例同时自动跑完三组测试数据)对照题目给出的测试表三组结果完全一致✅六、几个值得注意的细节6.1 为什么要把起点也放进列表如果只在每步之后追加列表长度就等于步数先放起点之后长度 步数 1。好处是打印路线时可以直接用 → .join(...)拼出完整的起点 → 中途 → 终点逻辑上一目了然。如果不想存起点也可以后面临时补一个但那样代码更绕。6.2 为什么用if/elif而不是四个独立ifF/B/L/R四个字母是互斥的一个字符只可能属于其中一种情况。用elif可以在命中后立刻跳过后续判断效率更高、语义也更准确——不是 F才继续看是不是 B。6.3 总步数为什么不是len(commands)因为代码里对非法字符做了continue跳过处理。如果输入里混入了X、1这类字符它们不应该算作一步。所以用len(route) - 1来统计才是真正走出来的步数更严谨。6.4 换一种更短的写法字典查表学过字典之后可以用映射表代替一长串if/elif代码会清爽很多用字典 元组把条件判断变成了查表。以后如果要扩展指令比如加斜向移动Q/W/E只要往字典里加一行就行不用改一堆elif——这就是数据驱动的小优势。6.5input().strip().upper()的三连操作strip()去掉首尾空格用户手抖敲的空格、回车upper()统一转成大写这样输入frbl也能正确运行。对用户宽容一点程序就健壮一点。这是新手很容易忽略的细节。七、知识点小结知识点在本题目中的应用input()读取一行指令串.strip()/.upper()输入清洗与大小写归一for循环从左到右遍历每个字符if / elif / else判断当前字母是 F / B / L / R变量状态维护用x, y记录当前位置列表append()记录起点和每一步的位置元组用(x, y)表示一个坐标点join() 生成器表达式把路线拼成带箭头的字符串布尔表达式x 0 and y 0判断是否回到起点函数封装step/walk/format_route/show_result7.1 关于函数拆分的思路这道题完全可以塞进一个main()里但拆成几个小函数更好step()—— 只管一步怎么走职责单一walk()—— 只管整串怎么走并记录轨迹format_route()—— 只管怎么把路线显示得好看;show_result()—— 只管怎么输出结果。一个函数只做一件事是写出可维护代码的第一步。以后需求变了比如不同题目要换显示格式只要改对应那一个函数即可。7.2 这类题的通用套路以后遇到类似的按指令序列改变状态的题比如走迷宫、解析命令、简单机器人模拟都可以套用这套模板八、扩展练习想进一步巩固可以试试统计各方向步数统计.count(F)、.count(B)等看看向各方向各走了几步计算曼哈顿距离最终坐标到原点的曼哈顿距离 abs(x) abs(y)输出最远点从路线中找出离原点最远的那一步支持多组输入用while True循环直到用户输入quit才退出。九、结语这道题本身不难但它把入门阶段最重要的三件事练透了循环—— 把重复处理每一个输入交给for条件—— 把根据情况做不同的事交给if/elif/else数据组织—— 用列表记录轨迹、用元组表示坐标。一旦你能把题目拆成状态 循环 条件 数据容器绝大多数入门编程题都会变得有章可循。如果这篇文章对你有帮助欢迎点赞 收藏后续会继续更新更多 Python 入门实战题的解析本文为原创内容代码已在 Python 3.13 环境下实测通过。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑