鱼C论坛

 找回密码
 立即注册
查看: 2742|回复: 10

[已解决]打印类对象出现了“意想不到代码之外的东西”

[复制链接]
发表于 2023-7-1 15:37:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码输出了不干净的东西!!!

  1. class Student:
  2.     def __init__(self,student_name,student_number) :
  3.         self.name=student_name
  4.         self.number = student_number
  5.         self.grade = {"语文":0,"数学":0,"英语":0}
  6.    
  7.     def set_grade(self,course,grade):
  8.         if course in self.grade:
  9.             self.grade[course] = grade
  10.    
  11.     def print_grade(self):
  12.         print(f"{self.name}({self.number}):")
  13.         for course in self.grade:
  14.             print(f"{course}:{self.grade[course]}")
  15.         print("你的成绩单已送达!")   
  16.         

  17. xiaoming = Student("xiaoming",20222286)
  18. zeng  = Student("zeng",20222222)

  19. xiaoming.set_grade("数学",80)
  20. xiaoming.set_grade("语文",90)
  21. xiaoming.set_grade("英语",82)

  22. print(xiaoming.print_grade())
  23. print(f"{xiaoming.name}     ({xiaoming.number})")
复制代码


但是终端输出了个None,不太懂啊老铁们

  1. xiaoming(20222286):
  2. 语文:90
  3. 数学:80
  4. 英语:82
  5. 你的成绩单已送达!
  6. None
  7. xiaoming     (20222286)
复制代码


这个None是咋来的呢???
最佳答案
2023-7-1 15:38:58
在代码中,print(xiaoming.print_grade())这一行的输出结果是None。这是因为print_grade()方法没有返回任何值,所以默认返回None。因此,当调用print(xiaoming.print_grade())时,会先打印出xiaoming(20222286)的成绩信息,然后打印出None。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-1 15:38:58 | 显示全部楼层    本楼为最佳答案   
在代码中,print(xiaoming.print_grade())这一行的输出结果是None。这是因为print_grade()方法没有返回任何值,所以默认返回None。因此,当调用print(xiaoming.print_grade())时,会先打印出xiaoming(20222286)的成绩信息,然后打印出None。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 15:40:33 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-7-1 15:42 编辑

在代码中,你调用了print(xiaoming.print_grade())这一行。然而,print_grade()方法已经在内部打印了学生成绩,所以它不会返回任何值。因此,当你将它作为参数传递给print()函数时,它会打印出成绩,并且返回值为空。这就是为什么你会看到终端输出了一个None。如果你想消除这个None的输出,只需将print(xiaoming.print_grade())改为xiaoming.print_grade(),即可直接调用该方法而不用打印返回值。

为什么会返回None

在代码中,当你调用print(xiaoming.print_grade())时,xiaoming.print_grade()会先执行,然后返回一个值给print()函数进行打印。但是,在print_grade()方法中,并没有return语句来指定返回的值。因此,默认情况下,方法没有明确返回值时,Python会隐式地返回None。

因此,当你调用print(xiaoming.print_grade())时,xiaoming.print_grade()方法会打印学生成绩,然后返回None给print()函数,最终导致终端输出了一个None。

如果你不希望看到这个None的输出,你可以直接调用xiaoming.print_grade()方法而不是将它作为参数传递给print()函数,这样就不会返回任何值了。修改后的代码如下:

python
  1. # 其他代码省略...

  2. xiaoming.print_grade()
  3. print(f"{xiaoming.name}     ({xiaoming.number})")
复制代码

这样,你就不会再看到终端输出中的 None。


修改后的代码如下:

