鱼C论坛

 找回密码
 立即注册
查看: 1394|回复: 6

[已解决]关于python课后题46动手题第1题

[复制链接]
发表于 2020-1-19 19:12:11 | 显示全部楼层 |阅读模式
6鱼币
本帖最后由 清风慕竹99 于 2020-1-19 19:19 编辑

以下是小甲鱼的给的答案我有几个地方不懂
1.第11行为什么在%后面要加\
2.我运行后找不到这个文本

  1. import time

  2. class Record:
  3.     def __init__(self, initval=None, name=None):
  4.         self.val = initval
  5.         self.name = name
  6.         self.filename = "record.txt"

  7.     def __get__(self, instance, owner):
  8.         with open(self.filename, 'a', encoding='utf-8') as f:
  9.             f.write("%s 变量于北京时间 %s 被读取,%s = %s\n" % \
  10.                     (self.name, time.ctime(), self.name, str(self.val)))
  11.         return self.val

  12.     def __set__(self, instance, value):
  13.         filename = "%s_record.txt" % self.name
  14.         with open(self.filename, 'a', encoding='utf-8') as f:
  15.             f.write("%s 变量于北京时间 %s 被修改, %s = %s\n" % \
  16.                     (self.name, time.ctime(), self.name, str(value)))
  17.         self.val = value
复制代码
最佳答案
2020-1-19 19:12:12
本帖最后由 lixiangyv 于 2020-1-19 19:58 编辑

你的第一个问题:因为后面有非常多的代码,如果在一行上写的话,

你要看这行其他代码就很麻烦,代码的可读性就降低了,

‘\’ 就是用来让一行非常长的代码,分成两行,

这样维护人员或者是你以后来看代码来改代码的时候,

就很方便了。

所以,小甲鱼在 ‘%’ 后面加了一个 ‘\’。



你的第二个问题:因为你写了这个类,但并没有使用它,只是创建了这个类,

没使用就肯定没有出现文件了。

应该写成的代码:
  1. import time

  2. class Record:
  3.     def __init__(self, initval=None, name=None):
  4.         self.val = initval
  5.         self.name = name
  6.         self.filename = "record.txt"

  7.     def __get__(self, instance, owner):
  8.         with open(self.filename, 'a', encoding='utf-8') as f:
  9.             f.write("%s 变量于北京时间 %s 被读取,%s = %s\n" % \
  10.                     (self.name, time.ctime(), self.name, str(self.val)))
  11.         return self.val

  12.     def __set__(self, instance, value):
  13.         filename = "%s_record.txt" % self.name
  14.         with open(self.filename, 'a', encoding='utf-8') as f:
  15.             f.write("%s 变量于北京时间 %s 被修改, %s = %s\n" % \
  16.                     (self.name, time.ctime(), self.name, str(value)))
  17.         self.val = value

  18. class C:
  19.     def __init__(self):
  20.         self.x = None

  21.     def getX(self):
  22.         return self.x

  23.     def setX(self, value):
  24.         self.x = value

  25.     r = Record('x', 'val')

  26. c = C()
  27. c.r = 'y'
  28. c.r
复制代码

这样你就会发现,就有了这个文件

最佳答案

查看完整内容

你的第一个问题:因为后面有非常多的代码,如果在一行上写的话, 你要看这行其他代码就很麻烦,代码的可读性就降低了, ‘\’ 就是用来让一行非常长的代码,分成两行, 这样维护人员或者是你以后来看代码来改代码的时候, 就很方便了。 所以,小甲鱼在 ‘%’ 后面加了一个 ‘\’。 你的第二个问题:因为你写了这个类,但并没有使用它,只是创建了这个类, 没使用就肯定没有出现文件了。 应该写成的代 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-19 19:12:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 lixiangyv 于 2020-1-19 19:58 编辑

你的第一个问题:因为后面有非常多的代码,如果在一行上写的话,

你要看这行其他代码就很麻烦,代码的可读性就降低了,

‘\’ 就是用来让一行非常长的代码,分成两行,

这样维护人员或者是你以后来看代码来改代码的时候,

就很方便了。

所以,小甲鱼在 ‘%’ 后面加了一个 ‘\’。



你的第二个问题:因为你写了这个类,但并没有使用它,只是创建了这个类,

没使用就肯定没有出现文件了。

应该写成的代码:
  1. import time

  2. class Record:
  3.     def __init__(self, initval=None, name=None):
  4.         self.val = initval
  5.         self.name = name
  6.         self.filename = "record.txt"

  7.     def __get__(self, instance, owner):
  8.         with open(self.filename, 'a', encoding='utf-8') as f:
  9.             f.write("%s 变量于北京时间 %s 被读取,%s = %s\n" % \
  10.                     (self.name, time.ctime(), self.name, str(self.val)))
  11.         return self.val

  12.     def __set__(self, instance, value):
  13.         filename = "%s_record.txt" % self.name
  14.         with open(self.filename, 'a', encoding='utf-8') as f:
  15.             f.write("%s 变量于北京时间 %s 被修改, %s = %s\n" % \
  16.                     (self.name, time.ctime(), self.name, str(value)))
  17.         self.val = value

  18. class C:
  19.     def __init__(self):
  20.         self.x = None

  21.     def getX(self):
  22.         return self.x

  23.     def setX(self, value):
  24.         self.x = value

  25.     r = Record('x', 'val')

  26. c = C()
  27. c.r = 'y'
  28. c.r
复制代码

这样你就会发现,就有了这个文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-19 19:20:28 From FishC Mobile | 显示全部楼层
续航符,实际上你可以写在一行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-19 21:07:58 | 显示全部楼层
lixiangyv 发表于 2020-1-19 19:34
你的第一个问题:因为后面有非常多的代码,如果在一行上写的话,

你要看这行其他代码就很麻烦,代码的可 ...

我还有个问题,我用小甲鱼的答案运行后输入
  1. c =Record('x', 'val')
  2. c ='y'
复制代码

为什么会没有文件呢?感觉和你的差不多啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-22 23:07:17 | 显示全部楼层
清风慕竹99 发表于 2020-1-19 21:07
我还有个问题,我用小甲鱼的答案运行后输入

为什么会没有文件呢?感觉和你的差不多啊

调用上差之毫厘谬以千里,你把Record()这个类实例化给到c,然后又对c赋值字符‘y',这就不是对类的查找,设置了,而是把这个类拉出来又扔掉了

评分

参与人数 1鱼币 +5 收起 理由
清风慕竹99 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-23 19:10:28 | 显示全部楼层
Hoiste 发表于 2020-1-22 23:07
调用上差之毫厘谬以千里,你把Record()这个类实例化给到c,然后又对c赋值字符‘y',这就不是对类的查找, ...

明白了 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-23 19:38:46 | 显示全部楼层
Hoiste 发表于 2020-1-22 23:07
调用上差之毫厘谬以千里,你把Record()这个类实例化给到c,然后又对c赋值字符‘y',这就不是对类的查找, ...

我之前打错了;c =Record(),c.y =1;没有文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 08:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表