鱼C论坛

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

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

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

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

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

x
代码输出了不干净的东西!!!
class Student:
    def __init__(self,student_name,student_number) :
        self.name=student_name
        self.number = student_number
        self.grade = {"语文":0,"数学":0,"英语":0}
    
    def set_grade(self,course,grade):
        if course in self.grade:
            self.grade[course] = grade
    
    def print_grade(self):
        print(f"{self.name}({self.number}):")
        for course in self.grade:
            print(f"{course}:{self.grade[course]}")
        print("你的成绩单已送达!")    
        

xiaoming = Student("xiaoming",20222286)
zeng  = Student("zeng",20222222)

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

print(xiaoming.print_grade())
print(f"{xiaoming.name}     ({xiaoming.number})")

但是终端输出了个None,不太懂啊老铁们
xiaoming(20222286):
语文:90
数学:80
英语:82
你的成绩单已送达!
None
xiaoming     (20222286)

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

使用道具 举报

发表于 2023-7-1 15:38:58 | 显示全部楼层    本楼为最佳答案   
在代码中,print(xiaoming.print_grade())这一行的输出结果是None。这是因为print_grade()方法没有返回任何值,所以默认返回None。因此,当调用print(xiaoming.print_grade())时,会先打印出xiaoming(20222286)的成绩信息,然后打印出None。
想知道小甲鱼最近在做啥?请访问 -> 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
# 其他代码省略...

xiaoming.print_grade()
print(f"{xiaoming.name}     ({xiaoming.number})")
这样,你就不会再看到终端输出中的 None。


修改后的代码如下:

python
class Student:
    def __init__(self, student_name, student_number):
        self.name = student_name
        self.number = student_number
        self.grade = {"语文": 0, "数学": 0, "英语": 0}
   
    def set_grade(self, course, grade):
        if course in self.grade:
            self.grade[course] = grade
   
    def print_grade(self):
        print(f"{self.name}({self.number}):")
        for course in self.grade:
            print(f"{course}:{self.grade[course]}")
        print("你的成绩单已送达!")   
        

xiaoming = Student("xiaoming", 20222286)
zeng = Student("zeng", 20222222)

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

xiaoming.print_grade()
print(f"{xiaoming.name}     ({xiaoming.number})")
这样,你将不再看到终端输出中的 None。

点评

我很赞同!: 5.0
我很赞同!: 5
适合中国宝宝体质的回答!爆赞  发表于 2023-7-1 15:47
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

wc,刚编辑完就发现最佳没了
想知道小甲鱼最近在做啥?请访问 -> 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的话
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

嘤嘤嘤sorry哥哥,先看到一楼回复也看懂了就最佳了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不幸运的总是我……https://fishc.com.cn/thread-230298-1-1.html
想知道小甲鱼最近在做啥?请访问 -> 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。代码如下所示:
class Student:
    def __init__(self, student_name, student_number):
        self.name = student_name
        self.number = student_number
        self.grade = {"语文": 0, "数学": 0, "英语": 0}

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

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


xiaoming = Student("xiaoming", 20222286)
zeng = Student("zeng", 20222222)

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

print(xiaoming.print_grade())
print(f"{xiaoming.name} ({xiaoming.number})")
这样修改后,终端将只打印出以下内容,而不会显示None:
xiaoming(20222286):
语文: 90
数学: 80
英语: 82
你的成绩单已送达!
xiaoming (20222286)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

积点功德吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我放弃了抢最佳。理由:1.熬夜抢最佳太累 2.有这时间还是赶紧开发程序去,比最佳赚的多多了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 15:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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