2013-02-27 122 views
5

मैं अपनी जावा परियोजनाओं में से एक को पायथन में अनुवाद करने की कोशिश कर रहा हूं और मुझे एक निश्चित रेखा में परेशानी हो रही है। जावा कोड है:++ i ऑपरेटर पायथन

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

क्या मुझे लगता है कि इस अजगर में माना जाता है

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

है ... लेकिन मैं एक त्रुटि SyntaxError: invalid syntax हो रही है।

मैं इस जावा को पायथन में कैसे अनुवाद कर सकता हूं?

उत्तर

13

हां, यह वास्तव में एक वाक्यविन्यास त्रुटि है।

आप शायद चाहते हैं: जबकि j += 1 एक बयान है

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

कारण है, क्योंकि अजगर if कीवर्ड (docs) के बाद एक अभिव्यक्ति की आवश्यकता है।


और बधाई, तो आप सिर्फ एक गोली टाल दिया है - के लिए यह अनुवाद नहीं द्वारा:

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

जो वैध अजगर कोड है, और लगभग निश्चित रूप से एक बग होगा!

+2

उम्मीद है कि कोई भी 'if' में कोष्ठक का उपयोग नहीं करेगा :) – squiguy

+0

+1 मान्य पायथन कोड उदाहरण के लिए +1 जो ऐसा नहीं करता है जो एक नया पायथन प्रोग्रामर उम्मीद कर सकता है (मुझे कुछ साल पहले पकड़ा गया था)। – Johnsyweb

0

++ ऑपरेटर पायथन में मौजूद नहीं है। इसके बजाय आप कर सकता है:

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

वापसी बराबर नहीं है। – wim

+0

यह 'if' के बाद (संभवतः) किसी भी कोड को निष्पादित नहीं करेगा। –

+0

सही, मैंने तदनुसार इसे बदल दिया है। –

1

बस इसे तोड़ने के दो पंक्तियों में के बाद से अजगर ++ ऑपरेटर नहीं है।

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

विम के रूप में बताया गया है, और if बयान कुछ ऐसा है जो एक सही है या गलत मूल्य का मूल्यांकन की आवश्यकता है। जावा में, तुलना से पहले ++j भाग का मूल्यांकन किया जाएगा। फिर नया j मान की तुलना की जाएगी जिसके परिणामस्वरूप एक वास्तविक या झूठी अभिव्यक्ति होगी।

0

+ = ऑपरेटर एक असाइनमेंट ऑपरेटर है। असाइनमेंट ऑपरेटर को आपके सशर्त कथन से अलग से चलाने की आवश्यकता है। आप इस तरह कोड चलाना चाहिए:

j+=1 
if j==9: 
    return True 
0
  • अजगर में कोई ++ (या --) ऑपरेटरों रहे हैं।
  • j += 1 कोई मान नहीं देता है इसलिए तुलना करने के लिए कुछ भी नहीं है।

ऐसा लगता है कि चाहते हैं:

if j == 8: 
    return True 

तो jglobal (आमतौर पर पर सिकोड़ी) होती है तो:

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

j += 1j = j + 1 के बराबर है। यह वास्तव में एक मान वापस नहीं करता है, लेकिन केवल चर j को ओवरराइट करता है। मैं तुम्हें अगर j + 1 == 9 देखना चाहते मानते हुए रही है, इसलिए बदल देते हैं:

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

के साथ:

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