Python编程:从入门到实践 第6章

294 阅读6分钟

Python编程:从入门到实践 第6章 课后习题

6-1 人:使用一个字典来存储一个熟人的信息,包括名、姓、年龄和居住的城市。该字典应包含键first_name 、last_name 、age 和city 。将存储在该字典中的每项信息都打印出来。

person = {'first_name':'san',
          'last_name': 'zhang',
          'age': 18,
          'city':'nanjing',
          }
print(person)

6-2 喜欢的数字:使用一个字典来存储一些人喜欢的数字。请想出5个人的名字,并将这些名字用作字典中的键;想出每个人喜欢的一个数字,并将这些数字作为值存储在字典中。打印每个人的名字和喜欢的数字。为让这个程序更有趣,通过询问朋友确保数据是真实的。

6-3 词汇表:Python字典可用于模拟现实生活中的字典,但为避免混淆,我们将后者称为词汇表。

  • 想出你在前面学过的5个编程词汇,将它们用作词汇表中的键,并将它们的含义作为值存储在词汇表中。
  • 以整洁的方式打印每个词汇及其含义。为此,你可以先打印词汇,在它后面加上一个冒号,再打印词汇的含义;也可在一行打印词汇,再使用换行符(\n)插入一个空行,然后在下一行以缩进的方式打印词汇的含义。
names = {'string':'字符串',
         'list':'列表',
         'tuple':'元组',
         }

print('string is:', names['string'],'\n'
      'list is:', names['list'],'\n'
      'tuple is:', names['tuple'],'\n'
      )

也可以这样写,即6-4的解答:

names = {'string':'字符串',
         'list':'列表',
         'tuple':'元组',
         }

for key, value in names.items():
    print('\t'+key,'is:',value)

6-4 词汇表2:既然你知道了如何遍历字典,现在请整理你为完成练习6-3而编写的代码,将其中的一系列print 语句替换为一个遍历字典中的键和值的循环。确定该循环正确无误后,再在词汇表中添加5个Python术语。当你再次运行这个程序时,这些新术语及其含义将自动包含在输出中。

names = {'string':'字符串',
         'list':'列表',
         'tuple':'元组',
         }

for key, value in names.items():
    print('\t'+key,'is:',value)

names['print'] = '打印'
names['import'] = '导入'

for key, value in names.items():
    print('\t'+key,'is:',value)

6-5 河流:创建一个字典,在其中存储三条大河流及其流经的国家。其中一个键—值对可能是'nile': 'egypt'。

  • 使用循环为每条河流打印一条消息,如“The Nile runs through Egypt.”。
  • 使用循环将该字典中每条河流的名字都打印出来。
  • 使用循环将该字典包含的每个国家的名字都打印出来。
rivers = {'nile':'egypt','amazon':'brasil', 'yangtze':'china','yellow':'china',
          'mississippi':'usa','mekong':'china','yenisey':'russia','ob':'russia'
          } #china有3个,russia有2个,其他为1个。
          
for river, country in rivers.items():
    print('The', river.title(), 'runs through', country.title()+'.')

for river in sorted(rivers.keys()):
    print('river names are:', river.title())
    
for country in sorted(set((rivers.values()))):
    print('country names are:', country.title())

6-6 调查:在6.3.1节编写的程序favorite_languages.py中执行以下操作。

  • 创建一个应该会接受调查的人员名单,其中有些人已包含在字典中,而其他人未包含在字典中。
  • 遍历这个人员名单,对于已参与调查的人,打印一条消息表示感谢。对于还未参与调查的人,打印一条消息邀请他参与调查。
favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby',
                      'phil': 'python'}

candidates =['jen','zhang','li','phil'] #edward不在

for candidate in candidates:
    if candidate in favorite_languages.keys():
        print(candidate.title(), 'thank you.')
    elif candidate not in favorite_languages.keys():
        print(candidate.title(),'please take the survey.')

6-7 人:在为完成练习6-1而编写的程序中,再创建两个表示人的字典,然后将这三个字典都存储在一个名为people 的列表中。遍历这个列表,将其中每个人的所有信息都打印出来。

