【问题标题】:create student database in python在python中创建学生数据库
【发布时间】:2017-02-28 09:10:04
【问题描述】:

我是 python 的初学者。我在 python 中为学生创建了一个数据库。我无法获得 dict 中所有迭代的输出。

我的源代码:-

n = int(raw_input("Please enter number of students:"))

student_data = ['stud_name', 'stud_rollno', 'mark1', 'mark2','mark3','total', 'average'] for i in range(0,n):

    stud_name=raw_input('Enter the name of student: ')
    print stud_name


    stud_rollno=input('Enter the roll number of student: ')
    print stud_rollno


    mark1=input('Enter the marks in subject 1: ')
    print mark1

    mark2=input('Enter the marks in subject 2: ')
    print mark2

    mark3=input('Enter the marks in subject 3: ')
    print mark3

    total=(mark1+mark2+mark3)
    print"Total is: ", total

    average=total/3
    print "Average is :", average

dict = {'Name': stud_name, 'Rollno':stud_rollno, 'Mark1':mark1, 'Mark2':mark2,'Mark3':mark3, 'Total':total, 'Average':average} print "dict['Name']: ", dict['Name'] print "dict['Rollno']: ", dict['Rollno'] print "dict['Mark1']: ", dict['Mark1'] print "dict['Mark2']: ", dict['Mark2'] print "dict['Mark3']: ", dict['Mark3'] print "dict['Total']: ", dict['Total'] print "dict['Average']: ", dict['Average']

如果我没有给学生 2 个,我只会得到第二个数据库的字典,而不是第一个数据库。

我得到的输出

Please enter number of students:2
Enter the name of student: a
a
Enter the roll number of student:1
1
Enter the marks in subject 1:1
1
Enter the marks in subject 2:1
1
Enter the marks in subject 3:1
1
Total is:3
Average is :1
Enter the name of student:b
b
Enter the roll number of student:2
2
Enter the marks in subject 1:2
2
Enter the marks in subject 2:2
2
Enter the marks in subject 3:2
2
Total is:6
Average is :2
dict['Name']:b
dict['Rollno']:2
dict['Mark1']:2
dict['Mark2']:2
dict['Mark3']:2
dict['Total']:6
dict['Average']:2

【问题讨论】:

  • 对于每个 i,您都重置了 dict 的定义(您不应该将其用作名称,因为它在 Python 中意味着什么)

标签: python python-2.7 list dictionary


【解决方案1】:

您当前的代码会为每个i 覆盖dict。此外,您不应使用名称 dict,因为这会导致与 Python 中的数据类型 dict 混淆。

您的一个解决方案是使用字典列表,如下所示:

n = int(raw_input("Please enter number of students:"))

all_students = []

for i in range(0, n):
    stud_name = raw_input('Enter the name of student: ')
    print stud_name

    stud_rollno = input('Enter the roll number of student: ')
    print stud_rollno

    mark1 = input('Enter the marks in subject 1: ')
    print mark1

    mark2 = input('Enter the marks in subject 2: ')
    print mark2

    mark3 = input('Enter the marks in subject 3: ')
    print mark3

    total = (mark1 + mark2 + mark3)
    print"Total is: ", total

    average = total / 3
    print "Average is :", average

    all_students.append({
                            'Name': stud_name,
                            'Rollno': stud_rollno,
                            'Mark1': mark1,
                            'Mark2': mark2,
                            'Mark3': mark3,
                            'Total': total,
                            'Average': average
                            })

for student in all_students:
    print '\n'
    for key, value in student.items():
        print '{0}: {1}'.format(key, value)

通过将每个新学生的回答添加到列表末尾,我们依次跟踪所有学生。最后,我们使用存储在字典中的keysvalues 将它们打印出来。这将打印,您的输入:

Name: a
Rollno: 1
Average: 1
Mark1: 1
Mark2: 1
Mark3: 1
Total: 3


Name: b
Rollno: 2
Average: 2
Mark1: 2
Mark2: 2
Mark3: 2
Total: 6

【讨论】:

  • 如何将它们附加到列表中??
  • 我不知道你的意思是什么——这段代码列出了一个字典。
  • 我需要将它们附加到一个列表中,例如名称 rollno mark1 mark2 mark3 total average # a 11 1 1 1 3 1 # b 22 2 2 2 6 2
  • 我能问一下为什么吗?这种结构应该比基本列表更有用(或者,就您所追求的而言,更可能是嵌套列表)
  • 我的任务是将 dict 转换为列表:p
【解决方案2】:
stud = {}
mrk = []
print("ENTER ZERO NUMBER FOR EXIT !!!!!!!!!!!!")
print("ENTER STUDENT INFORMATION ------------------------ ")
while True :
    rno = int(input("enter roll no.. :: -- "))
    if rno == 0 :
        break
    else:
         for i in range(3):
             print("enter marks  ",i+1," :: --  ",end = " ")
             n = int(input())
             mrk.append(n)
    stud[rno] = mrk
    mrk = []
print("Records are ------ ",stud)
print("\nRollNo\t Mark1\t Mark2\t Mark3\t Total")
tot = 0
for r in stud:
    print(r,"\t",end=" ")
    for m in stud[r]:
        tot = tot + m
        print(m,"\t",end=" ")
    print(tot)
    tot = 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多