Python迭代列表

时间:2016-10-25 05:20:19

标签: python

a:5:{i:0;s:56:"Unable to Connect to ssl://api.payson.se:443. Error #0: ";i:1;s:2213:" #0 /usr/local/www/apache24/webroot/multistore/lib/Zend/Http/Client.php(1073): Zend_Http_Client_Adapter_Socket->connect('api.payson.se', 443, true) #1 /usr/local/www/apache24/webroot/multistore/app/code/community/Payson/Payson/Helper/Api.php(1181): Zend_Http_Client->request('POST') #2 /usr/local/www/apache24/webroot/multistore/app/code/community/Payson/Payson/Model/Method/Abstract.php(126): Payson_Payson_Helper_Api->PaymentDetails('204103') #3 /usr/local/www/apache24/webroot/multistore/app/code/core/Mage/Sales/Model/Order/Payment.php(1152): Payson_Payson_Model_Method_Abstract->cancel(Object(Mage_Sales_Model_Order_Payment)) #4 /usr/local/www/apache24/webroot/multistore/app/code/core/Mage/Sales/Model/Order/Payment.php(865): Mage_Sales_Model_Order_Payment->_void(true, NULL, 'cancel') #5 /usr/local/www/apache24/webroot/multistore/app/code/core/Mage/Sales/Model/Order.php(1155): Mage_Sales_Model_Order_Payment->cancel() #6 /usr/local/www/apache24/webroot/multistore/app/code/community/Payson/Payson/controllers/CheckoutController.php(62): Mage_Sales_Model_Order->cancel() #7 /usr/local/www/apache24/webroot/multistore/app/code/community/Payson/Payson/controllers/CheckoutController.php(92): Payson_Payson_CheckoutController->cancelOrder('Unable to Conne...') #8 /usr/local/www/apache24/webroot/multistore/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Payson_Payson_CheckoutController->redirectAction() #9 /usr/local/www/apache24/webroot/multistore/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('redirect') #10 /usr/local/www/apache24/webroot/multistore/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http)) #11 /usr/local/www/apache24/webroot/multistore/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch() #12 /usr/local/www/apache24/webroot/multistore/app/Mage.php(684): Mage_Core_Model_App->run(Array) #13 /usr/local/www/apache24/webroot/multistore/index.php(83): Mage::run('mystore', 'store') #14 {main}";s:3:"url";s:26:"/payson/checkout/redirect/";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:8:"mystore";} 分配给定列表sum_extra的额外信用额度。完全信用是100,所以100以上的额外信用。对于给定的程序,test_grades为8,因为1 + 0 + 7 + 0为8.给定程序的示例输出: 额外总和:8

原谅我,我是编码的先驱,而且非常糟糕! 这是我的代码(不起作用)请帮忙!:

sum_extra

我的两个循环中哪一个更适合这个问题,我如何编辑它们以使它们变得更好?因为我可以告诉他们不会工作!需要任何帮助!谢谢! :)

5 个答案:

答案 0 :(得分:1)

您的第一个循环将失败,因为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类型,而您不能拥有list < 100。 请参阅L. M&#39的答案。

对于这类问题,for循环会更好,因为您正在迭代元素,没有真正的条件&#39;检查,这将使一个while循环更好地风格化(它们导致相同的输出)。

A&#39; pythonic&#39;方法是使用列表理解:

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 :(得分:1)

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)

答案 2 :(得分:0)

你可以做到

test_grades = [101, 83, 107, 90]

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

除了计数

之外,它与你的for循环非常相似

答案 3 :(得分: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)

答案 4 :(得分: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)