如何使输入与参数一起使用?

时间:2019-06-30 18:51:37

标签: function parameters python-3.6

我已经开始了python类,但我的书似乎对我没有帮助。 我的教授有一个程序,用不同的输入轰炸我的代码,如果任何输入不起作用,则我的代码“错误”。我做了很多天值得编辑的工作,完全不知所措。如果有人输入并输入实际数字,我的代码将起作用。但是我的代码未通过测试的地方是输入是否为“ 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 :(得分:0)

我想把所有的学究都放在一边,但这是什么类型的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())

答案 1 :(得分:0)

对于奇怪的输入功能,您可以尝试:

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