2018.5.31_Wednsday

“”“

做衔接:

定义谁是谁的属性

这里的实现模拟是”手“上有”牌“

...的...;....'s....设定为属性

方法跟着类走,哪个行为是属于哪个类的行为



"""

小明交换牌


分析需要哪些类:

方案1:人、 牌   人、手、牌


方案1:

人:名字属性,左手牌、右手牌   抓牌、交换牌、展示牌

牌:数值、花色


方案2:

人:名字,左手,右手    交换牌、展示牌

手:扑克     抓拍

牌:对象属性:数值、花色

"""

from random import randint, choice


class Poker(object):  定义扑克牌类

    poker_num = ('A','2','3','4','5','6','7','8','9','10','J','Q','K')  属性可以保存值,列表、元组、字典

    poker_color = ('♥','♠','♣','♦')

    def __init__(self, num='', color=''):  定义类属性

        self.num = num

        self.color = color


class Hand(object):  定义手类

    def __init__(self, poker=None):

        self.poker = poker


    def get_poker(self):   拿牌

        

        # 随机的从一个容器中取出一个元素

        poker.num = choice(Poker.poker_num)

        poker.color = choice(Poker.poker_color)

        poker = Poker()

        self.poker = poker



class Person(object):

    def __init__(self, name='', left_hand=None, right_hand=None):

        self.name = name

        self.left_hand = left_hand

        self.right_hand = right_hand


    def change_poker(self):

        self.left_hand.poker, self.right_hand.poker = self.right_hand.poker, self.left_hand.poker


    def show_poker(self):

        print('左手牌:%s%s' % (self.left_hand.poker.color, self.left_hand.poker.num))

        print('右手牌:%s%s' % (self.right_hand.poker.color, self.right_hand.poker.num))


#  先有小明这个人

p1 = Person('小明')


# 让小明有左手和右手

p1.left_hand = Hand()

p1.right_hand = Hand()


# 抓牌

p1.left_hand.get_poker()

p1.right_hand.get_poker()


# 看牌

print('=======交换前==========')

p1.show_poker()


# 交换牌

p1.change_poker()


# 看牌

print('=======交换后==========')

p1.show_poker()



# a = 10

# b = 20

# a, b = b, a


"""
文件:
每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此。
可以编写这样一个程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器能够显示
这些内容。
要使用文本文件中的信息,首先需要将信息读取到内存中。
"""
with open('foo') as file_object:
    contens = file_object.read()
    print(contens)
    print('--------')

# 使用rstrip()方法去文件换行的空格

# 相对路径:后面加/ -- 正斜杠
# 原始字符串:前面加r

"""
绝对路径通常更长,建议放在变量中
就目前而言,最简单的做法是,要么将数据文件存储在程序所在的目录,要么将其存储在程序文件所在目录下的一个文件夹中。
"""
"""
要以任何方式使用文件--哪怕仅仅是打印其内容,都得先打开文件,这样才能访问它。
"""
"""
使用for循环逐行读取文件:
"""
file_name = 'foo'
with open(file_name) as file_object:
    for line in file_object:
        print(line.rstrip())  #有两个\n 一个来自print(),一个来自文件
print('22222222222222222222222')


"""
存储在列表中:
readlines()从文件中读取每一行,并将其存储在一个列表中。
在with代码块外,我们依然可以使用这个变量
"""
file_name = 'foo'
with open(file_name) as file_object:
    lines = file_object.readlines()  # readlines()方法返回的是一个列表,方便操作
    print(lines)
for line in lines:
    print(line.rstrip())

"""
将文件读取到内存中后,就可以以任何方式使用这些数据了
"""
"""
创建一个字符串,它包含文件中存储的所有数字,且没有任何空格:
"""
file_name = 'foo'
with open(file_name) as file_object:
    ines = file_object.readlines()
pi_string = ''
for line in lines:
    pi_string += line.strip()   #字符串去空格拼接

print('--------------')
print(pi_string)
print(len(pi_string))
# strip()方法去所有空格