people = {'person1':{
            'first_name':'san',
            'last_name': 'zhang',
            'age': 18,
            'city':'nanjing',},       #这个花括号外面的逗号很重要
        'person2':{
            'first_name':'si',
            'last_name':'li',
            'age':19,
            'city':'beijing'},
        'person3':{
            'first_name':'wu',
            'last_name':'wang',
            'age':20,
            'city':'shanghai'},
        'person4':{
            'first_name':'liu',
            'last_name':'sun',
            'age':21,
            'city':'guangzhou'},
        }

for persons, details in people.items():
    print(persons.title(), "'s detail is:")
#    full_name = details['last_name'], details['first_name']        #成了tuple,下面报错
    full_name = details['last_name'] + " " + details['first_name']  #上一句每一个字段都需要把字典加在前面,同时中间的空格不能用,代替,否则full_name成了tuple 
    
    print('Full Name:', full_name.title())
    age = details['age']
    print('Age:', age)
    city =details['city']
    print('City:', city)
    print('\n')

6-8 宠物:创建多个字典,对于每个字典,都使用一个宠物的名称来给它命名;在每个字典中,包含宠物的类型及其主人的名字。将这些字典存储在一个名为pets的列表中,再遍历该列表,并将宠物的所有信息都打印出来。

pet1 = {'first_name':'san','last_name': 'zhang','age': 18,'city':'nanjing'}
pet2 = {'first_name':'si','last_name':'li','age':19,'city':'beijing'}
pet3 = {'first_name':'wu','last_name':'wang','age':20,'city':'shanghai'}
pet4 = {'first_name':'liu','last_name':'sun','age':21,'city':'guangzhou'}

pets = [pet1, pet2, pet3, pet4]
for pet in pets:
    for key, value in pet.items():
        print(key.title()+":" , str(value).title())
    print()

这个字典里面有数字,如果不加str()则报错:AttributeError: 'int' object has no attribute 'title':整数型变量没有.title()属性。

6-9 喜欢的地方:创建一个名为favorite_places 的字典。在这个字典中,将三个人的名字用作键;对于其中的每个人,都存储他喜欢的1~3个地方。为让这个练习更有趣些,可让一些朋友指出他们喜欢的几个地方。遍历这个字典,并将其中每个人的名字及其喜欢的地方打印出来。

favorite_places ={'zhao':['usa','germany','japan'],
                  'qian':['thailand','vietnam'],
                  'sun':['peru']
                  }

for names, places in favorite_places.items():
    if len(places) == 1:
        print('\n' + names.title()+"'s favorite place is:")
        for place in places:
            print('\t' + place.title())
    elif len(places) != 1: 
        print('\n' + names.title()+"'s favorite places are:")
        for place in places:
            print('\t' + place.title())

6-10 喜欢的数字:修改为完成练习6-2而编写的程序,让每个人都可以有多个喜欢的数字,然后将每个人的名字及其喜欢的数字打印出来。

略,和上一题一样。

6-11 城市:创建一个名为cities 的字典,其中将三个城市名用作键;对于每座城市,都创建一个字典,并在其中包含该城市所属的国家、人口约数以及一个有关该城市的事实。在表示每座城市的字典中,应包含country 、population 和fact 等键。将每座城市的名字以及有关它们的信息都打印出来。

和6-7一样。加深一下印象重新再来一次。

cities = {'nanjing':{'country':'china','population':9,'continent':'asia'},
          'new york':{'country':'usa','population':8, 'continent':'north america'},
          'paris':{'country':'france','population':2, 'continent':'europe'},
          'sydney':{'country':'australia','population':5,'continent':'oceania'}
          }

for cities, facts in cities.items():
    print('The city of', cities.title(), 'has following facts:')
    print('\tIt belongs to the country of', facts['country'].title()+'.')
    print('\tIt has a population of' + ' ' + str(facts['population']*1000000) + 
          ' ' + 'people.') #这里可以计算,乘以100万。
    print('\tAnd she locates in the continent of', facts['continent'].title() + '.\n')

6-12 扩展:本章的示例足够复杂,可以以很多方式进行扩展了。请对本章的一个示例进行扩展:添加键和值、调整程序要解决的问题或改进输出的格式。