Quando si utilizza un'istruzione if con o in Python, esiste un modo per identificare quale variabile ha attivato esattamente l'istruzione?

-2

Se ho qualcosa di simile:

var1 = input("Enter a number lower than or equal to 100")
var2 = input("Enter a number greater than or equal to 1.")
if var1 > 100 or var2 < 1:
    print("Wrong.")

Come faccio a capire se è stato var1 o var2 a causare la stampa errata del programma, senza usare un'altra istruzione if in questo modo:

if var1 > 100 or var2 < 1:
    if var1 > 100:
        print("Wrong.")
    if var2 < 1:
        print("Wrong.")
    
posta Null_Error 09.04.2016 - 19:54
fonte

2 risposte

3

Hai solo bisogno di due istruzioni if (o per il tuo caso specifico una if e una elif ) come la seguente:

if var1 > 100:
    print("Wrong.")
elif var2 < 1:
    print("Wrong.")

Nel codice precedente, se var1 è maggiore di 100, viene stampata la prima stringa "Wrong" e la seconda istruzione if non viene eseguita (a causa dell'istruzione "else if" elif ). Se var1 è minore o uguale a 100 e var2 minore 1, viene eseguita la seconda istruzione di stampa.

    
risposta data 09.04.2016 - 20:58
fonte
0

I linguaggi di programmazione quasi universalmente non ti consentono di farlo.

In realtà il concetto di una variabile che "innesca" l'istruzione if è un'astrazione che non è affatto supportata dal linguaggio. L'istruzione if non è attivata da var1var2 . È "attivato" dall'espressione var1 > 100 or var2 < 1 .

Potresti farcela con:

var1Triggered = (var1 > 100)
var2Triggered = (var2 < 1)
if var1Triggered or var2Triggered:
    ...

potresti anche giocare con qualcosa del tipo:

trigger = None
if var1 > 100:
    trigger = "var1"
elif var2 < 1:
    trigger = "var2"

if trigger is not None:
    print trigger, " is wrong"

Tuttavia, questo fa apparire i motivi per cui è tutt'altro che ideale pensare in questo modo:

  • Che cosa succede se sia var1 e var2 "attivati"? Questo può succedere
  • Che cosa succede se non è chiaro cosa significhi che una variabile si inneschi. Prendi in considerazione un esempio o un esempio: (var1 and not var2) or (not var1 and var2) .

Il caso generale di ciò che vuoi non può essere scritto in nessuna lingua, a causa di questi problemi. Di conseguenza, Python, come altri linguaggi, sceglie di non darti alcuna sintassi speciale per questo. Se si fa realmente quel particolare comportamento, è possibile eseguire l'inserimento di codice in più istruzioni if, come è stato scritto nella domanda.

    
risposta data 09.04.2016 - 20:51
fonte

Leggi altre domande sui tag