Updating user input of radius instead of infinitely printing the same radius - python

I'm writing a simple program that takes in some user input and asks the user for a decimal that will be their radius. This is what i have so far:
import math
radius_string = "Radius"
area_string = "Area"
volume_string = "Volume"
#takes in a radius and then calculates the surface area and the surface volume
first_radius = float(input("Input a decimal: "))
s_area = 4*math.pi*pow(first_radius,2)
s_volume = (4/3)*math.pi*pow(first_radius,3)
#aligns the title strings
print("{:<5}{:^10}{:>5}".format(radius_string,area_string,volume_string))
#formats the results of the radius area and volume to two decimal places
final_radius = ('{:.2f}'.format(first_radius))
final_area = ('{:.2f}'.format(s_area))
final_volume = ('{:.2f}'.format(s_volume))
#Trying to show user all the radiuses that they have inputed
while True:
if final_radius and final_area and final_volume == type(float):
final_radius = ('{:.2f}' .format(first_radius))
final_area = ('{:.2f}' .format(s_area))
final_volume = ('{:.2f}' .format(s_volume))
continue
first_radius = float(input("Input a decimal: "))
print("{:<5}{:^10}{:>5}".format(final_radius,final_area,final_volume))
The problem is that it keeps infinitely printing the users radius and its respective surface area and volume. I put a while loop so it could print out only one radius with its surface area and volume, stop after that has happened to ask the new user for a new radius and then print out that radius. The idea i had was to print out every radius the user inputs and sort of storing them like in a table so the user can see the different radiuses that they put in.
Im pretty much a beginner, so there problably is a simple fix but any help would be appreciated, thanks in advance!

The problem seems to be that you don't understand the continue statement. That statement returns to the top of the loop for the next iteration. You have no way to reach the input statement after that.
Simply delete the continue, and you'll see a distinctive change in your operation.
#Trying to show user all the radiuses that they have input
while True:
if final_radius and final_area and final_volume == type(float):
final_radius = ('{:.2f}' .format(first_radius))
final_area = ('{:.2f}' .format(s_area))
final_volume = ('{:.2f}' .format(s_volume))
continue
first_radius = float(input("Input a decimal: "))
There are other problems with your code; Stack Overflow postings should deal with a single issue, so I'll leave the others to your later debugging. You seem to be trying to write the entire program before you test any of your code. This gets you into the difficult situation of trying to find multiple bugs at once.

Related

Printing an error message if a user does not input a certain word

