Python函数多条件Or判断逻辑错误:输入Chicago返回Texas
问题分析与解决方案
嘿,这是Python新手非常容易踩的逻辑坑!你的条件判断写法有误,导致不管传入什么城市名,第一个if分支都会被触发,所以返回了"Texas"。
错误原因
你写的判断条件比如:
if cityName == "dallas" or "austin" or "houston"...
Python会把它解析成:
if (cityName == "dallas") or ("austin") or ("houston")...
而非空字符串在布尔判断中会被视为True,所以只要or后面跟着的是像"austin"这样的非空字符串,这个条件就永远为True——不管cityName是什么,第一个if都会执行,直接返回"Texas"。
两种修正方案
方案1:补全每个判断条件
把每个or后面的部分都补全为cityName == "城市名",确保每个判断都是在比较cityName:
def whatState(cityName): if cityName == "dallas" or cityName == "austin" or cityName == "houston" or cityName == "ft worth" or cityName == "el paso": stateName = "Texas" elif cityName == "sacramento" or cityName == "san francisco" or cityName == "los angeles" or cityName == "san diego": stateName = "California" elif cityName == "miami" or cityName == "west palm beach" or cityName == "orlando" or cityName == "key west" or cityName == "tallahassee": stateName = "Florida" elif cityName == "chicago" or cityName == "naperville" or cityName == "peoria" or cityName == "evanston" or cityName == "rockford": stateName = "Illinois" return stateName
方案2:用in判断(更推荐)
把每个州的城市放到集合里,用cityName in 集合来判断,代码更简洁易读,查找效率也更高:
def whatState(cityName): if cityName in {"dallas", "austin", "houston", "ft worth", "el paso"}: stateName = "Texas" elif cityName in {"sacramento", "san francisco", "los angeles", "san diego"}: stateName = "California" elif cityName in {"miami", "west palm beach", "orlando", "key west", "tallahassee"}: stateName = "Florida" elif cityName in {"chicago", "naperville", "peoria", "evanston", "rockford"}: stateName = "Illinois" # 可选:添加默认分支,避免传入未知城市时报错 else: stateName = "Unknown State" return stateName
额外优化建议
如果后续要添加更多城市和州,建议用字典来存储映射关系,维护起来更方便:
def whatState(cityName): city_to_state = { "dallas": "Texas", "austin": "Texas", "houston": "Texas", "ft worth": "Texas", "el paso": "Texas", "sacramento": "California", "san francisco": "California", "los angeles": "California", "san diego": "California", "miami": "Florida", "west palm beach": "Florida", "orlando": "Florida", "key west": "Florida", "tallahassee": "Florida", "chicago": "Illinois", "naperville": "Illinois", "peoria": "Illinois", "evanston": "Illinois", "rockford": "Illinois" } return city_to_state.get(cityName, "Unknown State")
这样只要维护这个字典就行,不用写一堆if-elif,代码更简洁健壮。
内容的提问来源于stack exchange,提问作者Kristen Norman
相关产品推荐
相关产品推荐

