如何用Python基于列表输入发送例行邮件及索引越界报错求解
Python例行邮件生成代码报错修复
报错原因
- 错误1:
visitors = visitors.pop(-1)语法误用list.pop()方法会返回被移除的元素,你这里将被弹出的quit字符串直接赋值给了visitors变量,原本存储访客信息的列表直接被覆盖为单个字符串,后续对字符串做索引访问必然出现越界问题。这行只需修改为visitors.pop(-1),不需要赋值回visitors。 - 错误2:循环逻辑错误
每个访客对应列表中2个元素(姓名、国籍),你用range(len(visitors))遍历会导致最后一次循环时i+1超出列表最大索引。需要将循环步长设置为2,改为for i in range(0, len(visitors), 2)。 - 错误3:冗余初始化逻辑出错
你在初始化邮件模板时直接调用了visitors[i],此时的i是你提前定义的初始值1,如果访客列表长度不足2会直接触发越界,且这部分内容后续循环会重复生成,直接删除初始邮件模板中的姓名、国籍两行即可。
修复后完整代码
def visitor(): visitors = [] number_of = int(input("你要登记多少位访客?")) time = input("访客抵达时间是?") comments = """ 请输入第一位访客的姓名,换行输入对应国籍,再输入第二位访客姓名、换行输入对应国籍,直到完成所有访客信息录入 如果要停止录入并生成邮件内容,输入quit即可 """ print(comments) name = "" while name != "quit": name = str(input("请输入内容:")) visitors.append(name) # 移除最后输入的quit标记 visitors.pop(-1) # 初始化邮件基础内容 email = f""" 您好: 今日{time}共有{number_of}位访客到访,信息如下: """ # 步长为2遍历访客列表 for i in range(0, len(visitors), 2): to_add = f""" 姓名:{visitors[i]} 国籍:{visitors[i + 1]} """ email += to_add ending = "\n烦请批准,谢谢。" email += ending return email print(visitor())
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

