Python | TypeError:“float”对象不能解释为整数

2024-05-23 19:53:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着创建一个模块化的程序(作为一本书的练习作业之一),它要求用户提供速度(mph)和行驶时间(hrs),然后(使用一个循环)我试图显示车辆在旅程中每小时行驶的距离。在

我正试图以模块化的方式构建我的模块,因此def

问题:调试时,我得到一个TypeError: 'float' object cannot be interpreted as an integer

def userJourneySpeed():
    vehicleSpeed = float(input("Please enter the speed of your vehicle: "))
    return vehicleSpeed

def userJourneyTime():
    hoursTraveled = float(input("Please enter how many hours you traveled: "))
    return hoursTraveled

def printSpec(hoursTraveled, vehicleSpeed):
    print("Hour", "\tDistance Traveled")
    for currentHour in range(1, hoursTraveled + 1):
        userDistanceTraveled = vehicleSpeed * currentHour
        print(currentHour, "\t", userDistanceTraveled)

def mainProgram():
    vehicleSpeed = userJourneySpeed()
    hoursTraveled = userJourneyTime()
    printSpec(hoursTraveled, vehicleSpeed)
mainProgram()

如果有任何关于我哪里出错的建议,我们将不胜感激!在


Tags: inputreturndef模块化floatprintenterplease
2条回答

hoursTraveled从您的输入转换为float。在

然后在printSpec的range函数中使用它。因为它是一个浮点函数,所以range函数抛出您提供的错误。在

可以通过将hoursrepraveled的输入立即转换为int,或者在range函数的第二个参数中这样做来解决这个问题。在

举个简单的例子:

>>> range(1, 2.0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: range() integer end argument expected, got float.

这个错误源于试图获取浮点的范围。为了避免这种情况,您必须考虑print_spec函数中的浮动。在

以模块化的方式编写程序是非常好的实践。向你致敬。需要记住的是,模块化的一个关键方面是将相似的操作组合在一起。考虑到这一点,在单个函数中收集用户数据是有意义的。这样你的程序就保持了它的模块性,减少了零碎。在

本着鼓励良好实践的精神,记录代码是个好主意。在函数顶部添加docstring来指定预期的参数、retrn类型和函数用途的一般概述是一个很好的实践,它对理解和调试代码有很大帮助。在

您可以参考pep8来获得更多关于python风格的好技巧。在

下面是您的代码与一些小的变化,使它工作如您所愿。 我把Cumulative Distance Traveled这个词包括在打印输出中,因为这是你每小时实际计算的。在

此外,我还包括了用小时处理案件的功能。在

def get_journey_data():
    """(NoneType) -> tuple(float, float)
    Get the speed and duration of travel
    """
    vehicle_speed = float(input("Please enter the average travel speed: "))
    hours_traveled = float(input("Please enter the travel time: "))
    return vehicle_speed, hours_traveled

def print_spec(travel_time, average_speed):
    """(float, float) -> NoneType
    Print the journey table in the following format:
    Current Hour | Distance Traveled
    """
    travel_time_hours = int(travel_time) #get whole hours from 
                                         #travel_time
    travel_time_rem = travel_time % 1 #get fraction of an hour left over
    hline = "\t                      -"
    print("\n\tCurrent Hour\t|\tCumulative Distance Traveled")
    print(hline)
    for current_hour in range(1, travel_time_hours + 1):
        print("\t\t", current_hour, "\t|\t", current_hour * average_speed)
        print(hline)
    if travel_time_rem:
        print("\t\t", travel_time_hours + 1, "\t|\t", 
              travel_time*average_speed)
        print(hline)
    return None



def main_program():
    """(NoneType) -> Nonetype"""
    vehicle_speed, hours_traveled = get_journey_data()
    print_spec(hours_traveled, vehicle_speed)
    return None

相关问题 更多 >