Bottom Page

• 0 Vote(s) - 0 Average
• 1
• 2
• 3
• 4
• 5 User input to calculate Area or Radius of Circle DustinKlent Unladen Swallow Posts: 3 Threads: 2 Joined: Oct 2019 Reputation: 0 Likes received: 0 #1 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? ichabod801 Bunny Rabbit Posts: 3,952 Threads: 87 Joined: Sep 2016 Reputation: 236 Likes received: 1194 #2 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 DustinKlent Unladen Swallow Posts: 3 Threads: 2 Joined: Oct 2019 Reputation: 0 Likes received: 0 #3 Nov-10-2019, 06:57 AM Thank you. Gribouillis  Posts: 1,928 Threads: 17 Joined: Jan 2018 Reputation: 174 Likes received: 457 #4 Nov-10-2019, 08:46 AM (This post was last modified: Nov-10-2019, 08:46 AM by Gribouillis. Edited 1 time in total.) 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.lower() if not param in [ 'radius', 'circumference', 'diameter', 'area', 'r', 'c', 'd', 'a']: self.say_invalid_input() continue param = param try: value = float(reply) 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. ichabod801 likes this post « Next Oldest | Next Newest »

Top Page

 Possibly Related Threads... Thread Author Replies Views Last Post Help with calling list from user input farispython 5 152 Nov-03-2019, 03:13 PM Last Post: Gribouillis Find Average of User Input Defined number of Scores DustinKlent 1 109 Oct-25-2019, 12:40 AM Last Post: Larz60+ If Else Statement with User Input CalPark16 1 145 Sep-19-2019, 06:54 PM Last Post: Axel_Erfurt calculate circle sector Bloody_geek 2 172 Sep-11-2019, 08:54 PM Last Post: Larz60+ Creating csv header from user-input list dvanommen 2 233 Aug-26-2019, 08:51 PM Last Post: dvanommen How to keep looping until the user input is valid ? KyawMyo 12 1,219 Jun-10-2019, 02:51 AM Last Post: KyawMyo Server infinite loop input from user tomislav91 1 506 May-23-2019, 02:18 PM Last Post: heiner55 circle node with horizontal line in python graphviz mandana 0 252 May-05-2019, 10:39 AM Last Post: mandana unable to pass a input after changing the user from root to non root using python avinash 3 397 Apr-08-2019, 10:05 AM Last Post: avinash How to use a string method on user input Exsul 2 376 Mar-17-2019, 08:12 PM Last Post: Exsul

Forum Jump:

Users browsing this thread: 1 Guest(s)