একটি তালিকায় যোগফলগুলি যোগ করুন তবে শূন্যের সম্মুখীন হওয়ার পরে তাদের সাইন পরিবর্তন করুন


9

আমাকে তালিকার সমস্ত নম্বর যোগ করতে হবে। যদি 0 দেখা দেয় তবে আরও 0 অবধি বিয়োগ করা শুরু করুন adding

উদাহরণ স্বরূপ:

[1, 2, 0, 3, 0, 4] -> 1 + 2 - 3 + 4 = 4
[0, 2, 1, 0, 1, 0, 2] -> -2 - 1 + 1 - 2 = -4
[1, 2] -> 1 + 2 = 3
[4, 0, 2, 3] = 4 - 2 - 3 = -1

এটি আমি চেষ্টা করেছি:

sss = 0

for num in numbers:
    if 0 == num:
        sss = -num
    else:
        sss += num
return sss

উত্তর:


17

তালিকার উপাদানটি 0 টি সমান হলে সাইন পরিবর্তন করুন।

result = 0
current_sign = 1
for element in your_list:
    if element == 0:
       current_sign *= -1
    result += current_sign*element

2

এখানে এমন একটি সমাধান রয়েছে যা যখনই তালিকার কোনও মান শূন্য হয় তখনই দুটি অপারেটর (যোগ এবং বিয়োগ) এর মধ্যে চক্র থাকে:

from operator import add, sub
from itertools import cycle

cycler = cycle([add, sub])
current_operator = next(cycler)

result = 0
my_list = [1, 2, 0, 3, 0, 4]

for number in my_list:
    if number == 0:
        current_op = next(cycler)
    else:
        result = current_operator(result, number)

1

এটা চেষ্টা কর:

d = [1, 2, 0, 3, 0, 4]

sum = 0
sign = False
for i in d:
    if i == 0:
        if sign == False:
            sign = True
        else:
            sign = False
    else:
        if sign == False:
            sum += i
        else:
            sum -= i
print(sum)

আপনার পরিবর্তে যদি আপনার মধ্যে if i == 0:কেবল ধারাটি ব্যবহার করতে পারেন sign = not signRepl.it/repls/RigidCrazyDeletions
জব

1
এছাড়াও বিল্টিন sumফাংশন ওভাররাইট করবেন না !! আমি ধরে নিয়েছি যে কেন ওপি এর sssপরিবর্তে ব্যবহার করেছেsum
জব

1

operatorমডিউল এবং বিটওয়াইজ অবহেলা সহ আরেকটি প্রকরণ ~:

import operator

def accum_on_zero(lst):
    res = 0
    ops, pos = (operator.add, operator.sub), 0
    for i in lst:
        if i == 0:
            pos = ~pos
        res = ops[pos](res, i)
    return res


print(accum_on_zero([1, 2, 0, 3, 0, 4]))     # 4
print(accum_on_zero([0, 2, 1, 0, 1, 0, 2]))  # -4 

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.