
一.代码下面这段 Python 代码实现了一个简单的「路线追踪」程序用户输入一串由F/B/L/R组成的字母程序模拟从原点出发的移动轨迹并输出每一步的坐标、最终位置和总步数。defprocess_route(s):x,y0,0positions[(x,y)]steps0forchins:ifchF:y1elifchB:y-1elifchL:x-1elifchR:x1else:print(f无效字符:{ch}跳过)continuesteps1positions.append((x,y))route_str-.join(f({px},{py})forpx,pyinpositions)print(f路线{route_str})print(f最终坐标 ({x},{y}))print(f总步数{steps})ifx0andy0:print(已回到起点)else:print(未回到起点)if__name____main__:sinput(请输入一串字母只含F/B/L/R).strip().upper()process_route(s)这个是运行结果。1. 函数定义与初始状态defprocess_route(s):定义函数process_route参数s是用户输入的字符串由F/B/L/R组成。x,y0,0初始化横坐标x和纵坐标y都为0即从原点(0, 0)出发。positions[(x,y)]创建列表positions用来记录每一步的位置。初始时先把起点(0, 0)放进去。steps0初始化计数器steps为0用来统计有效移动的总步数。2. 遍历输入字符forchins:用for循环逐个遍历字符串s中的每个字符ch代表当前字符。ifchF:y1如果当前字符是FForward前进则纵坐标y加1表示向上移动一步。elifchB:y-1如果当前字符是BBackward后退则纵坐标y减1表示向下移动一步。elifchL:x-1如果当前字符是LLeft向左则横坐标x减1表示向左移动一步。elifchR:x1如果当前字符是RRight向右则横坐标x加1表示向右移动一步。else:print(f无效字符:{ch}跳过)continue如果字符不是F/B/L/R中的任何一个就打印提示信息并用continue跳过本次循环不把它当作有效移动。steps1只有遇到有效字符F/B/L/R时步数steps才加1。positions.append((x,y))把移动后的新坐标(x, y)追加到positions列表中记录下这一步的位置。3. 输出结果route_str-.join(f({px},{py})forpx,pyinpositions)用列表推导式把positions中的每个坐标格式化成(px,py)字符串再用-连接起来生成完整的路线字符串。print(f路线{route_str})打印整条路线例如(0,0)-(0,1)-(1,1)。print(f最终坐标 ({x},{y}))打印最终停留的坐标。print(f总步数{steps})打印有效移动的总步数。ifx0andy0:print(已回到起点)else:print(未回到起点)判断最终坐标是否为(0, 0)如果是说明回到了起点否则说明没有回到起点。4. 程序入口if__name____main__:这是 Python 的入口判断只有当该脚本被直接运行时才执行下面的代码如果被当作模块导入则不执行。sinput(请输入一串字母只含F/B/L/R).strip().upper()用input()提示用户输入字符串.strip()去掉首尾空白字符.upper()把所有字母转为大写保证与判断条件一致。process_route(s)调用process_route函数传入用户输入的字符串开始执行路线追踪。5. 运行示例假设输入FFR起点(0,0)F→(0,1)F→(0,2)R→(1,2)输出结果为路线 (0,0)-(0,1)-(0,2)-(1,2) 最终坐标 (1,2) 总步数3 未回到起点二、代码下面这段 Python 代码实现了一个「智能小车决策」程序根据小车与障碍物的距离以及当前电量决定执行哪种动作正常前进、减速前进、停止避障、停止并充电并统计各类动作出现的次数。defdecide_action(distance,battery):ifbattery20:return停止并充电else:ifdistance20:return停止避障elifdistance50:return减速前进else:return正常前进defmain():distances[80,35,10,80,20,50]batteries[60,60,60,15,20,20]actions[]fori,(d,b)inenumerate(zip(distances,batteries),start1):actiondecide_action(d,b)actions.append(action)print(f组号{i}距离{d}cm电量{b}%动作{action})fromcollectionsimportCounter countCounter(actions)print(\n统计结果)print(f正常前进{count[正常前进]}次减速前进{count[减速前进]}次停止避障{count[停止避障]}次停止并充电{count[停止并充电]}次。)print(f四项合计为{sum(count.values())}次。)if__name____main__:main()这是代码运行的结果。1. 决策函数defdecide_action(distance,battery):定义决策函数decide_action接收两个参数distance表示小车与障碍物的距离单位 cmbattery表示当前电量单位 %。ifbattery20:return停止并充电如果电量低于20%说明电量不足直接返回「停止并充电」。这是最高优先级的判断无论距离多远电量不足时都先充电。else:如果电量不低于20%则进入距离判断分支。ifdistance20:return停止避障在电量充足的前提下如果距离小于20cm说明障碍物已经很近返回「停止避障」。elifdistance50:return减速前进如果距离在20cm到50cm之间即20 distance 50说明障碍物有一定距离但不算远返回「减速前进」。else:return正常前进如果距离大于等于50cm说明前方畅通返回「正常前进」。2. 主函数与数据准备defmain():定义主函数main程序的核心逻辑都放在这里。distances[80,35,10,80,20,50]创建列表distances存放 6 组测试数据中每组小车与障碍物的距离。batteries[60,60,60,15,20,20]创建列表batteries存放 6 组测试数据中每组小车的电量。actions[]创建空列表actions用来记录每组数据对应的决策结果。3. 遍历数据并决策fori,(d,b)inenumerate(zip(distances,batteries),start1):用zip把distances和batteries按位置一一配对再用enumerate从1开始编号。循环变量i是组号d是距离b是电量。actiondecide_action(d,b)调用decide_action函数把当前组的距离d和电量b传进去得到决策结果并赋值给action。actions.append(action)把本次的决策结果action追加到actions列表中方便后续统计。print(f组号{i}距离{d}cm电量{b}%动作{action})用 f-string 格式化输出当前组的组号、距离、电量和决策动作。4. 统计结果fromcollectionsimportCounter从标准库collections中导入Counter它是一个计数器可以方便地统计列表中每个元素出现的次数。countCounter(actions)用Counter对actions列表进行计数得到每种动作出现的次数结果保存在count中。print(\n统计结果)打印一个空行和「统计结果」标题让输出更清晰。print(f正常前进{count[正常前进]}次减速前进{count[减速前进]}次停止避障{count[停止避障]}次停止并充电{count[停止并充电]}次。)分别从count中取出四种动作的次数并打印。注意如果某种动作一次都没出现Counter会返回0不会报错。print(f四项合计为{sum(count.values())}次。)用sum(count.values())把四种动作的次数加起来得到总次数并打印。5. 程序入口if__name____main__:main()这是 Python 的入口判断只有当该脚本被直接运行时才调用main()如果被当作模块导入则不执行。6. 运行结果根据给定的 6 组数据程序输出如下组号1距离80cm电量60%动作正常前进 组号2距离35cm电量60%动作减速前进 组号3距离10cm电量60%动作停止避障 组号4距离80cm电量15%动作停止并充电 组号5距离20cm电量20%动作正常前进 组号6距离50cm电量20%动作正常前进 统计结果 正常前进 3 次减速前进 1 次停止避障 1 次停止并充电 1 次。 四项合计为 6 次。