Python新手获取城市随机温度报错'int不可迭代'如何解决?
报错原因
你代码里的in运算符是用来判断左侧元素是否属于右侧可迭代对象的成员,而random.randrange()返回的是单个整数,不是可迭代的序列/范围对象,这就是触发TypeError: argument of type 'int' is not iterable的直接原因。另外你初始化的temperature变量完全没有作用,无需提前声明。
还有一个隐藏问题:火奴鲁鲁对应的random.randrange(8790, 6600)写法错误,randrange要求起始值小于结束值,否则会抛出空范围的错误。
修正后代码
import random def get_temperature(city_name: str) -> int: """Gets a random temperature from a possible range for a city.""" if city_name == "Pocatello": return random.randrange(1600, 8790) elif city_name == "Orlando": return random.randrange(5000, 9150) elif city_name == "Salt Lake City": return random.randrange(2600, 8990) elif city_name == "Dallas": return random.randrange(3000, 9490) elif city_name == "Ann Arbor": return random.randrange(1800, 8290) elif city_name == "Phoenix": return random.randrange(4600, 10590) elif city_name == "Anchorage": return random.randrange(1100, 6490) elif city_name == "Honolulu": # 修正randrange参数顺序,要求起始值 < 结束值 return random.randrange(6600, 8790) elif city_name == "Cloud City": # for fun return random.randrange(6000, 7000) else: return random.randrange(1100, 10590) print(get_temperature("Dallas"))
可选优化方案
如果后续要新增城市,不用堆叠大量elif判断,可以用字典存储城市和对应温度区间,代码更简洁易维护:
import random # 提前维护城市与对应温度区间的映射关系 CITY_TEMP_RANGE = { "Pocatello": (1600, 8790), "Orlando": (5000, 9150), "Salt Lake City": (2600, 8990), "Dallas": (3000, 9490), "Ann Arbor": (1800, 8290), "Phoenix": (4600, 10590), "Anchorage": (1100, 6490), "Honolulu": (6600, 8790), "Cloud City": (6000, 7000) } def get_temperature(city_name: str) -> int: """Gets a random temperature from a possible range for a city.""" # 找不到对应城市时返回默认区间 temp_range = CITY_TEMP_RANGE.get(city_name, (1100, 10590)) return random.randrange(*temp_range) print(get_temperature("Dallas"))
内容的提问来源于stack exchange,提问作者Kaylee Dalton
相关产品推荐
相关产品推荐

