##### User input to calculate Area or Radius of Circle
 User input to calculate Area or Radius of Circle DustinKlent Programmer named Tim Posts: 13 Threads: 8 Joined: Oct 2019 Reputation: Nov-10-2019, 03:07 AM I'm writing a practice script to prompt the user to input "Area" or "Radius", then input the area or radius of a circle to calculate the other. I wanted to use functions to do it. Here's what I've got so far: ```import math from math import pi def area(): radius = float(input("To calculate the Area enter the Radius of the circle: ")) area = float(pi)*pow(radius,2) print("The Area is " + str(area)) def radius(): area = float(input("To calculate the Radius enter the Area of the circle: "))/pi radius = str(math.sqrt(area)) print("The Radius is " + radius) choice = {'Radius': radius, 'Area': area} action = input("Calculate Area or Radius? ") action = action.capitalize() choice[action]()```Is there a superior way to do this? Are there any lines I can cut or condense? Reply ichabod801 Bunny Rabbit Posts: 4,231 Threads: 97 Joined: Sep 2016 Reputation: Nov-10-2019, 03:55 AM Superior would be functions with parameters and return values, which are far more versatile. I also like if __name__ blocks. There are very often lines to cut, but that doesn't mean you want to cut them. You could do: ```import math def area(radius): return math.pi * radius ** 2 def radius(area): return math.sqrt(area / math.pi) if __name__ == '__main__': choices = {'Radius': (radius, 'Radius', 'Area'), 'Area': (area, 'Area', 'Radius')} action, calculate, given = choices[input("Calculate Area or Radius? ").capitalize()] result = action(float(input('To calculate the {}, input the {}: '.format(calculate, given)))) print('The {} is {:.2f}.'.format(calculate, result))```But that is perhaps excessive. Craig "Ichabod" O'Brien - xenomind.com I wish you happiness. Recommended Tutorials: BBCode, functions, classes, text adventures Reply DustinKlent Programmer named Tim Posts: 13 Threads: 8 Joined: Oct 2019 Reputation: Nov-10-2019, 06:57 AM Thank you. Reply Posts: 3,291 Threads: 45 Joined: Jan 2018 Reputation: Nov-10-2019, 08:46 AM (This post was last modified: Nov-10-2019, 08:46 AM by Gribouillis.) Here is a variation on the same concept. It is longer but there a richer parsing of user input and an extended functionality ```from math import pi, sqrt class Interaction: def ask_parameter(self): prompt = """\ Please enter one of the circle's parameter. You may enter "radius " or "circumference " or "diameter " or "area ". You may also use r, c, d, a to abbreviate these words. Your choice: """ while True: reply = input(prompt).strip().split() if len(reply) != 2: self.say_invalid_input() continue param = reply[0].lower() if not param in [ 'radius', 'circumference', 'diameter', 'area', 'r', 'c', 'd', 'a']: self.say_invalid_input() continue param = param[0] try: value = float(reply[1]) except ValueError: self.say_invalid_input() continue else: if value < 0: print('ERROR: value must be non negative, try again.') continue if param == 'd': self.r = value / 2 elif param == 'a': self.r = sqrt(value / pi) elif param == 'c': self.r = value / (2 * pi) else: self.r = value return def display_results(self): print("""\ area = {a} circumference = {c} diameter = {d} radius = {r}""".format( r = repr(self.r), a = repr(pi * self.r ** 2), c = repr(self.r * 2 * pi), d = repr(self.r * 2) )) def say_invalid_input(self): print('ERROR: invalid input, try again.') def run(self): self.ask_parameter() self.display_results() if __name__ == '__main__': Interaction().run()```Example in a console ``````Output:λ python3 paillasse/circle.py Please enter one of the circle's parameter. You may enter "radius " or "circumference " or "diameter " or "area ". You may also use r, c, d, a to abbreviate these words. Your choice: diameter 23 area = 415.4756284372501 circumference = 72.25663103256524 diameter = 23.0 radius = 11.5``````Possible improvements could be to enter parameter by an option on the command line instead of prompting user, or on the contrary to start an interactive interpreter allowing the user to analyse several circles in a session for example with module cmd, or use a GUI. Reply

 Possibly Related Threads… Thread Author Replies Views Last Post Program to move a dot towards a circle center plumberpy 10 759 Dec-03-2021, 12:20 PM Last Post: BashBedlam Matplotlib - close multple plots with user input Positron79 0 218 Dec-01-2021, 05:26 PM Last Post: Positron79 Exit function from nested function based on user input Turtle 5 758 Oct-10-2021, 12:55 AM Last Post: Turtle Unable to access the user input value given to daterangepicker klllmmm 1 940 May-26-2021, 09:16 PM Last Post: nilamo Draw circle from GPS coords, and get GPX file? Winfried 0 768 Mar-29-2021, 07:19 PM Last Post: Winfried Problem restricting user input in my rock paper scissors game ashergreen 6 1,604 Mar-25-2021, 03:54 AM Last Post: deanhystad LinkedList by User Input SantiagoPB 5 1,854 Mar-03-2021, 09:54 PM Last Post: deanhystad User input/picking from a list AnunnakiKungFu 2 1,015 Feb-27-2021, 12:10 AM Last Post: BashBedlam Generate Random operator, take user input and validate the user mapypy 4 1,546 Feb-03-2021, 08:41 PM Last Post: nilamo Loop back through loop based on user input, keeping previous changes loop made? hbkpancakes 2 1,471 Nov-21-2020, 02:35 AM Last Post: hbkpancakes

Forum Jump:

### User Panel Messages

##### Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020