2013-02-27 17 views
5

Sto provando a tradurre uno dei miei progetti Java in Python e ho problemi con una determinata linea. Il codice Java è:++ Operatore in Python

if (++j == 9) 
    return true; 

Quello che credo che questo dovrebbe essere in Python è

if (j += 1) ==9: 
     return True 

... ma sto ottenendo un errore SyntaxError: invalid syntax.

Come posso tradurre questo Java in Python?

risposta

13

Sì, questo è davvero un errore di sintassi.

probabilmente si vuole:

j += 1 
if j == 9: 
    return True 

Il motivo è perché richiede un pitone espressione dopo la parola chiave if (docs), mentre j += 1 è una dichiarazione .


E complimenti, hai appena schivato una pallottola - non tradurlo a:

if (++j == 9): 
    return True 

che è codice Python valido, e sarebbe quasi certamente un bug!

+2

Speriamo che nessuno usi le parentesi in un 'if' simile :) – squiguy

+0

+1 per l'esempio di codice Python valido che non fa ciò che un nuovo programmatore Python potrebbe aspettarsi (sono stato catturato da alcuni anni fa). – Johnsyweb

0

L'operatore ++ non esiste in Python. Invece si potrebbe fare:

j += 1 
if j == 9: 
    return True 
+0

Il ritorno non è equivalente. – wim

+0

Questo non eseguirà alcun codice che sia (eventualmente) dopo il 'if'. –

+0

corretto, l'ho modificato di conseguenza. –

1

Basta suddividerlo in due righe in quanto Python non ha l'operatore ++.

j += 1 
if j == 9: 
    return True 

come Wim ha sottolineato, e if affermazione richiede qualcosa che restituisce un valore True o False. In Java, la porzione ++j verrà valutata prima del confronto. Quindi il nuovo valore j verrà confrontato risultando in un'espressione vera o falsa.

0

L'operatore + = è un operatore di assegnazione. Gli operatori di assegnazione devono essere eseguiti separatamente dall'istruzione condizionale. È necessario eseguire il codice come questo:

j+=1 
if j==9: 
    return True 
0
  • ci sono ++ (o --) operatori in Python.
  • j += 1 non restituisce un valore quindi non c'è nulla da confrontare.

Sembra che si desidera:

if j == 8: 
    return True 

Se j è global (di solito visto di buon occhio), poi:

j += 1 
if j == 9: 
    return True 
0

j += 1 è equivalente a j = j + 1. In realtà non restituisce un valore, ma sovrascrive semplicemente la variabile j. Sto presumendo che si desidera vedere se j + 1 == 9, in modo da sostituire:

if (j += 1) ==9: 
    return True 

Con:

j += 1 
if j == 9: 
    return True