Как я могу заставить вход работать с моими параметрами? - PullRequest
0 голосов
/ 30 июня 2019

Я начал заниматься питоном, и моя книга, похоже, мне не помогает.У моего профессора есть программа, которая бомбардирует мой код разными входами, и если какой-либо из входов не работает, то мой код «неправильный».Я потратил много дней на редактирование и совершенно потерян.У меня есть код, работающий, если кто-то ставит и ввод фактического числа.Но где мой код не проходит тест, если input равен «miles_to_laps (26)», он выдает ошибку.

Я попытался изменить ввод на int (input ()), но это не решает проблему.Я прошел через изменение переменных и даже изменение метода ввода, но все еще в растерянности.Я уже пытался связаться с моим учителем, но 6 дней без ответа и 3 дня опоздания, я чувствую, что просто ухожу не туда.

user_miles = int(input())

def miles_to_laps(user_miles):
    x = user_miles
    y = 4
    x2 = x * y
    result = print('%0.2f' % float(x2))
    return result

miles_to_laps(user_miles)

мой код работает для ввода действительных чисел, но мой профессоржелая, чтобы входные данные, такие как miles_to_laps (26) и miles_to_laps (13), создавали одинаковые выходные данные.

Ответы [ 2 ]

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

Для странной функциональности ввода вы можете попробовать:

import re

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
0 голосов
/ 30 июня 2019

Я пытаюсь оставить в стороне весь педантизм, но что это за обучение CS / программированию?

Области проблем:

  • отдельный пользовательский ввод от остального кода
  • отделяет форматирование вывода от вывода функции
  • избыточный код в miles_to_laps

Теперь вот код, чтобы попробовать:

LAPS_PER_MILE = 4

# the only calculation, "pure" function    
def miles_to_laps(miles):
    return LAPS_PER_MILE * miles

# sorting out valid vs invalid input, "interface"
def accept_input(user_input):
    try:
        return float(user_input)
    except ValueError:
        raise ValueError("Cannot process input %s" % user_input)

if __name__ == "__main__":
    # running the program
    laps = miles_to_laps(accept_input(input()))
    print ('%0.2f' % laps)

Надеюсь, это не слишком подавляюще.

Обновление: вторая попытка

MILE = 1609.34 # meters per mile
LAP = 400      # track lap
LAPS_PER_MILE = MILE/LAP

def miles_to_laps(miles):
    return LAPS_PER_MILE * miles

def laps_coerced(laps):
    return '%0.2f' % laps

def accept_input(user_input):
    try:
        return float(user_input)
    except ValueError:
        raise ValueError("Cannot process input %s" % user_input)

def main(user_input_str):
    miles = accept_input(user_input_str)
    laps = miles_to_laps(miles)
    print (laps_coerced(laps))

if __name__ == "__main__":
    main(input())
...