2016-10-25 207 views
-1

指定sum_extra与收到的额外信贷总额给定列表test_grades。完全抵免是100,所以超过100是额外的信用。对于给定的程序,sum_extra是8,因为1 + 0 + 7 + 0是8.给定程序的样本输出: 总和额外:8Python遍历列表

请原谅我我是编码的起步者,真的很糟糕! 这是我的代码(即不工作),请帮助!:

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) 

我哪两个循环的将是这个问题好,我怎么可以编辑他们,让他们变得更好?因为我可以告诉他们不会去工作!任何帮助是想要的!谢谢! :)

+1

'迭代一个list'你尝试[谷歌] (https://www.google.com.au/search?q=Python+Iterating+over+a+list)? –

+1

任何帮助是想通?这里是:'总和(等级 - 100级,如果等级> 100,则在test_grades中)“。尽管你可能会向你的老师解释这个问题。 – Matthias

回答

1

你的第一个循环会失败,因为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类型的,你不能有list < 100。 请参阅L.M的替代方案。

A for循环会更适合这种类型的问题,因为您正在遍历元素,没有真正的“条件”来检查,这会使得while循环的样式更好(它们导致相同的输出)。

A“Python化”的方法是使用列表理解:

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 
+1

或甚至在一行内:'reduce(lambda sum_extra,grade:sum_extra + max(grade-100,0),test_grades,0)' – table

0

你可以做

test_grades = [101, 83, 107, 90] 

count = 0 
for i in test_grades: 
    if i-100>0: 
     count += (i-100) 
print count`` 

这是相当类似于您对除计数循环

0

您应该了解有关数据类型第一。

在你的代码中,你试图将一个列表与一个整数进行比较,这是不可能的。

此外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) 
0

只要你能做到

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)