Search code examples
pythoncylindrical

Why does Python suddenly stop if the input is Yes?


I'm trying to make this program in Python which asks for the surface area and volume of a cylinder. At the end, it asks the user if it wants to calculate volume/surface area. However, if they do type in Yes, nothing happens. What is wrong with my code?

Secondly, I tries using math.pi but it didn't work, what should I do.

The code is long so only scroll down to the important parts:

print("Welcome to the volume and surface area cylinder calculator powered by Python!")
response = input("To calculate the volume type in 'vol', to calculate the surface area, type in 'SA': ")
if response=="vol" or response =="SA":
    pass
else:
    print("Please enter a correct statement.")
    response = input("To calculate the volume type in 'vol', to calculate the surface area, type in 'SA': ")

if response=="vol":
    #Below splits 
    radius, height = [float(part) for part in input("What is the radius and height of the cylinder? (e.g. 32, 15): ").split(',')] 
    PI = 3.141592653589793238462643383279502884197169399375105820974944592307816406286 
    volume = PI*radius*radius*height
    decimal_places = int(input("How many decimal places do you want it to?: "))
    print("The volume of the cylinder is {0:.{1}f}cm\u00b3".format(volume, decimal_places))
    verify = input("Do you want to find out the surface area (type in Yes or No): ")
    verify = verify.capitalize
    if verify == "Yes":
       radius, height = [float(part) for part in input("What is the radius and height of the cylinder? (e.g. 32, 15): ").split(',')] 
       PI = 3.141592653589793238462643383279502884197169399375105820974944592307816406286
       SA = int(2)*PI*radius*radius+int(2)+radius*radius*height
       decimal_places = int(input("How many decimal places do you want it to?: "))
       print("The surface area of the cylinder is {0:.{1}f}cm\u00b2".format(SA, decimal_places)) 
    if verify == "No":
        pass

if response =="SA":
    #Below splits 
    radius, height = [float(part) for part in input("What is the radius and height of the cylinder? (e.g. 32, 15): ").split(',')] 
    PI = 3.141592653589793238462643383279502884197169399375105820974944592307816406286
    SA = int(2)*PI*radius*radius+int(2)+radius*radius*height
    decimal_places = int(input("How many decimal places do you want it to?: "))
    print("The surface area of the cylinder is {0:.{1}f}cm\u00b2".format(SA, decimal_places))
    verify = input("Do you want to find out the volume (type in Yes or No): ")
    verify = verify.capitalize
    if verify == "Yes":
        radius, height = [float(part) for part in input("What is the radius and height of the cylinder? (e.g. 32, 15): ").split(',')] 
        PI = 3.141592653589793238462643383279502884197169399375105820974944592307816406286 
        volume = PI*radius*radius*height
        decimal_places = int(input("How many decimal places do you want it to?: "))
        print("The volume of the cylinder is {0:.{1}f}cm\u00b3".format(volume, decimal_places))
    if verify == "No":
        pass

Solution

  • This is my tweaked version. It avoids a lot of repetition.

    from math import pi
    
    print("Welcome to the volume and surface area cylinder calculator powered by Python!")
    response = raw_input("To calculate the volume type in 'vol', to calculate the surface area, type in 'SA': ").lower()
    while response not in ["vol", "sa"]:
        print("Please enter a correct statement.")
        response = raw_input("To calculate the volume type in 'vol', to calculate the surface area, type in 'SA': ").lower()
    
    radius, height = [float(part) for part in raw_input("What is the radius and height of the cylinder? (e.g. 32, 15): ").split(',')] 
    
    r2 = radius ** 2
    SA = 2 * pi * r2 + 2 + pi * radius * height
    volume = pi * r2 * height
    
    decimal_places = int(raw_input("How many decimal places do you want it to?: "))
    
    if response=="vol":
        print("The volume of the cylinder is {0:.{1}f}cm\u00b3".format(volume, decimal_places))
        verify = raw_input("Do you want to find out the surface area (type in Yes or No): ")
        if verify.lower() == "yes":
           print("The surface area of the cylinder is {0:.{1}f}cm\u00b2".format(SA, decimal_places)) 
    
    if response =="sa":
        print("The surface area of the cylinder is {0:.{1}f}cm\u00b2".format(SA, decimal_places))
        verify = raw_input("Do you want to find out the volume (type in Yes or No): ")
        if verify.lower() == "yes":
            print("The volume of the cylinder is {0:.{1}f}cm\u00b3".format(volume, decimal_places))