This is kinda of a copy of a question I asked before, but kind of different.
I am a programming beginner (never programmed before) and I have been given a task (for school) to make a program that asks the user for a shape(s), then calculate that shape's volume from the dimensions given by the user. however if the user does not type in "quit", the program should keep asking the user for shapes and keep on calculating the volumes, and when the user do type in "quit", the program is suppose to print out the list of volumes calculated. the three shapes are Cube, pyramid and ellipsoid.
for example, if the user types in cube, cube, pyramid, pyramid, ellipsoid and then quit (along with the necessary dimensions to calculate volume), then the program should print out:
cube volumes: 4, 5
pyramid volumes: 6, 7
ellipsoid volumes: 8
NOTE: these numbers are just for example.
I have succeeded (kinda) in getting the program to notice errors and for the program to repeatedly ask the user for shapes and calculate volumes until "quit" has been entered. However, if the user does not enter cube for example, then the final output should be:
cube volumes: You have not done any calculations for the cube
pyramid volumes: 6, 7
ellipsoid volumes: 8
instead of what I am getting right now, which is:
cube volumes: []
pyramid volumes: 6, 7
ellipsoid volumes: 8
Is there any way to achieve the correct final output?
This is my code (it's probably not that great, but it's the best I can do right now as a beginner and with the stuff we are taught so far):
#A program that allows the user to continuously pick different shapes and calculate their volumes.
#import all functions from the math module.
import math
#allows the user to input the shape they want to calculate the volume of. Then that input is converted to all upper case
#letters so that no matter what the user enters, it will be recognizable by the program.
shape = input("please enter the shapes you want to calculate the volume of from cube, pyramid and ellipsoid, or Quit: ").upper()
#Initializing the lists for the volumes of the three different shapes as empty lists so that it can be filled
#later on.
VolumeListCube = []
VolumeListPyramid =[]
VolumeListEllipsoid = []
#defining the function that will calculate the volume of the cube and then adding them to the empty list VolumeListCube.
def VolumeCube (sideLength):
volume = sideLength**3
#Adding the values to the list
VolumeListCube.append(volume)
#Sorting the values in the created list in ascending order
VolumeListCube.sort()
return;
#defining the function that will calculate the volume of the pyramid and then adding them to the empty list VolumeListPyramid.
def VolumePyramid (baseLength, height):
volume = round((1/3)*(baseLength**2)*height,1)
#Adding the values to the list
VolumeListPyramid.append(volume)
#Sorting the values in the created list in ascending order
VolumeListPyramid.sort()
return;
#defining the function that will calculate the volume of the ellipsoid and then adding them to the empty list VolumeListEllipsoid.
def VolumeEllipsoid (radius1, radius2, radius3):
volume = round((4/3)*math.pi*radius1*radius2*radius3,1)
#Adding the values to the list
VolumeListEllipsoid.append(volume)
#Sorting the values in the created list in ascending order
VolumeListEllipsoid.sort()
return;
#The first while loop here checks if the user immediately inputs "Quit" or not, if they don't, then the next while loop is
#executed, if they do input "Quit", then the program will print the require message.
while shape != "QUIT":
#This is a infinte while loop since true is always true, this allows the error message at the end to be displayed
#and then loop back to the beginning of this loop, so that it can be executed again.
while True:
if shape in ["CUBE","PYRAMID","ELLIPSOID","QUIT"]:
#These if functions will allow the user to input shape parameters depending on what shape the user has chosen, then
#afterwards, another prompt is show for the user to choose another shape and input that shape's parameters. This will
#continue until the user inputs "Quit", then the required message will be printed and the volume results fot all the
#shapes chosen will be displayed in ascending order.
if shape == "CUBE":
sideLength = int(input("Please enter the length of the sides of the cube:"))
#recalling the function that calculates the volume of the cube.
VolumeCube (sideLength)
#lets the user to input another shape they want to calculate the volume of.
shape = input("please enter the shapes you want to calculate the volume of from cube, pyramid and ellipsoid, or Quit: ").upper()
elif shape == "PYRAMID":
baseLength = int(input("Please enter the base length:"))
height = int(input("Please enter the height:"))
# recalling the function that calculates the volume of the pyramid.
VolumePyramid (baseLength, height)
#lets the user to input another shape they want to calculate the volume of.
shape = input("please enter the shapes you want to calculate the volume of from cube, pyramid and ellipsoid, or Quit: ").upper()
elif shape == "ELLIPSOID":
radius1 = int(input("Please enter the first radius:"))
radius2 = int(input("Please enter the second radius:"))
radius3 = int(input("Please enter the third radius:"))
# recalling the function that calculates the volume of the ellipsoid.
VolumeEllipsoid (radius1, radius2, radius3)
#lets the user to input another shape they want to calculate the volume of.
shape = input("please enter the shapes you want to calculate the volume of from cube, pyramid and ellipsoid, or Quit: ").upper()
elif shape == "QUIT":
print ("\nYou have come to the end of the session.\nthe volume calculated for each shape are shown below:\n")
print("The volume of the cube(s) is:", VolumeListCube)
print("The volume of the pyramid(s) is:", VolumeListPyramid)
print("The volume of the ellipsoid(s) is:", VolumeListEllipsoid)
#This exits the program to stop repeated prints that would be caused due to the while loop
exit()
else:
print("Error, please enter a valid shape")
shape = input("please enter the shapes you want to calculate the volume of from cube, pyramid and ellipsoid, or Quit: ").upper()
else:
print ("\nYou have come to the end of the session.\nYou have not performed any volume calculations")
TL;DR
Don't have time to go through your code, but am guessing that you are getting the final results as a list, and so the
cube volumes: []
The quick escape for this would be to use an if statement to check if the size of the list is 0. ie, user did not give that shape.
So, a simple :
print('cube volumes:',end=' ')
#VolumeListCube is holding the final results
if len(VolumeListCube) == 0:
print("You have not done any calculations for the cube")
else :
#print your values as usual
should suffice.

