Trami 发表于 2018-9-21 22:45:13

python 单链表求助

#

import sys

class student:
    def __init__(self):
      self.name=''
      self.Math=0
      self.Eng=0
      self.no=''
      self.next=None
      
head=student() #建立链表的头部
head.next=None
ptr = head
Msum=Esum=num=student_no=0
select=0

while select !=2:
    print('(1)新增 (2)离开 =>')
    try:
      select=int(input('请输入一个选项: '))
    except ValueError:
         print('输入错误')
         print('请重新输入\n')
    if select ==1:
      new_data=student() #新增下一个元素
      new_data.name=input('姓名:')
      new_data.no=input('学号:')
      new_data.Math=eval(input('数学成绩:'))
      new_data.Eng=eval(input('英语成绩:'))
      ptr.next=new_data #存取指针设置为新元素所在的位置
      new_data.next=None #下一元素的next先设置为None
      ptr=ptr.next
      num=num+1

ptr=head.next #设置存取指针从链表的头部开始
print()
while ptr !=None:
    print('姓名:%s\t学号:%s\t数学成绩:%d\t英语成绩:%d' \
         %(ptr.name,ptr.no,ptr.Math,ptr.Eng))
    Msum=Msum+ptr.Math
    Esum=Esum+ptr.Eng
    student_no=student_no+1
    ptr=ptr.next #将ptr移往下一个元素

if student_no !=0:
    print('---------------------------------------------------------')
    print('本链表中学生的数学平均成绩:%.2f 英语平均成绩:%.2f' \
      %(Msum/student_no,Esum/student_no))

我想问下上述代码为什么不能用python 2 跑,就单链表的实现而言,python3和python2的差别很大吗?求告知,谢谢

claws0n 发表于 2018-9-21 22:53:54

没有第二版,不过第二版的要求输入是 raw_input(), print 不是函数,不用括号

Trami 发表于 2018-9-22 13:21:58

claws0n 发表于 2018-9-21 22:53
没有第二版,不过第二版的要求输入是 raw_input(), print 不是函数,不用括号

但是按照你这样说的方法,修改之python 2.7还是不能运行,我不太明白你说的意思,我比较想知道的就是为什么python 2.7不能运行,因为这个就是按照单链表实现的,还希望能讲解一下,谢谢

claws0n 发表于 2018-9-22 14:00:07

Trami 发表于 2018-9-22 13:21
但是按照你这样说的方法,修改之python 2.7还是不能运行,我不太明白你说的意思,我比较想知道的就是为什 ...

T_T 无法帮你试,但你可以把报错的内容告诉我
py3 修改的是语法(小修)、函数、对象,你的架构没有问题,所以目前判断是这两个函数的调用方法

Trami 发表于 2018-9-22 16:47:28

claws0n 发表于 2018-9-22 14:00
T_T 无法帮你试,但你可以把报错的内容告诉我
py3 修改的是语法(小修)、函数、对象,你的架构没有问题 ...

(1)新增 (2)离开 =>
请输入一个选项: 1
姓名:jh
Traceback (most recent call last):
File "CH03_01.py", line 28, in <module>
    new_data.name=input('姓名:')
File "<string>", line 1, in <module>
NameError: name 'jh' is not defined

当我输入一个名字之后就会出现这样的错误,辛苦帮看下,谢谢

claws0n 发表于 2018-9-22 17:02:31

本帖最后由 claws0n 于 2018-9-22 17:04 编辑

Trami 发表于 2018-9-22 16:47
(1)新增 (2)离开 =>
请输入一个选项: 1
姓名:jh


?不是换回去 raw_input(...) ?
py2 的 input() 是eval(raw_input()), jh 无法被 eval

Trami 发表于 2018-9-22 22:47:13

claws0n 发表于 2018-9-22 17:02
?不是换回去 raw_input(...) ?
py2 的 input() 是eval(raw_input()), jh 无法被 eval

哦哦哦,刚刚发现了错误了,但是现在还是有一个问题,现在就是当按下2的时候,应该会输出所有的成绩和平均分,现在就是按下 2 直接报错
(1)新增 (2)离开 =>
请输入一个选项: 1
姓名:gf
学号:32
数学成绩:44
英语成绩:55
(1)新增 (2)离开 =>
请输入一个选项: 1
姓名:zzz
学号:22
数学成绩:34
英语成绩:34
(1)新增 (2)离开 =>
请输入一个选项: 2
()
Traceback (most recent call last):
File "CH03_01.py", line 41, in <module>
    %(ptr.name,ptr.no,ptr.Math,ptr.Eng))
TypeError: %d format: a number is required, not str

claws0n 发表于 2018-9-22 22:57:55

Trami 发表于 2018-9-22 22:47
哦哦哦,刚刚发现了错误了,但是现在还是有一个问题,现在就是当按下2的时候,应该会输出所有的成绩和平 ...

print '姓名:%s\t学号:%s\t数学成绩:%d\t英语成绩:%d' \ % (ptr.name, ptr.no, ptr.Math, ptr.Eng)#应该是对的

new_data.Math=int(input('数学成绩:')) #换成 int 试试?
new_data.Eng=int(input('英语成绩:'))

Trami 发表于 2018-9-24 21:32:49

claws0n 发表于 2018-9-22 22:57
print '姓名:%s\t学号:%s\t数学成绩:%d\t英语成绩:%d' \ % (ptr.name, ptr.no, ptr.Math, ptr.Eng)#应 ...

可以了,辛苦你了,感谢你的讲解,中秋快乐,谢谢

claws0n 发表于 2018-9-24 22:45:51

Trami 发表于 2018-9-24 21:32
可以了,辛苦你了,感谢你的讲解,中秋快乐,谢谢

中秋节快乐 ^_^
页: [1]
查看完整版本: python 单链表求助