質問

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
役に立ちましたか?

解決 2

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))

他のヒント

You replaced verify with a method:

verify = verify.capitalize

This'll never match either 'Yes' or 'No' because it is no longer a string. Call the method instead:

verify = verify.capitalize()

Note that your test for "No" can just be dropped, there is little point in testing for a string then just passing.

Using math.pi instead of PI otherwise works just fine:

>>> import math
>>> math.pi
3.141592653589793
>>> radius, height = 32, 15
>>> 2 * math.pi * radius ** 2 + 2 * math.pi * radius * height
9449.910701998098
>>> math.pi * radius ** 2 * height
48254.86315913922
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top