Hi Andrew,
I really appreciate your precise yet detailed response. No wonder
python has prospered as a language. Thanks to efforts from people like you.
Viraj Sharma
On Sun, Jul 29, 2012 at 4:24 AM, Andrew Lorente <[email protected]>wrote:
> Hi Viraj,
>
> I think your idea #2--putting these methods on an object and making num1/2
> be attributes of it--is the way to go. However, #3 is probably easier than
> you'd guess. Python lets you return a tuple and then break up the returned
> tuple in the calling code. This makes it really easy to define functions
> that return multiple values, without having to write up a big ol' data
> structure to hold those values:
>
> >>> def foo():
> ... return (1, 'a')
> ...
> >>> (val1, val2) = foo()
> >>> val1
> 1
> >>> val2
> 'a'
>
> Here's that notion applied to the relevant bits of your code:
>
> def captureInput():
> # Capture Input - Get the 2 numbers to be checked for connectivity.
> # Remember to do a file based parsing logic for the same.
> * # (the `global` declaration has been removed)*
> Num1 = int(raw_input('First Number: ').rstrip('\n'))
> Num2 = int(raw_input('Second Number: ').rstrip('\n'))
> print "Checking (", num1, ",", num2, ")"
> * return (Num1, Num2)
> *
> def main():
> userResponseFlag = 1
> while userResponseFlag:
> userResponse = raw_input('Do you want to check connectivity between
> 2 given numbers - answer(y/n) only: ')
> if userResponse == 'y':
> * (Num1, Num2) = captureInput()*
> doConnectivityCheck(Num1, Num2)
> storeInput(Num1, Num2)
> elif userResponse == 'n':
> userResponseFlag = 0
> else:
> print "Your input does not confirm to the y/n rule, fix that
> and retry"
> continue
>
>
> However, I think making Num1 and 2 instance attributes will prove to be
> more convenient.
>
> Hope this helps!
>
> Andrew
>
> On Sat, Jul 28, 2012 at 11:28 PM, Viraj Sharma <[email protected]
> >wrote:
>
> > All,
> > I was recently introduced to programming, so this is really a
> beginner's
> > query. Let me know if this is not the right mailing list for that. I will
> > switch it accordingly. Anyway to my query:
> >
> > I have heard that the "Globals are bad for programming" - (
> > http://c2.com/cgi/wiki?GlobalVariablesAreBad). Keeping that in mind, I
> > need
> > to change my solution from below to something more elegant.
> >
> > Can someone let me know the best solution for sharing the values of Num1
> > and Num2 in the example given below. From my perspective 3 options came
> > into my mind when I coded this
> >
> > #1. Was to use Globals (Num1 and Num2) to pass variable values between
> the
> > various methods.
> >
> > #2. Was to create an object and have Num1 and Num2 defined as class
> member
> > variables. In that case, the value of these variables could be used
> across
> > multiple methods defined on that class.
> >
> > #3. Was to use an array/list type data structure, store the Num1 and Num2
> > values in it and then return that structure everytime I want to expose
> the
> > value of Num1 and Num2 between various method calls.
> >
> > It is possible that there maybe more elegant solutions. But I quite
> frankly
> > do not know how to decide. Therefore requesting help ...
> >
> >
> > ===================================================
> > #!/usr/bin/env python
> >
> > __author__ = 'vsharma'
> >
> > Num1 = 0
> > Num2 = 0
> >
> > def captureInput():
> > # Capture Input - Get the 2 numbers to be checked for connectivity.
> > # Remember to do a file based parsing logic for the same.
> > global Num1, Num2
> > Num1 = int(raw_input('First Number: ').rstrip('\n'))
> > Num2 = int(raw_input('Second Number: ').rstrip('\n'))
> > print "Checking (", num1, ",", num2, ")"
> >
> > def doConnectivityCheck(Num1, Num2):
> > # I have removed the actual code for simplicity
> > print "The following 2 numbers are connected (", Num1, ",", Num2, ")"
> >
> > return
> >
> > def storeInput(Num1, Num2):
> > # I have removed the actual code for simplicity
> > print "The following 2 numbers have been stored (", Num1, ",", Num2,
> > ")"
> > return
> >
> > def main():
> > userResponseFlag = 1
> > while userResponseFlag:
> > userResponse = raw_input('Do you want to check connectivity
> between
> > 2 given numbers - answer(y/n) only: ')
> > if userResponse == 'y':
> > captureInput()
> > doConnectivityCheck(Num1, Num2)
> > storeInput(Num1, Num2)
> > elif userResponse == 'n':
> > userResponseFlag = 0
> > else:
> > print "Your input does not confirm to the y/n rule, fix that
> > and retry"
> > continue
> >
> > main()
> > ===================================================
> > -------------- next part --------------
> > An HTML attachment was scrubbed...
> > URL: <
> >
> http://mail.python.org/pipermail/portland/attachments/20120729/460d0530/attachment.html
> > >
> > _______________________________________________
> > Portland mailing list
> > [email protected]
> > http://mail.python.org/mailman/listinfo/portland
> >
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <
> http://mail.python.org/pipermail/portland/attachments/20120729/07a613d9/attachment.html
> >
> _______________________________________________
> Portland mailing list
> [email protected]
> http://mail.python.org/mailman/listinfo/portland
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.python.org/pipermail/portland/attachments/20120729/dbcc85ad/attachment.html>
_______________________________________________
Portland mailing list
[email protected]
http://mail.python.org/mailman/listinfo/portland