我已经创建了一个程序,将收集学生的名字和分数,并将它们添加到字典中,如果学生已经获得了75分以上,它将打印其名称。下面是代码:
n = 2
b = {}
for i in range(n):
x = input('name : ')
y = int(input('marks '))
b[x] = y
for student in b :
if b[student] >= 75:
print('got it ')
有没有什么优雅而又简单的方法可以做到这一点?
5条答案
按热度按时间yk9xbfzb1#
b
是包含学生姓名和分数的字典:假设您有4名学生,他们都有姓名和分数:
您可以:
也可以在单个列表中进行理解:
krcsximq2#
是的,你可以使用三元运算符:它只允许在单行中测试条件,而不是多行if-else,从而使代码更紧凑。您可以解压缩您创建的字典,而不是在循环中使用索引
检查此链接以获取更多信息https://www.geeksforgeeks.org/ternary-operator-in-python/
zhte4eai3#
您只需在第一个
for
循环中添加一行代码:如果您想存储仅个成绩超过75分的学生的分数,只需更改代码即可:
我已经把它减少到只有一个循环。它很短很简单,但是如果你想使用一行程序,看看其他的答案。
要查找获得75分以上的学生人数,只需创建一个变量并在循环中更新它:
这里,
m75
是存储有多少学生的分数超过75分的变量。注:如果复制第三个代码块(使用
m75
变量),不要忘了修改b[x] = y
行的位置,如果要 * 只 * 存储75分以上的学生的分数,就不需要修改,但是如果要存储所有的分数,复制第一个代码块,创建m75
变量并将其赋值为0
,然后添加第三个代码块中的if
。ufj5ltwl4#
你可以使用字典解析来编写如下代码:
关于打印:
或者将其合并到一个列表解析中(不推荐,因为用上面的方法更容易阅读)
这意味着你可以把它写成
或者
现在@Maciej Dałek说得很有道理,当前的方法不允许同时传入多个标记,但是,如果我们首先修改
marks
字典,这个问题可以很容易地得到解决。这段代码不只是接受一个单独的Marks输入,而是允许用户输入类似Marks的内容:然后,所有分数将经由
map
函数(即{"Joe": [1, 54, 99, 24]}
)作为整数存储在字典内。现在,我们可以为每个人输入多个分数。现在,只需对printing语句稍作修改,我们就可以接受多个分数值。
next()
方法返回生成器序列中的下一项,生成器序列检查是否有高于minimum_marks
的分数,如果有,则打印其名称。因此,总而言之,如果
marks
只有一个输入,则可以使用上面的代码;否则,可以使用下面的代码:lqfhib0f5#
**首先,如果您传递了多个标记,
y = int(input('marks '))
将不起作用。**我建议您决定是否使用,
或空格作为分隔符进行传递,并按以下方式更改第一个循环:如果你想指定哪个学生的分数超过75分,稍后稍微修改一下第二个循环: