提问人:Stephen Martinez 提问时间:8/29/2022 最后编辑:AlexanderStephen Martinez 更新时间:8/31/2022 访问量:133
代码说 float 对象不是“float”对象不可迭代
Code says float object not 'float' object is not iterable
问:
我不确定我在这里做错了什么,但出于某种原因,每次我更正代码或尝试让它遍历 CSV 文件时,它都会给我一个不可迭代的浮点对象。如果有人能给我一些关于如何遍历浮点数组的指示,我将不胜感激。
import pickle
from weatherreading import WeatherReading
def valid_temperature(temperature : float):
return -40 < temperature < 85
def valid_pressure(pressure : float):
return 300 < pressure < 1200
def valid_humidity(humidity : float):
return 20 < humidity < 80
def valid_reading(temperature : float, pressure : float, humidity : float):
return valid_temperature(temperature) and valid_pressure(pressure) and valid_humidity(humidity)
def get_readings_from_file(filename : str, skip_first_line : bool) -> list[WeatherReading]:
with open(filename, "r") as file:
# Note that we're stating that the list is a List of WeatherReading instances
all_readings : list[WeatherReading] = []
first_line = True
for line in file:
if skip_first_line and first_line:
first_line = False
continue
split = line.split(",") #split the data at every comma
temperature = float(split[0]) #First column
pressure = float(split[1]) #second column
humidity = float(split[2]) #third column
def max_temperature():
maxTemp = []
for i in temperature:
maxTemp.append(i)
return max(maxTemp)
def min_pressure():
minPress = []
for i in pressure:
minPress.append(float[i])
return min(minPress)
def max_humidity():
maxHum = []
for i in humidity:
maxHum.append(float[i])
return max(maxHum)
if valid_reading(max_temperature(), min_pressure(), max_humidity()):
reading = WeatherReading(max_temperature(), min_pressure(), max_humidity())
all_readings.append(reading)
return all_readings
if __name__ == "__main__":
filename = input("Enter CSV file name: ")
all_readings = get_readings_from_file(filename, True)
# Echo the input to output.
print("Your readings:")
for reading in all_readings:
print(f"\tTemp: {reading.temperature}", end="")
print(f"\tPressure: {reading.pressure}", end="")
print(f"\tHumidity: {reading.humidity}")
pickle_demo = open('pickle_demo.bin', 'wb')
pickle.dump(all_readings, pickle_demo)
pickle_demo.close()
答:
1赞
Alexander
8/29/2022
#1
您可以做的是在将值从 csv 文件行中拆分到它们自己的列表中后收集这些值,然后在收集完这些值后执行计算。
例如:
import pickle
from weatherreading import WeatherReading
def valid_temperature(temperature : float):
return -40 < temperature < 85
def valid_pressure(pressure : float):
return 300 < pressure < 1200
def valid_humidity(humidity : float):
return 20 < humidity < 80
def valid_reading(temperature : float, pressure : float, humidity : float):
return valid_temperature(temperature) and valid_pressure(pressure) and valid_humidity(humidity)
def get_readings_from_file(filename : str, skip_first_line : bool) -> list:
with open(filename, "r") as file:
all_readings = []
temps, pressures, humidities = [], [], []
first_line = True
for line in file:
if skip_first_line and first_line:
first_line = False
continue
# split the line and convert to floats
temp, press, humid = map(float, line.split(","))
temps.append(temp) # append each value to its own
pressures.append(press) # list collection
humidities.append(humid)
maxTemp = max(temps) # max and min values
minPress = min(pressures)
maxHums = max(humidities)
if valid_reading(maxTemp, minPress, maxHums):
reading = WeatherReading(maxTemp, minPress, maxHums)
all_readings.append(reading)
return all_readings
if __name__ == "__main__":
filename = input("Enter CSV file name: ")
all_readings = get_readings_from_file(filename, True)
print("Your readings:")
for reading in all_readings:
print(f"\tTemp: {reading.temperature}", end="")
print(f"\tPressure: {reading.pressure}", end="")
print(f"\tHumidity: {reading.humidity}")
pickle_demo = open('pickle_demo.bin', 'wb')
pickle.dump(all_readings, pickle_demo)
pickle_demo.close()
对函数进行这几处更改,您的脚本应该可以正常工作get_readings_from_file
评论
0赞
Stephen Martinez
8/29/2022
嘿,兄弟,你在编辑它之前拥有它的方式是完美的。
0赞
Alexander
8/29/2022
@StephenMartinez这是一回事......我只是删除了我没有编辑的部分,以便更清楚地看到我编辑了哪些部分......
0赞
Stephen Martinez
8/31/2022
它不起作用,输出是空白的
0赞
Alexander
9/3/2022
@StephenMartinez我把它改回来了
评论
max_temperature
min_pressure
for i in temperature
max