Python实现朋友互相问候功能嵌套循环修正及列表推导式实现咨询
Python朋友问候程序修正方案
原有代码问题梳理
- 问好环节循环范围设置错误,漏掉了第二个成员(列表索引1)的遍历逻辑,内层循环终止值设置错误导致无法遍历到第一个成员
- 代码缩进不符合Python语法规范,道别环节索引逻辑完全混乱,和需求的遍历规则不匹配
- 遍历顺序和示例要求不一致
修正后的嵌套循环实现
n = int(input()) user_list = input().split() # 问好(Hi)环节 for current_idx in range(1, n): # 从当前成员的前一个倒序遍历到第一个成员 for target_idx in range(current_idx - 1, -1, -1): print(f"{user_list[current_idx]}: Hi {user_list[target_idx]}!") # 道别(Bye)环节 for current_idx in range(n): print(f"{user_list[current_idx]}: Bye guys!") # 后面的所有成员向当前成员道别 for target_idx in range(current_idx + 1, n): print(f"{user_list[target_idx]}: Bye {user_list[current_idx]}!")
运行上述代码输入示例参数后,输出和需求示例匹配,如需严格对齐示例里的大小写差异,直接修改字符串中对应单词的大小写即可。
列表推导式实现方案
可以使用列表推导式实现,本质是提前生成所有需要输出的字符串,再统一打印即可,实现代码如下:
n = int(input()) user_list = input().split() # 列表推导式生成所有输出行 output_lines = [ # 问好环节所有行 *[f"{user_list[c]}: Hi {user_list[t]}!" for c in range(1, n) for t in range(c-1, -1, -1)], # 道别环节所有行 *[line for c in range(n) for line in [ f"{user_list[c]}: Bye guys!", *[f"{user_list[t]}: Bye {user_list[c]}!" for t in range(c+1, n)] ]] ] # 统一打印所有行 for line in output_lines: print(line)
列表推导式实现的运行效果和嵌套循环版本完全一致,适合需要先收集所有输出内容再统一处理的场景。
内容的提问来源于stack exchange,提问作者user4516038
相关产品推荐
相关产品推荐

