[英]Python - TypeError: 'float' object cannot be interpreted as an integer
[英]Python | TypeError : 'float' object cannot be interpreted as an integer
我试图创建一个模块化程序(作为一本书的一些练习作业之一),它要求用户提供速度(英里/小时)和旅行时间(小时),然后(使用循环)我试图显示距离车辆已行驶,在旅程的每一小时。
我想我的构建模块中的模块化方式,因此所有的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()
关于我哪里出错的任何建议,将不胜感激!
hoursTraveled
从您的输入转换为浮点数。
然后在 printSpec 的 range 函数中使用它。 由于它是一个浮点数,因此 range 函数会抛出您提供的错误。
您可以通过立即将 hoursTraveled 的输入转换为 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
函数中的print_spec
。
以模块化方式编写程序是非常好的做法。 为你点赞。 需要记住的是,模块化的一个关键方面是将相似的操作组合在一起。 考虑到这一点,在单个函数中收集用户数据是有意义的。 通过这种方式,您的程序可以保持其模块化并且不那么分散。
本着鼓励良好实践的精神,记录您的代码是一个好主意。 在函数顶部添加文档字符串以指定预期参数、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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.