"""
读取文本文件时,Python将其中的所有文本都解读为字符串。如果读取的是数字,并要将其作为数值使用,就必须使用函数
int()将其转换为整数,或使用函数float()将其转换为浮点数。
"""
"""
对于可处理的数据量,Python没有任何限制,只要系统的内存足够多,想处理多少数据都可以。
"""
"""
检查文件中是否包括某字符串,可用in 成员运算符来检查
"""
"""
写入文件:
保存数据最简单的方式之一是将其写入到文件中。通过将输出写入文件,即便关闭包含程序输出的终端窗口,这些输出
也依然存在:可以在程序结束运行后查看这些输出,可与别人分享输出文件,还可编写程序来讲这些输出读取到内存
中并进行处理。
"""
"""
写入文件:
调用open()时提供两个实参,可指定读取模式('r'),写入模式('w'),附加模式('a')或能够读取和写入文件的模式('r+')
如果省略了模式实参,Python将以默认的只读模式打开文件。
以写入('w')模式打开文件时要小心,因为如果文件已存在,Python将清空之前的文件,这个程序没有终端输出
"""
file_name = 'foo'
with open(file_name,'w') as file_object:
    file_object.write('I love u.')
"""
相比计算机中的其他文件,这个文件没有任何不同,可以打开、在其中输入新文本、复制内容、将内容粘贴到其中。
"""
"""
Python只能将字符串写入文本文件,要将数值数据存储到文本文件中,必须先使用str()将其转换为字符串格式。
"""
"""
写入多行:
函数write()不会自动添加换行符
写入文本时记得添加'\n'换行符
还可以使用空格、制表符、空行来设置写入格式
"""
"""
附加到文件:
'a',写入到文件的行都将添加到文件末尾,如果指定文件不存在,Python将创建一个新文件。
也使用write()方法
"""




"""
匹配0-255,0,10,100,220
"""
pattern = '^(\d|[1-9]\d|1\d\d|2[0-5][0-5])$'
import re
print(re.search(pattern,'22'))
"""
加上$符就以结尾处短路,即不再存在短路
"""



"""
异常:
try:中方可能会发生异常的语句,
except:里放Python的错误类型
else:如果没有发生异常,程序继续执行
"""
"""
异常:
尝试:输入用户名:
正则:用户名:huixineier2  Whang2isne
     
密码:jaisjnv jaisdn232 Wioan38902
     '\w+'
"""
print('-----------------------------')
# import re
# regex_name ='\w+'
# regex_password = '\w+'
#
# my_name = 'Wangyifei'
# my_password = 'kgc503'
#
# user_name = input("请输入用户名: ")
# password = input('请输入密码: ')
# # try:
#     # re.match(regex_name, user_name) == None
#     # re.match(regex_password, password) is not None
# # except:   # 一定是Python内置的错误类型
# #     print('请输入正确格式的用户名或密码')
# # else:
#     if user_name == my_name and password == my_password:
#         print('成功登陆')
#
#     else:
#         print('用户名或密码错误')

print('-----------------beautiful-----------------------------------------')

"""
处理FileNotFoundError:
"""
file_name = 'alice.txt'

try:
    with open(file_name) as file:
        print(file.read())
except FileNotFoundError:
    msg = 'Sorry,the tile'+file_name+'does not exist.'
    print(msg)
else:
    pass


print('---------------------------------------------------')
# split()方法根据空格分析文本,返回一个列表,不是根据符号,列表成分也不一定是单词
title = 'Alice , in Wonderland'
print(title.split())
#>>>['Alice', ',', 'in', 'Wonderland']

"""
读取文章字节:
"""
file_name = 'Alice.py'
try:
    with open(file_name) as file:
        file_content = file.read()
        # print(file_content)
except FileNotFoundError:
    print('There is no such file.')
else:
    content_list = file_content.split()
print(content_list)
print(len(content_list))

# split()--生成列表
# readlines() -- 生成列表
# 生成列表的都可以在with外使用

# 用try-except-else:属于优化代码,实际开发中也是必要的


