
本文讲解如何修改函数结构,使tables()函数既能打印乘法表,又能将结果正确写入tables.txt文件,避免在文件对象上调用未定义方法的常见错误。
本文讲解如何修改函数结构,使`tables()`函数既能打印乘法表,又能将结果正确写入`tables.txt`文件,避免在文件对象上调用未定义方法的常见错误。
在Python中,文件对象(如通过 open() 返回的 table)本身不是模块或类实例,不支持 .write 以外的自定义方法调用——因此像 tables.write(...) 这样的写法会触发 AttributeError。关键在于:写入逻辑必须封装在函数内部,并直接作用于已打开的文件对象,而非试图对函数名调用写入方法。
正确的做法是将 with open(...) 和 file.write() 统一纳入 tables() 函数体中,并确保每次写入的是有意义的内容(注意原答案中存在逻辑瑕疵:i 在 print(n*i) 后才自增,导致最后写入的是 11,且未换行)。以下是优化后的完整实现:
def tables(n):
with open("tables.txt", "w") as f:
for i in range(1, 11): # 更简洁、不易出错
result = n * i
print(f"{n} × {i} = {result}") # 控制台输出,带格式
f.write(f"{n} × {i} = {result}\n") # 写入文件,含换行符
def main():
try:
n = int(input("请输入一个整数:"))
tables(n)
print("✅ 乘法表已成功写入 tables.txt")
except ValueError:
print("❌ 输入错误:请输入有效的整数")
if __name__ == "__main__":
main()
注意事项:
- 使用
"w"模式会覆盖原有文件内容;若需追加,改用"a"; -
f.write()只接受字符串,务必用str()或 f-string 转换; - 手动添加
\n换行符,否则所有结果将挤在同一行; - 推荐用
for循环替代while,更符合Python习惯且边界清晰; - 加入
try-except提升健壮性,防止非数字输入导致程序崩溃。
运行后,控制台显示标准乘法表,同时 tables.txt 中将生成格式一致的文本内容,真正实现“所见即所存”。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