python
  1. class Student:
  2.     def __init__(self, student_name, student_number):
  3.         self.name = student_name
  4.         self.number = student_number
  5.         self.grade = {"语文": 0, "数学": 0, "英语": 0}
  6.    
  7.     def set_grade(self, course, grade):
  8.         if course in self.grade:
  9.             self.grade[course] = grade
  10.    
  11.     def print_grade(self):
  12.         print(f"{self.name}({self.number}):")
  13.         for course in self.grade:
  14.             print(f"{course}:{self.grade[course]}")
  15.         print("你的成绩单已送达!")   
  16.         

  17. xiaoming = Student("xiaoming", 20222286)
  18. zeng = Student("zeng", 20222222)

  19. xiaoming.set_grade("数学", 80)
  20. xiaoming.set_grade("语文", 90)
  21. xiaoming.set_grade("英语", 82)

  22. xiaoming.print_grade()
  23. print(f"{xiaoming.name}     ({xiaoming.number})")
复制代码

这样,你将不再看到终端输出中的 None。

点评

我很赞同!: 5.0
我很赞同!: 5
适合中国宝宝体质的回答!爆赞  发表于 2023-7-1 15:47
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-7-1 15:42:33 | 显示全部楼层
陶远航 发表于 2023-7-1 15:38
在代码中,print(xiaoming.print_grade())这一行的输出结果是None。这是因为print_grade()方法没有返回任何 ...

wc,刚编辑完就发现最佳没了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-7-1 15:43:39 | 显示全部楼层
陶远航 发表于 2023-7-1 15:38
在代码中,print(xiaoming.print_grade())这一行的输出结果是None。这是因为print_grade()方法没有返回任何 ...

那么xiaoming.print_grade()添加返回return 啥好呢,终端展示不想要这个None的话
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-1 15:45:17 | 显示全部楼层
歌者文明清理员 发表于 2023-7-1 15:42
wc,刚编辑完就发现最佳没了

嘤嘤嘤sorry哥哥,先看到一楼回复也看懂了就最佳了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 15:45:54 | 显示全部楼层
zxc++ 发表于 2023-7-1 15:45
嘤嘤嘤sorry哥哥,先看到一楼回复也看懂了就最佳了

不幸运的总是我……https://fishc.com.cn/thread-230298-1-1.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 16:12:00 | 显示全部楼层
zxc++ 发表于 2023-7-1 15:43
那么xiaoming.print_grade()添加返回return 啥好呢,终端展示不想要这个None的话

如果想要避免在终端展示None,可以将print_grade()方法的最后一行改为return "你的成绩单已送达!"。这样,当调用xiaoming.print_grade()时,会返回字符串"你的成绩单已送达!",而不会返回None。代码如下所示:

  1. class Student:
  2.     def __init__(self, student_name, student_number):
  3.         self.name = student_name
  4.         self.number = student_number
  5.         self.grade = {"语文": 0, "数学": 0, "英语": 0}

  6.     def set_grade(self, course, grade):
  7.         if course in self.grade:
  8.             self.grade[course] = grade

  9.     def print_grade(self):
  10.         print(f"{self.name}({self.number}):")
  11.         for course in self.grade:
  12.             print(f"{course}: {self.grade[course]}")
  13.         return "你的成绩单已送达!"


  14. xiaoming = Student("xiaoming", 20222286)
  15. zeng = Student("zeng", 20222222)

  16. xiaoming.set_grade("数学", 80)
  17. xiaoming.set_grade("语文", 90)
  18. xiaoming.set_grade("英语", 82)

  19. print(xiaoming.print_grade())
  20. print(f"{xiaoming.name} ({xiaoming.number})")
复制代码

这样修改后,终端将只打印出以下内容,而不会显示None:

  1. xiaoming(20222286):
  2. 语文: 90
  3. 数学: 80
  4. 英语: 82
  5. 你的成绩单已送达!
  6. xiaoming (20222286)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 16:32:15 | 显示全部楼层
歌者文明清理员 发表于 2023-7-1 15:45
不幸运的总是我……https://fishc.com.cn/thread-230298-1-1.html

积点功德吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 23:01:28 | 显示全部楼层

我放弃了抢最佳。理由:1.熬夜抢最佳太累 2.有这时间还是赶紧开发程序去,比最佳赚的多多了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 19:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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