print('----------------------------------')
"""
失败时一声不吭:
except: 用pass
pass充当占位符,提醒自己在程序的某个地方什么都没有做,并且以后也需要在这里做些什么。
可能决定将找不到的文件的名称写入到文件missing_files.txt中。用户看不到这个文件,但自己可以读取这个文件,进而处理所有文件
找不到的问题。
"""
"""
存储数据:
模块json能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。
还可以使用json在Python程序之间分享数据。
JSON数据格式并非Python专用的,能够将以JSON格式存储的数据于是用其他编程语言的人分享。
"""
"""
JSON(JavaScript Object Notation)格式最初是为JavaScript开发的,但随后成了一种常见格式,被包括Python在内的众多语言采用。
"""

"""
使用json模块轻量存储数据
"""

import json

numbers = [1,2,3,4,5]

file_name = 'number.json'

with open(file_name,'w') as f_obj:
    json.dump(numbers,f_obj)
# json.dump()接受两个实参,一个内容,一个文件名,后缀可用.json
"""
使用json读取:
"""

with open(file_name) as f_obj:
    content = json.load(f_obj)
print(type(content))
print(content)
# <class 'list'>
# 下载后的json文本同样可以在with块外操作
# 现在是读取到了内存中
# 什么时候才不能在with块外操作?

print('------------------------')
"""
存储用户生成的数据:
"""
# while True:
user_name = input('What is your name?')

file_name = 'username.json'
with open(file_name,'w') as f_obj:
    json.dump(user_name,f_obj)
    print('We will remember you.')
    # if user_name == 'Q':
    #     break
    #

print('--------------------------')
file_name = 'username.json'

with open(file_name,'r') as f_obj:
    content = json.load(f_obj)   # json.load()只有一个参数,就是文件名,从哪个文件下载
    print('Welcome back,%s!'%content)
import json   #json和普通读写的区别在哪里?
# 普通读写:不用import json,with open()那里都是一样的,就是有个read()和write()方法
# json是json.dump()和json.load()

file_name = 'username.json'

try:
    with open(file_name) as f_obj:
        user_name = json.load(f_obj)
except FileNotFoundError:
    user_name = input('What is your name?')  # 这里的逻辑是:如果没有这个文件就把user_name重写进去
    with open(file_name,'w') as f_obj:
        json.dump(user_name,f_obj)
        print('We will remember u.')
else:
    print("Welcome back,%s!"%user_name)


print('-----------------------------------')
import json
"""
重构:
代码能正确地运行,但可作进一步改进,将代码划分为一系列完成具体工作的函数----重构。
让代码更清晰、更易于理解、更容易拓展。
"""
def get_stored_username():
    """
    如果存储了用户名,就获取它
    """
    file_name = 'username.json'

    try:
        with open(file_name) as f_obj:
            user_name = json.load(f_obj)
    except FileNotFoundError:
        return None
    else:
        return user_name

def greet_user():
    """
    问候用户,并指出其名字:
    """
    user_name = get_stored_username()
    if user_name:   # if None 不会有任何显示,是不是和设置成False是一样的?是的
                    # 这里直接写成if user_name非常的灵活
        print("Welcome back,%s!" % user_name)
    else:
        user_name = input('What is your name?')

        file_name = 'username.json'
        with open(file_name, 'w') as f_obj:
            json.dump(user_name, f_obj)
            print('We will remember you,%s.'%user_name)

greet_user()

"""
这是一种不错的做法,函数要么返回预期的值,要么返回None
"""
print('-----------------------------------')

def get_stored_username():
    """
    如果存储了用户名,就获取它
    """
    file_name = 'username.json'

    try:
        with open(file_name) as f_obj:
            user_name = json.load(f_obj)
    except FileNotFoundError:
        return None
    else:
        return user_name

def get_new_username():
    user_name = input('What is your name?')
    file_name = 'username.json'
    with open(file_name, 'w') as f_obj:
        json.dump(user_name, f_obj)
    return user_name
def greet_user():
    user_name = get_stored_username()
    if user_name:
        print("Welcome back,%s!" % user_name)
    else:
        user_name = get_new_username()
        print("Welcome back,%s!" % user_name)
greet_user()
"""
要编写出清晰而易于维护和扩展的代码,这种划分工作必不可少
"""


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值