Пересмотрен на предыдущий вопрос: программа кругов до миль - PullRequest
0 голосов
/ 01 июля 2019
import re

user_miles = input()

def miles_to_laps(user_miles):
miles = float(user_miles) * 4
    print('%0.2f'% miles)
    return
miles_to_laps(user_miles)

def parse_function_text(s):
    try:
        return re.search("miles_to_laps\((.+)\)", s)[1]
    except TypeError:
        return None

def accept_input(user_input):
    desugar = parse_function_text(user_input)
    if desugar is not None:
        user_input = desugar    
    try:
        return float(user_input)
    except ValueError:
        raise ValueError("Cannot process input %s" % user_input)

assert accept_input("miles_to_laps(3.5)") == 3.5

Делая это, чтобы показать новый код, который используется для создания программы, допускающей ввод "miles_to_laps (20)", мой код ошибки для этого сейчас

Traceback (most recent call last):
  File "main.py", line 9, in <module>
    miles_to_laps(user_miles)
  File "main.py", line 6, in miles_to_laps
    miles = float(user_miles) * 4
ValueError: could not convert string to float: 'miles_to_laps(20)'

1 Ответ

0 голосов
/ 01 июля 2019

Эта строка кода принимает входные данные, но всегда возвращает строку, поэтому, если вы введете 20 в качестве ответа на этот вход, она будет сохранена в памяти как '20' (строковый ИЛИ str тип )

user_miles = input()

Ваша функция предназначена для выполнения математических операций и, следовательно, ожидает числа (то есть целочисленный тип (int) ИЛИ тип с плавающей запятой (float).

Самый простой способ исправить это - немедленно преобразовать строку в целое число, используя функцию int(), чтобы обернуть функцию input().

user_miles = int(input())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...