Defined Argument Doesn't seem to Fire

Please mind I am very new to the Python world.
I've been looking for an answer to this online and can't seem to find the right solution, based on my understanding I feel the logic is correct. In the end, though my results are just not there.
I am compiling with Idle.
Point of the solution: Is to take a string value of Kilometers from the console. Then convert it to Miles, then output the string.
Seems simple but debugging the below code over and over again I cannot seem to figure out why after I enter my kilometer number the print with the conversion value never displays.
def main(distanceMile=None):
# Declare and initialize variables
# string called distancekilo
distanceKilo = ""
# distancemile = ""
# conversion = 0.6214
# Introduction
print("Welcome to the distance converter \n")
# Prompt for distance in Kilometers
distanceKilo = input("Enter distance in Kilometers: ")
# Default Argument
def calcConvert(value):
conversion = 0.6214
distanceMile = int(value) * conversion
return distanceMile
calcConvert(distanceKilo)
print("That distance in miles is ", distanceMile)
I would simply like to know where I am going wrong here?
Your code has three main bugs. One is the indentation at the end of calcConvert (return should be indented). Another is that the main definition at the top doesn't seem to do anything. Another is that you want to save calcConvert(distanceKilo) to a variable. This code works:
# Introduction
print("Welcome to the distance converter \n")
# Prompt for distance in Kilometers
distanceKilo = input("Enter distance in Kilometers: ")
# Default Argument
def calcConvert(value):
conversion = 0.6214
distanceMile = int(value) * conversion
return distanceMile
distanceMile = calcConvert(distanceKilo)
print("That distance in miles is ", distanceMile)
If you're new to Python, I would suggest also reading some posts and articles about the way people normally style code (like calc_convert vs calcConvert) in Python :) It's not entirely necessary, but it makes it easier for other Python users to read your code.

What Python3 method can I use to restrict input to only integer in my assignment?

I have a very brief familiarity with coding in general, though a majority of my experience thus far has been with Python. Which is why it's upsetting that I can't seem to figure out how to do this...
I have an assignment in my Python class where I am required to compute the area of a right triangle. I have completed the assignment successfully, but I wanted to take it a step further and restrict the user from inputting anything but an integer as input. I've tried multiple ideas from what I learned on Codecademy, though I can't seem to figure it out. Any help would be greatly appreciated!
Here is the code I've written so far; it works fine for what it is, but I would like to have it return a string that says something like "Please enter a valid number" if the user were to type anything besides a number:
from time import sleep
import math
print("Let\'s find the area of a right triangle!")
sleep(2)
triangleBase = float(input("Enter the base value for the triangle: "))
print("Great!")
triangleHeight = float(input("Enter the height value for the triangle: "))
print("Great!")
sleep(2)
print("Calculating the area of your triangle...")
sleep(2)
def triangleEquation():
areaString = str("The area of your triangle is: ")
triangleArea = float(((triangleBase * triangleHeight) / 2))
print('{}{}'.format(areaString, triangleArea))
triangleEquation()
You are close. You noticed that your code raised an exception. All you need to do is catch that exception and prompt again. In the spirit of "don't repeat yourself", that can be its own function. I cleanup up a couple of other things, like your calculation function using global variables and converting things that don't need converting (e.g. 'foo' is a str, you don't need str('foo')) and got
from time import sleep
import math
def input_as(prompt, _type):
while True:
try:
# better to ask forgiveness... we just try to return the
# right stuff
return _type(input(prompt.strip()))
except ValueError:
print("Invalid. Lets try that again...")
def triangleEquation(base, height):
area = base * height / 2
print('The area of your triangle is: {}'.format(areaString, area))
print("Let\'s find the area of a right triangle!")
sleep(2)
triangleBase = input_as("Enter the base value for the triangle: ", float)
print("Great!")
triangleHeight = input_as("Enter the height value for the triangle: ", float)
print("Great!")
sleep(2)
print("Calculating the area of your triangle...")
sleep(2)
triangleEquation(triangleBase, triangleHeight)
This should get you started. I'll leave the rest for you (if you'd like to also allow floats, hint, hint), since you said you wanted to take it a step further, that way you'll still retain the sense of accomplishment.
def triangleEquation(triangleBase, triangleHeight):
if type(triangleHeight) == int and type(triangleBase) == int:
areaString = "The area of your triangle is: "
triangleArea = float(((triangleBase * triangleHeight) / 2))
return '{}{}'.format(areaString, triangleArea)
else:
return 'Integers only.'
Note: You could also use the is idiom: if type(triangleHeight) is int...

