《笨办法学Python3》练习39遇到问题求解答

《笨办法学Python3》练习39遇到的问题
这是照着书中ex39.py内容打的代码
# creat a mapping of state to abbreviation
states = {
    "Oregon": 'OR',
    "Florida": 'FL',
    "California": 'CA',
    "New York": 'NY',
    "Michigan": 'MI'
}

# create a basic set of states and some cities in them
cities = {
    'CA': 'San Francisco',
    'MI': 'Detorit',
    'FL': 'Jacksonville'
}

# add some more cities
cities['NY'] = 'New York'
cities['OR'] = 'Portland'

# print out some cities
print('-' * 10)
print("NY State has: ", cities['NY'])
print("OR State has: ", cities['OR'])

# print some states
print('-' * 10)
print("Michigan's abbreviation is: ", states['Florida'])
print("Florida's abbreviation is: ", states['California'])

# do it by using the state then cities dict
print('-' * 10)
print("Michigan has: ", cities[states['Michigan']])
print("Florida has: ", cities[states['Florida']])

# print every state abbreviation
print('-' * 10)
for abbrev, city in list(cities.items()):
    print(f"{states} is abbreviated {abbrev}")

# print every city in state
print('-' * 10)
for abbrev, city in list(cities.items()):
    print(f"{abbrev} has the city {city}")

# now do both at the same time
print('-' * 10)
for state, abbrev in list(states.items()):
    print(f"{state} state is abbreviated {abbrev}")
    print(f"and has city {cities[abbrev]}")

print('-' * 10)
# safely get a abbreviation by state that might not be there
state = states.get('Texas')

if not state:
    print("Sorry, no Texas.")

# get a city with a default value
city = cities.get('TX', 'Does Not Exist')
print(f"THe city for the state 'TX' is: {city}")


在第10-14行得出了与书中内容不同的结果,字典没有被正确调用,为下列语句中粗体斜体部分

NY State has: New York
OR State has: Portland


Michigan's abbreviation is: FL
Florida's abbreviation is: CA


Michigan has: Detorit
Florida has: Jacksonville


{'Oregon': 'OR', 'Florida': 'FL', 'California': 'CA', 'New York': 'NY', 'Michigan': 'MI'} is abbreviated CA
{'Oregon': 'OR', 'Florida': 'FL', 'California': 'CA', 'New York': 'NY', 'Michigan': 'MI'} is abbreviated MI
{'Oregon': 'OR', 'Florida': 'FL', 'California': 'CA', 'New York': 'NY', 'Michigan': 'MI'} is abbreviated FL
{'Oregon': 'OR', 'Florida': 'FL', 'California': 'CA', 'New York': 'NY', 'Michigan': 'MI'} is abbreviated NY
{'Oregon': 'OR', 'Florida': 'FL', 'California': 'CA', 'New York': 'NY', 'Michigan': 'MI'} is abbreviated OR


CA has the city San Francisco
MI has the city Detorit
FL has the city Jacksonville
NY has the city New York
OR has the city Portland


Oregon state is abbreviated OR
and has city Portland
Florida state is abbreviated FL
and has city Jacksonville
California state is abbreviated CA
and has city San Francisco
New York state is abbreviated NY
and has city New York
Michigan state is abbreviated MI
and has city Detorit


Sorry, no Texas.
THe city for the state 'TX' is: Does Not Exist

我试着重打了几遍代码,输出结果没有变化
是不是因为我的python版本是3.11,而作者使用的是Python 3.9的原因?

求解答,不胜感激

第39行 states改成city

代码没问题,这是在教你如何取一个字典的key,如果不存在就返回一个默认值

38行打错了吧,和43行一样的,改成下面就可以了
for abbrev, state in list(states.items()):
print(f"{state} is abbreviated {abbrev}")