मैं जो करने की कोशिश कर रहा हूं: स्क्रिप्ट को निष्पादित करते हुए, मुझे दो नंबर टाइप करने होंगे और यह उनकी तुलना करेगा। मैं कुल 3 बार पूछना चाहता हूं। पहली बार मैं १० और ५ टाइप करूंगा, दूसरी बार ५ और १० में और तीसरी बार मैं १० और १० में टाइप करूंगा ताकि तीनों संभावित उत्तर मिल सकें।

पहले कोड के साथ मेरी समस्या है: getnumbers() को Checknumbers() के अंदर बुलाया जा रहा है। मैं फ़ंक्शन और लूप बनाना चाहता हूं और केवल एक समर्पित लूप के अंदर कार्यों को सख्ती से निष्पादित करना चाहता हूं, न कि किसी अन्य फ़ंक्शन के भीतर।

मैं चाहता हूं कि सब कुछ साफ-सुथरा हो और किसी अन्य फ़ंक्शन के अंदर किसी फ़ंक्शन का कोई संदर्भ न हो, मैं किसी भी वैश्विक चर का उपयोग नहीं करना चाहता।

मैंने इसे कक्षा के साथ हल किया लेकिन मुझे सच में यकीन नहीं है कि मैं भाषा को कुचल रहा हूं या यह आम बात है। इसके अलावा मुझे checknumbers() फ़ंक्शन के अंदर वर्ग का संदर्भ देना होगा।

पहला उपाय:

def getnumbers():
    x = input("Enter the X number: ")
    y = input("Enter the Y number: ")
    return x, y

def checknumbers():
    x, y=getnumbers()
    if   x > y:
        print(f'x is larger then y: x is {x} and y is {y}')
    elif y > x:
        print(f"y is larger then x: x is {x} and y is {y}")
    elif y == x:
        print(f"x is equal to y: x is {x} and y is {y}")     
    else:
        print("Dont know mate")


n = 0
while(n < 3):
    checknumbers()
    n += 1

यह वर्ग के साथ संस्करण है:

class ui:
    x = input("Enter the X number: ")
    y = input("Enter the Y number: ")


def checknumbers():
    if   ui.x > ui.y:    
        print(f'x is larger then y: x is {ui.x} and y is {ui.y}')
    elif ui.y > ui.x:
        print(f"y is larger then x: x is {ui.x} and y is {ui.y}")
    elif ui.y == ui.x:
        print(f"x is equal to y: x is {ui.x} and y is {ui.y}")     
    else:
        print("Dont know mate")

n = 0
while(n < 3):
    checknumbers()
    n += 1

आदर्श समाधान, इसलिए दोनों फ़ंक्शन getnumbers() और checknumbers एक दूसरे से स्वतंत्र हैं और उन्हें लूप के अंदर बुलाया जा रहा है, समस्या यह है कि getnumbers() फ़ंक्शन से x और y हैं checknumbers के लिए अज्ञात।

आवश्यकता यह है: मेरे पास मेरे कार्यों के अंदर किसी अन्य फ़ंक्शन का कोई संदर्भ नहीं है, मैं उन्हें संदर्भित किए बिना x और y कैसे पास करूं ?:

def getnumbers():
    x = input("Enter the X number: ")
    y = input("Enter the Y number: ")
    return x, y

def checknumbers():
    if   x > y:
        print(f'x is larger then y: x is {x} and y is {y}')
    elif y > x:
        print(f"y is larger then x: x is {x} and y is {y}")
    elif y == x:
        print(f"x is equal to y: x is {x} and y is {y}")     
    else:
        print("Dont know mate")


n = 0
while(n < 3):
    getnumbers()
    checknumbers()
    n += 1
-1
Barry 29 नवम्बर 2018, 15:02

2 जवाब

यदि आप getnumbers() को checknumbers() के भीतर कॉल नहीं करना चाहते हैं, तो एकमात्र विकल्प जो समझ में आता है, वह है संख्याओं को पैरामीटर के रूप में checknumbers() पर पास करना।

def getnumbers():
    x = int(input("Enter the X number: "))
    y = int(input("Enter the Y number: "))
    return x,y

def checknumbers(x, y):
    if x > y:
        # etc.

...

for _ in range(3):
    x,y = getnumbers()
    checknumbers(x,y)

कम से कम चिंताओं का बेहतर अलगाव है।

1
khelwood 29 नवम्बर 2018, 15:19
  • मुझे पहले समाधान में कुछ भी गलत नहीं दिख रहा है (इस तथ्य को छोड़कर कि getumbers पायथन 3 में तार लौटाता है)। क्लास हर समस्या का समाधान नहीं है

  • मेरे पास मेरे फ़ंक्शन के अंदर किसी अन्य फ़ंक्शन का कोई संदर्भ नहीं है, मैं उन्हें संदर्भित किए बिना x और y कैसे पास करूं?

    इसे संदर्भित किए बिना कुछ पास करना असंभव है। भले ही x और y वैश्विक चर थे (जो आपके वर्तमान डिज़ाइन से बहुत खराब है) उपयोग करने वाले फ़ंक्शन को उन्हें संदर्भित करने की आवश्यकता होगी।

मुझे समझ में नहीं आता कि आप इस धारणा के तहत क्यों हैं कि किसी फ़ंक्शन को किसी अन्य फ़ंक्शन के अंदर कॉल करना खराब या गलत डिज़ाइन है।

0
DeepSpace 29 नवम्बर 2018, 15:15