打印类对象出现了“意想不到代码之外的东西”
{:10_266:} 代码输出了不干净的东西!!!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 = grade
def print_grade(self):
print(f"{self.name}({self.number}):")
for course in self.grade:
print(f"{course}:{self.grade}")
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是咋来的呢??? 在代码中,print(xiaoming.print_grade())这一行的输出结果是None。这是因为print_grade()方法没有返回任何值,所以默认返回None。因此,当调用print(xiaoming.print_grade())时,会先打印出xiaoming(20222286)的成绩信息,然后打印出None。 本帖最后由 歌者文明清理员 于 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 = grade
def print_grade(self):
print(f"{self.name}({self.number}):")
for course in self.grade:
print(f"{course}:{self.grade}")
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。 陶远航 发表于 2023-7-1 15:38
在代码中,print(xiaoming.print_grade())这一行的输出结果是None。这是因为print_grade()方法没有返回任何 ...
wc,刚编辑完就发现最佳没了 陶远航 发表于 2023-7-1 15:38
在代码中,print(xiaoming.print_grade())这一行的输出结果是None。这是因为print_grade()方法没有返回任何 ...
那么xiaoming.print_grade()添加返回return 啥好呢,终端展示不想要这个None的话 歌者文明清理员 发表于 2023-7-1 15:42
wc,刚编辑完就发现最佳没了
嘤嘤嘤sorry哥哥,先看到一楼回复也看懂了就最佳了{:5_92:} zxc++ 发表于 2023-7-1 15:45
嘤嘤嘤sorry哥哥,先看到一楼回复也看懂了就最佳了
不幸运的总是我……https://fishc.com.cn/thread-230298-1-1.html 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 = grade
def print_grade(self):
print(f"{self.name}({self.number}):")
for course in self.grade:
print(f"{course}: {self.grade}")
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) 歌者文明清理员 发表于 2023-7-1 15:45
不幸运的总是我……https://fishc.com.cn/thread-230298-1-1.html
积点功德吧 sfqxx 发表于 2023-7-1 16:32
积点功德吧
我放弃了抢最佳。理由:1.熬夜抢最佳太累 2.有这时间还是赶紧开发程序去,比最佳赚的多多了
页:
[1]