繁体   English   中英

Python迭代列表

[英]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_gradeslist类型,所以说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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM