Python yoğunlaştırılmış ıf ifadeleri

0

Soru

Kodumdaki ıf ifadelerini nasıl yoğunlaştıracağımı deniyorum. Üzerinde çalıştığım bir projem var, birkaç" if " ifadesi var (takip etmek için çok fazla) ve onları yoğunlaştırmanın bir yolunu bulmak istiyorum. Açıkçası bu bir for döngüsü içerir, ancak bu döngü içinde ek işlemler eklemekte sorun yaşıyorum.

Sorunumu göstermek için aşağıdaki çalışma örneğini buldum:

num=6

if_options = [num==5, num==6]

for i in range(len(if_options)):
    if if_options[i]:
        print(num)

Koda ek bir parça eklemek istiyorum. Bu ek parça, if deyimi içinde bir işlem yürütecektir. Başarmaya çalıştığım şey için bir çerçeve olarak aşağıdaki çalışmayan örneğe bakın:

num=6

if_options = [num==5, num==6]
operations = [num=num+1, num=num-1]

for i in range(len(if_options)):
    if if_options[i]:
        operations[i]
        print(num)

Her ne sebeple olursa olsun, kodun işlem bölümünü yürütmez ve bir sözdizimi hatasıyla başarısız olur. Bir liste içinde "num=num+1" (tırnak işaretleri olmadan) komutunu bildirmeme izin vermez, ancak bu bildirim komutu yürütmek için gereklidir. Küçük bir şeyi kaçırıyormuşum gibi hissediyorum ve bu kolay bir çözüm olmalı. Teşekkür peşin!!

for-loop function loops python
2021-11-23 22:51:10
4

En iyi cevabı

1

Buradaki sorun, bunların listesini oluşturduğunuzda işlemlerin değerlendirilmesidir. Bunları dizeler olarak yazmak istiyorsunuz ve sonra eval/exec onlar döngüde. Koşulların döngüde de değerlendirilmesini istediğinizi varsayacağım.

num = 6

if_options = ['num==5', 'num==6']
operations = ['num=num+1', 'num=num-1']

for i in range(len(if_options)):
    if eval(if_options[i]):
        exec(operations[i])
        print(num)
2021-11-23 23:04:38

Üzgünüm, düzelttim. eval -e doğru exec işlemleri çalıştırırken.
Marcel

Ancak, bu genellikle istediğiniz şey değildir. Muhtemelen kodu işlevinize yazmalı ve başka bir şekilde yeniden düzenlemelisiniz.
Marcel

Belki biri artırmak için diğeri azaltmak için iki işleve sahip olmak daha iyi bir fikir olacaktır. Bir liste için bir başvuru ekleyin ve onları da işin içinde arayabilirsiniz.
MSH
0

neden fonksiyonlar değil?

def check(inp):
    #you can do some logic and type checking here
    return type(inp)==int # for example, or return arguments to pass to the operatiins

def operation(inp2):
    if inp2: # check if true or not empty, as an example
        #do some operations

# and then you do something like

for x in input_of_things:
    operation( check( x ) )
2021-11-23 23:19:33
0

Lambda ifadelerini de kullanabilirsiniz.

num = 6
if_option_checks = [lambda x: x == 5, lambda x: x == 6]
operations = [lambda x: x + 1, lambda x: x - 1]
for check, operation in zip(if_option_checks, operations):
    if check(num):
        num = operation(num)

Veya sözlükleri ve lambda ifadelerini kullanabilirsiniz

num = 6
if_option_checks = {"add": lambda x: x == 5, "sub": lambda x: x == 6}
operations = {"add": lambda x: x + 1, "sub": lambda x: x - 1}
for key, check in if_option_checks.items():
    if check(num):
        num = operations[key](num)
2021-11-24 00:40:38
0

Belki bir switch deyimi yapısı yardımcı olabilir.

Önce bir anahtar işlevi tanımlayın:

def switch(v): yield lambda *c: v in c

Daha sonra use, anahtar değeri için bir case işlevi veren tek yinelemeli bir for döngüsündedir:

for case in switch(num):

    if case(5):
        num = num + 1
        break

    if case(6):
        num = num - 1
        break

    ...
2021-11-24 02:44:41

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................