Подтвердить что ты не робот

Не удается объединить объекты 'str' и 'float'?

Наш учитель геометрии дал нам задание с просьбой создать пример, когда игрушка использует геометрию в реальной жизни, поэтому я подумал, что было бы здорово создать программу, которая рассчитывает, сколько галлонов воды потребуется для заполнения бассейна определенного объема. форма и с определенными размерами.

Вот программа на данный момент:

import easygui
easygui.msgbox("This program will help determine how many gallons will be needed to fill up a pool based off of the dimensions given.")
pool=easygui.buttonbox("What is the shape of the pool?",
              choices=['square/rectangle','circle'])
if pool=='circle':
height=easygui.enterbox("How deep is the pool?")
radius=easygui.enterbox("What is the distance between the edge of the pool and the center of the pool (radius)?")
easygui.msgbox=("You need "+(3.14*(float(radius)**2) * float(height)) + "gallons of water to fill this pool.")

я продолжаю получать эту ошибку, хотя:

easygui.msgbox=("You need "+(3.14*(float(radius)**2) * float(height))

+ "gallons of water to fill this pool.")
TypeError: cannot concatenate 'str' and 'float' objects

что я делаю?

4b9b3361

Ответ 1

Все плавающие или не строковые типы данных должны быть переданы в строки перед конкатенацией

Это должно работать правильно: (обратите внимание на приведение str для результата умножения)

easygui.msgbox=("You need "+ str(3.14*(float(radius)**2) * float(height)) + "gallons of water to fill this pool.")

прямо из интерпретатора:

>>> radius = 10
>>> height = 10
>>> msg = ("You need "+ str(3.14*(float(radius)**2) * float(height)) + "gallons of water to fill this pool.")
>>> print msg
You need 3140.0gallons of water to fill this pool.

Ответ 2

Есть еще одно решение: вы можете использовать форматирование строки (похоже на язык c)

Таким образом, вы также можете контролировать точность.

radius = 24
height = 15

msg = "You need %f gallons of water to fill this pool." % (3.14 * (float(radius) ** 2) * float(height))
print(msg)

msg = "You need %8.2f gallons of water to fill this pool." % (3.14 * (float(radius) ** 2) * float(height))
print(msg)

без точности

Вам нужно 27129,600000 галлонов воды, чтобы заполнить этот бассейн.

С точностью 8.2

Вам нужно 27129,60 галлона воды, чтобы заполнить этот бассейн.

Ответ 3

использовать форматированную строку (f "")

Ответ 4

В Python3. 6+ вы можете использовать f-строки для форматирования операторов печати.

radius=24.0
height=15.0
print(f"You need {3.14*height*radius**2:8.2f} gallons of water to fill this pool.")