Как привести все переменные, заданные как float - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь преобразовать все переменные, которые были заданы пользователем как float, но мой текущий код для этого не работает, и я не знаю почему.

s = input('Displacement')
u = input('Initial Velocity')
v = input('Final Velocity')
a = input('Acceleration')
t = input('Time')
m = input('Mass')
theta = input('Angle made with the horizontal')

for i in (s, u, v, a, t, m, theta):
    if i != '':
        i = float(i)

Когда я запускаю это и пытаюсь выполнить вычисление для одной из переменных, например

print (s**2)

, я получаю сообщение об ошибке:

TypeError: неподдерживаемый тип (типы) операндов для **или pow (): 'str' и 'int'

Как бы я перебрал каждую переменную и преобразовал ее в число с плавающей точкой, если она имеет значение?

Ответы [ 3 ]

0 голосов
/ 10 июня 2018

Вы можете определить новую функцию, позвольте нам вызывать ее: float_input()

def float_input(text: str) -> float:
    """Makes sure that that user input is of type float"""
    while True:
        try:
            num = float(input(text))
        except ValueError:
            print("You must enter a float.")
        else:
            return num

s = float_input('Displacement')
#...

print(s*2)

Но тогда вы можете даже сделать это так (хранить данные в словаре).Попробуйте !!

def float_input(text: str) -> float:
    """Makes sure that that user input is of type float"""
    while True:
        try:
            num = float(input(text))
        except ValueError:
            print("You must enter a float.")
        else:
            return num

items = [
    'Displacement',
    'Initial Velocity',
    'Final Velocity',
    'Acceleration',
    'Time',
    'Mass',
    'Angle made with the horizontal'
]

# Single line option:
#d = {item: int_input('{}: '.format(item)) for item in items}

# Multi-line option
d = {}
for item in items:
    v = float_input('{}: '.format(item))
    d[item] = v

# Print the stored-data    
print(d)

А затем получите доступ к таким значениям, например:

d.get('Displacement') 
0 голосов
/ 10 июня 2018

Как уже упоминалось, вы должны преобразовать в float в точке ввода данных.Вероятно, это самый чистый и эффективный метод.

Альтернативное решение - сохранить переменные в словаре, а затем использовать словарное понимание для преобразования в float.Это дает преимущество в плане сохранения переменных для конкретной задачи.

В следующем примере показаны оба метода с использованием словаря.Ни один из этих методов не применяет проверку.Вы должны использовать try / except ValueError, чтобы убедиться, что ваши данные действительны в точке входа.

input_dict = {'s': 'Displacement', 'u': 'Initial Velocity', 'v': 'Final Velocity',
              'a': 'Acceleration', 't': 'Time', 'm': 'Mass',
              'theta': 'Angle made with the horizontal'}

var_dict = {}

# direct conversion to float
for k, v in input_dict.items():
    var_dict[k] = float(input(v))

# conversion to float in a separate step
for k, v in input_dict.items():
    var_dict[k] = input(v)

# dictionary comprehension to apply float conversion
var_dict = {k: float(v) if v != '' else v for k, v in var_dict.items()}
0 голосов
/ 10 июня 2018
i = float(i)

не конвертирует s в float(s).i - это только временная переменная, которая изменяется на каждой итерации.Вам необходимо явно преобразовать тип в переменную, например:

s = float(input('Displacement'))

Цикл не требуется.

Конечно, вы можете использовать следующую команду:

s = input('Displacement')
u = input('Initial Velocity')
v = input('Final Velocity')
a = input('Acceleration')
t = input('Time')
m = input('Mass')
theta = input('Angle made with the horizontal')

variables = [s, u, v, a, t, m, theta]

for num, i in enumerate(variables):
     if i != '':
        variables[num] = float(i)

s, u, v, a, t, m, theta = variables
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...