当你正在寻找的特定值不在列表中时,如何说些什么

时间:2014-11-10 15:39:26

标签: python python-3.x nested-lists

我正在为这所学校完成这项工作并几乎完成了所有工作,但我错过了一个非常小而关键的作品。

因此,完整的作业是让用户输入学生进入列表的成绩的某些值,然后用户必须能够看到特定主题的平均值或所有成绩的打印版本所有的学生都有一门学科。

我的问题是,当她选择查看该主题的平均值/所有值时,如何告诉用户某个主题没有任何值。 我将在这里展示我已经拥有一些已经具有一些价值的列表,因此没有必要经历将它们放入的整个过程

cijfers = [ [ 12345, 'wiskunde', 8.9], [ 12345,'elnet', 4.0], [12345, 'python', 8.9], [98761, 'wiskunde', 6.5], [98761, 'elnet', 7], [98761, 'python', 4.5], [20945, 'wiskunde', 5],[20945, 'elnet', 6.9], [20945, 'python', 4.5], [65489, 'wiskunde', 3.4], [65489, 'elnet', 6.7], [65489, 'python', 10]]

第一个代表学生编号,第二个代表学科,第三个代表特定学生的成绩。

所以如果我说这是为了给我这个主题的所有成绩" wiskunde"

cijfers = [ [ 12345, 'wiskunde', 8.9], [ 12345,'elnet', 4.0], [12345, 'python', 8.9], [98761, 'wiskunde', 6.5], [98761, 'elnet', 7], [98761, 'python', 4.5], [20945, 'wiskunde', 5],[20945, 'elnet', 6.9], [20945, 'python', 4.5], [65489, 'wiskunde', 3.4], [65489, 'elnet', 6.7], [65489, 'python', 10]]

a = 0
print ('     Tentamencijfers voor: ','Wiskunde', '\n', '========================================')
print ('         studenten# | cijfer')
while (a<len(cijfers)):
    if (cijfers [a][1] == 'wiskunde'):
        print ('          ',cijfers[a][0], '     ',cijfers[a][2])
    a = a + 1

它给出了以下输出:

    Tentamencijfers voor:  Wiskunde             #translates to exam grades for: Math
 ========================================
         studenten# | cijfer
           12345       8.9
           98761       6.5
           20945       5
           65489       3.4

它应该做什么,但是如果没有&#34; wiskunde&#34;所以列表看起来像这样:

cijfers = [  [ 12345,'elnet', 4.0], [12345, 'python', 8.9],  [98761, 'elnet', 7], [98761, 'python', 4.5], [20945, 'elnet', 6.9], [20945, 'python', 4.5],  [65489, 'elnet', 6.7], [65489, 'python', 10]]

它会给我这个输出:

Tentamencijfers voor:  Wiskunde #translates to exam grades for: Math
 ========================================
         studenten# | cijfer

我知道它只是显示了一点点,因为我写了&#34; print&#34;在&#34; while&#34;之前的功能但这不是我的问题。

所以我的问题是我怎样才能让它给我一个简单的&#34;这个特定的主题没有投入的价值&#34;?

3 个答案:

答案 0 :(得分:2)

嗯,我根本不确定这是你想要的,但是有效吗

print ('     Tentamencijfers voor: ','Wiskunde', '\n', '========================================')

lines_studient = []
found = False
for entry in cijfers:
    if (entry[1] == 'wiskunde'):
        lines_studient.append('          '+str(entry[0])+ '     '+str(entry[2]))
        found = True

if not found:
    print ('         None studients')
else:
    print ('         studenten# | cijfer')
    for line in lines_studient:
        print(line)

它使用两个for循环:第一个用于查找是否存在一个元素,第二个用于打印行。

答案 1 :(得分:2)

要严格回答你的问题,我会添加一个计数器并按以下方式更改循环:

count = 0
for i in cijfers:
    if (cijfers i[1] == 'wiskunde'):
        count += 1 # Same as count = count + 1
        print ('          ',i[0], '     ',i[2])

#Out of the loop:
if count == 0:
    print "There's no values put in for this particular subject"

作为数据结构,我认为字典会更好地满足您的需求,使用学生编号作为关键; check them out!

答案 2 :(得分:-2)

试试这个。你不需要在这里使用两个for循环。你可以使用any()方法理解:

cijfers = [ [ 12345, 'wiskunde', 8.9], [ 12345,'elnet', 4.0], [12345, 'python', 8.9], [98761, 'wiskunde', 6.5], [98761, 'elnet', 7], [98761, 'python', 4.5], [20945, 'wiskunde', 5],[20945, 'elnet', 6.9], [20945, 'python', 4.5], [65489, 'wiskunde', 3.4], [65489, 'elnet', 6.7], [65489, 'python', 10]]

a = 0
print '     Tentamencijfers voor: ','Wiskunde', '\n', '========================================'
print '         studenten# | cijfer'

if any("wiskunde" in sublist for sublist in cijfers):
    while (a<len(cijfers)):
        if (cijfers [a][1] == 'wiskunde'):
            print '          ',cijfers[a][0], '     ',cijfers[a][2]
        a = a + 1
else:
    print "There's no values put in for this particular subject"