[英]Python Iterating over a list
分配sum_extra
与总加分收到定列表test_grades
。 满分是 100,所以任何超过 100 的都是额外的学分。 对于给定的程序, sum_extra
是 8,因为 1 + 0 + 7 + 0 是 8。给定程序的示例输出:Sum extra: 8
请原谅我是编码初学者,而且真的很糟糕! 这是我的代码(不起作用)请帮忙!:
test_grades = [101, 83, 107, 90]
sum_extra = -999 # Initialize 0 before your loop
while test_grades > 100:
test_grades = test_grades - 100
sum_extra = test_grades[0:3]
for test_grades[0:3] > 100:
test_grades = test_grades - 100
sum_extra= test_grade[0] + test_grades[1] + test_grades[2] + test_grades[3]
print('Sum extra:', sum_extra)
我的两个循环中的哪一个更适合这个问题,我该如何编辑它们以使它们变得更好? 因为我可以告诉他们不会工作! 需要任何帮助! 谢谢! :)
你的第一个循环会失败,因为test_grades
是list
类型,所以说while list < 100
是没有意义的。
另一种 while 循环如下所示:
i = 0;
while i < len(test_grades):
if test_grades[i] > 100:
test_grades[i] -= 100
else:
test_grades[i] = 0
print sum(test_grades)
您的第二个循环将再次失败,因为test_grades[0:3]
再次属于list
类型,并且您不能拥有 for list < 100
。 请参阅 L. M 的答案以获取替代方案。
对于此类问题, for
循环会更好,因为您正在迭代元素,没有真正的“条件”要检查,这会使 while 循环在风格上更好(它们会产生相同的输出)。
“pythonic”方法是使用列表理解:
test_grades = [101, 83, 107, 90]
extra_grades = [grade - 100 for grade in test_grades]
print sum(filter(lambda x: x > 0, extra_grades)) #prints 8
user_input = input()
test_grades = list(map(int, user_input.split())) # contains test scores
sum_extra = -999 # Initialize 0 before your loop
sum_extra = 0
count = 0
for num in test_grades:
if num > 100:
sum_extra += num
count += 1
sum_extra = sum_extra - (100 * count)
print('Sum extra:', sum_extra)
你可以做
test_grades = [101, 83, 107, 90]
count = 0
for i in test_grades:
if i-100>0:
count += (i-100)
print count``
除了计数外,这与您的 for 循环非常相似
您应该首先了解数据类型。
在您的代码中,您试图将列表与整数进行比较,这是不可能的。
test_grades[0:3] 也会进行切片,这会给你一个子列表。 所以当你这样做时:
sum_extra = test_grades[0:3]
sum_extra 现在变成了一个列表。 我觉得你希望它保持整数。
现在考虑这一行:
test_grades = test_grades - 100
这一行只是从列表的当前元素中减去 100。 因此,假设当前元素是 83。在这种情况下,您的答案应该是什么?
83-100 = -17 ?
可能不是。 所以你应该先检查这个数字是否大于100,如果是,再减去100。 像这样的东西:
if test_grages[i] > 100:
sum_extra = test_grades[i] -100 # Dont alter the content of test_grades. You may need to use it further in you code.
并且您需要为列表的每个元素循环上述代码行。 所以使用循环:
i=0 # First element is at 0th index.
while i < len(test_grades):
if test_grages[i] > 100:
sum_extra += test_grades[i] -100
i++
现在把这些放在一起:
test_grades = [101, 83, 107, 90]
sum_extra =0
i=0
while i < len(test_grades): #len() method gives you the length.
if test_grages[i] > 100:
sum_extra += test_grades[i] -100
i++
print(sum_extra)
只是你可以做
test_grades = [101, 83, 107, 90]
sum_extra = 0 # Initialize 0 before your loop
#iterate over the values of the list
for i in test_grades:
if i>100:
#add extra to the sum extra
sum_extra=sum_extra+(i-100)
#finally print the extra sum
print('Sum extra:', sum_extra)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.