[Python基础] 2-笨办法学Python3小结III

39.字典的使用

小结:字典{}相较于列表[]更加全能一些,可以通过任何东西(不止是数值)找到列表中的元素

字典和列表的不同:列表是一些项的有序排列,字典将一些项对应到另外一些项上的数据结构,有点类似数据库了

字典用在哪里:各种需要通过某个值去查看另一个值的场合

列表用在哪里:专供需要有序排列的数据使用

练习:

# 创建一个州名及其对应简称的字典states
states = {
    'Oregon': 'OR',
    'Florida': 'FL',
    'California': 'CA',
    'New York': 'NY',
    'Michigan': 'MI',
}

# 创建一个州名及其中的城市的字典cities
cities = {
    'CA': 'San Francisco',
    'MI': 'Detroit',
    'FL': 'Jacksonville',
}

# 往cities字典中插入两条新的信息
cities['NY'] = 'New York'
cities['OR'] = 'Portland'

# 从对应的cities字典中查出对应州有的城市
print('-' * 10)
print('NY State has: ',cities['NY'])
print('OR State has: ',cities['OR'])

# 同样的道理在states字典中查出对应州的简称
print('-' * 10)
print('Michigan\'s abbreviation is: ',states['Michigan'])
print('Florida\'s abbreviation is: ',states['Florida'])

# 对州名及对应的简称用for循环做一个罗列,for循环用于list中,所以要将states中的信息转化为list
print('-' * 10)
for state, abbrev in list(states.items()):
    print(f'{state} is abbreviated {abbrev}')

# 同样的对简称和城市用for循环做一个罗列
print('-' * 10)
for abbrev, city in list(cities.items()):
    print(f'{abbrev} has the city {city}')

# 对州名及对应的简称用for循环做一个罗列,查询city时调用cities字典,查询内容为列表对应的州名
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)
for abbrevv, city in list(cities.items()):
    print(f'The {abbrevv} is the abbreviation of {city}')
    print(f'and has city {cities[abbrevv]}')

# .get函数来赋值state,并用判断语句对其存在做出判断
# 此处我加了一条else,根据作者之前写的if最好有一个对应的else,没有也没有影响,只是我强迫症
print('-' * 10)
state = states.get('Texas')
if not state:
    print('Sorry, I can\'t find it.')
else:
    print('Yep, find it!')
# get函数的用法,dict.get(key, default=None)
city = cities.get('TX', 'Does Not Exist')
# print('>>>',city)
print(f'The city for the state \'TX\' is: {city}')


# 感觉合并查询不是很好,有点乱,这边做了个修改,根据用户输入的州名查出对应的信息
state_find = input("Which state do you want to know? > ")
if state_find not in states:
    print('Sorry, I can\'t find it.')
else:
    print('Yep, find it!')
abbrv1 = states[f'{state_find}']
city1 = cities[f'{abbrv1}']
print(f'The state abbreviation is {abbrv1} and city is {city1}.')

40.模块、类、对象

小结:这章节及后面几张主要介绍了OOP(即面向对象编程),看这本书上的不是很明白,所以我找了其他的资料补充一下,用自己理解表达一下,意思反正就是这个意思。与之前不一样的地方在与解决问题思路的转变,之前都是面向过程(根据业务逻辑从上到下写代码——全程包办的思路),但是在之后的开发中显然这样太费力了,于是有了面向对象编程(将数据与函数绑定到一起,进行封装,你的目的则变成了找这么一个对象,减少了重复代码的重写过程——找人代劳),当然这个对象也是要自己写的,如果说是一个买电脑的过程,之前的可能就是你自己选择,出门,买,装这么一系列过程,后面的则是你找一个靠谱的小伙子帮你买。

几个概念:

1)类:模型的图纸(笼统)

2)对象:类生成的实体(具体) # 即类就是创建对象的模板

3)类设计的要点:名称、属性(特征)、方法(行为,也就是之前说的函数) 
# 他们就是这么规定的,记住就行了,类中的方法,也就是之前所说的函数,表达形式也几乎是一样的

1.定义一个类的方式:
class CAT:  #名称,注意后面不要()
    #属性

    #这一部分是所谓的'魔法'函数__xxx___(self),很酷就对了
    #当创建完一个对象后,立马自动调用,下面会讲到
    def __init__(self,defaultColor):
        print('hhhhh')
        print('zzzzz')
    
    #方法,和之前的函数是一样的
    def eat(self):
        print('---eat---')

    def drink(self):
        print('---drink---')

2.创建一个对象并赋值的方法
对象名 = 类()
MIAOMIAO = CAT()

3.通过对象调阅类中的方法(即函数)
对象名.方法()
MIAOMIAO.eat()
MIAOMIAO.drink()

4.给对象添加属性
对象名.新的属性名 = 值
MIAOMIAO.weight = 25

5.获取对象的属性
    1)对象.属性
    print(MIAOMIAO.weight)
    2)在类中新定义一个方法,在方法中使用self.属性
    def Info(self):
        print(self.weight)

6.__init__()的方法
    1)是Python自动调用的方法,调用时间为:创建完对象之后立马调用
    2)不需要开发者调用
    3)这个方法会完成一些默认的事情,比如添加一些属性
    4)class XXXXX:
        def __init__(self, new_a, new_b):
            self.a = new_a
            self.b = new_b

练习:这个练习的话比书上的难一些,不过能把这块内容讲的更清楚

做一个烤地瓜的类,并运行它

示例属性如下:
cookedLevel:数字格式,[0-3)生,[3,5)半生不熟,[5,8)熟了,[8,)焦了,默认为0
cookedString:字符串格式,根据上面的描述地瓜的生熟程度
coodiments:地瓜的配料表,番茄酱,芥末酱等

示例方法:
cook():把地瓜烤一段时间
addCondiments():给地瓜添佐料
__init__():设置默认的属性
__str__():让print的内容符合我们需要的

class SweetPotato():
    # 设置默认值
    def __init__(self):
        self.cookedLevel = 0
        self.cookedString = "生的"
        self.condiments = []
    # 修正打印内容
    def __str__(self):
        # 生熟程度的打印内容
        status = "地瓜的生熟程度为:" + self.cookedString + ","
        # 生熟等级的打印内容
        status += "等级为:" + str(self.cookedLevel) + ","
        # 佐料添加的打印内容
        if len(self.condiments) > 0:
            status += "佐料为: "
            for type in self.condiments:
                status += type + ","
            status = status[:-1]  #去除最后一个末尾的,
        else:
            status += "目前未添加佐料"
        # return什么一会儿打印就出什么
        return status
 
    # 烤地瓜
    def cook(self, time):
        self.cookedLevel += time
        if self.cookedLevel >= 8:
            self.cookedString = "焦了"
        if self.cookedLevel >= 5:
            self.cookedString = "熟了"
        if self.cookedLevel >= 3:
            self.cookedString = "半生不熟"
        else:
            self.cookedString = "生的"
    # 添加佐料
    def addCondiments(self, type):
        self.condiments.append(type)

# 创建一个对象并赋值
DIGUA = SweetPotato()
print(DIGUA)
# 开始烤地瓜,并添加佐料
DIGUA.cook(1)
print(DIGUA)

DIGUA.cook(2)
DIGUA.addCondiments("芥末酱")
print(DIGUA)

DIGUA.cook(2)
DIGUA.addCondiments("番茄酱")
print(DIGUA)

DIGUA.cook(3)
DIGUA.addCondiments("酱油")
print(DIGUA)

DIGUA.cook(2)
DIGUA.addCondiments("辣椒")
print(DIGUA)

结果应该如下图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值