Ask user for an integer input, but also check if their input is a certain string

Hi, my situation is hard to explain, so I might as well explain it in depth.
I am trying to create a program where users can enter (Cartesian) coordinates of the points of a shape. Then, the program uses a vector (entered by the user) to translate the shape using its coordinates. Hopefully you understand what I'm saying. If you don't know the process/rule for translating shapes using their coordinates, you probably can't help me much because it will help if you understand what I'm trying to do.
The process starts like this:
I ask the user how many points make up their shape (what type of polygon they are translating).
Then I ask them to enter the x,y coordinates for each point. Here's the beginning code and the code for one point-saving procedure:
print('View saved points with "points".')
print()
print("Number of points:")
inputX = int(input())
if inputX < 3:
print("Invalid.")
if inputX > 5:
print("Invalid.")
print("Input points: x,y")
inputZero = input()
split = inputZero.split(",")
xZero,yZero = split[0],split[1]
print("("+xZero+","+yZero+") saved. Input another point.")
Now, for each point-saving section, I want the user to also, instead of entering a point's coordinates, be able to input a string like "points" and it will print all of the points saved. The problem is, I don't know how I can have integers act as coordinates for the points and have a string like "points" act like a string I can use an if statement like this (inputZero is the input for point coordinates in one of those point-saving sections):
if inputZero == "points":
print("#All of the points previously entered")
Every response is appreciated,
Thanks
All that you need is a simple if/else block, and maybe a try to make sure you get valid numbers.
...
points = []
while True:
print("Input points: x,y")
inputZero = input()
if inputZero == "points":
print(previousPoints)
else:
try:
split = inputZero.split(",")
xZero,yZero = int(split[0]),int(split[1])
print("({0}, {1}) saved. Input another point.".format(xZero, yZero))
points.append((xZero, yZero))
except ValueError or IndexError:
print("Invalid input!")
Not sure if I understood properly. Is this what you want?
import sys
points = []
while True:
print("Input points: x,y")
inputZero = raw_input()
if inputZero == 'points':
print "Entered points: %s" % points
elif inputZero == 'quit':
print "Bye!"
sys.exit(0)
else:
split = inputZero.split(",")
xZero,yZero = int(split[0]),int(split[1])
points.append((xZero, yZero))
print("(%s, %s) saved. Input another point." % (xZero, yZero))
Type quit to finish. Also, note I'm using raw_input instead of input to avoid eval the input (see this question and its answers)

how to write program for area for circle and square

Write a program that asks the user to enter two values: an integer choice and a real number x. If choice is 1, compute and display the area of a circle of radius x. If choice is 2, compute and display the are of a square with sides of length x. If choice is neither 1, nor 2, will display the text Invalid choice.
so im guessing this is broken into 2 parts? all i can think of so far is having a choice(input) function and defining what pi and area and so on are. but i keep getting errors. what am i doing wrong?
choice = input ('Enter Choice:')
choice_1 = int (choice)
if (choice_1==1): radius = (int)
print('Enter x:',radius)
pi = 3.14159
area = ( radius ** 2 ) * pi
print ( 'The Area is=' , area )
choice_2= (choice)
if (choice_2==2): side= (int)
print('enter X:' side*side)
While you've got the actual calculations right, there are some problems with how you're receiving input. You start out well:
choice = input ('Enter Choice:')
But then do this:
choice_1 = int (choice)
That's not wrong, but there's no need for a new variable name. You could just as well do choice = int(choice).
You then go on:
if (choice_1==1): radius = (int)
The if statement is okay (although the parentheses are not necessary), but the body of it is a bit strange. I don't know what you're trying to achieve there, but it's almost certainly not doing what you want. What you'll probably want to do is remove the current body of the if statement and indent a bunch of the following code.
print('Enter x:',radius)
This will print out Enter x: followed by radius, which you just set to the int function (probably not what you want. Instead, you probably want to prompt the user and receive their input:
radius = input('Enter x: ')
And then convert it to a float:
radius = float(radius)
Back to your code. pi = 3.14159 is valid and correct, but there is no need to assign pi in your own code; just import it from math:
from math import pi
Then you've got these two lines:
area = ( radius ** 2 ) * pi
print ( 'The Area is=' , area )
You've got no problem there; those should work fine. Your code continues:
choice_2= (choice)
This is not useful. Just use choice; you don't need a new variable.
if (choice_2==2): side= (int)
The if statement, here, too, is correct, but its body, too, is senseless. Again, you probably want to prompt the user to enter something and then convert it to a float.
At the end, you've got:
print('enter X:' side*side)
First of all, you're missing a comma. Second of all, you're outputting the area after enter X:, which doesn't make that much sense. That said, you did get the calculation right.
There are a number of issues with the code. Here is a working example of what I believe you want to accomplish:
#!/usr/bin/python
pi = 3.14159265
choice = input('Enter Choice [1 or 2]:')
choice = int (choice)
if choice == 1:
radius = input('Enter x:')
area = ( radius ** 2 ) * pi
print 'The Area is=', area
if choice == 2:
side = input('Enter x:')
area = side ** 2
print 'The Area is=', area
There are a number of problems with the code you've presented: indentation, variables, inputs, and outputs. There are a number of improvements that can be made as well (such as removing duplicate statements). The code I've given above will accomplish what you want to do. So let's go through the errors to get a deeper understanding.
Indentation
First, Python programs should be indented properly. This means that lines following a conditional logic (such as an if statement) should be tabbed. The indentation is called a "block" statement. Only those lines that are indented will be evaluated (executed) if the given condition is met (e.g., the user supplied 1 or 2 as a value).
Variables
The choice_1 and choice_2 variables are not necessary. Logistically, you want to tell the reader of your source code that the user's input should be rounded to a whole integer. The extra variables are superfluous -- you can reuse the choice variable.
Inputs
The input function is used to assign the value of whatever the user typed to the variable on the left-hand-side of the expression. Examples:
choice = input ('Enter choice:')
radius = input( 'Enter x:' )
side = input( 'Enter x:' )
These input statements appear on the screen. The user types in a number and the value of that number is put inside the corresponding variable.
Outputs
The print statement is used to display a value on the screen. In your code, you had combined a text string ('Enter x') with a print statement. The computer cannot "know" that 'Enter x' means that the user must type in a value. Just like the computer does not know that 'Barney' is the name of a purple dinosaur.
radius = (int)
This seems to be the main problem.
A few things.
If that is how your script is indented, it's not going to work, period. Indenting is core to python, and you need to understand that before you'll get anything substantial working.
If the input is an integer, it will be automatically converted using input(). You're only asking for input once, so don't both creating two variables.
choice = input('Enter choice: ')
If should be using an if-elif-else statement here. Use control structures to your advantage:
if choice == 1:
radius = input('Enter radius: ')
print('Area of circle is ', (radius ** 2) * 3.14159)
elif choice == 2:
side = input('Enter side length: ')
print('Areas of square is ', side*side)
That's simplified, what you're trying to acheive.
Other than that, you shouldn't do side= (int) or radius = (int). You're assigning a type of int to the variable, when you should be getting a value from input. You'll find very quickly that there are no operators that support multiplication of type and type.

Categories

Resources