Python基础实践

# print函数
i = 8
print(i, i + 1, "The Value is:" + str(i))

# print函数 指定以 " " 结尾
for i in range(1, 10) :
    print(i, end = " ") # 不以换行结尾

# title 函数
message = 'aDA ada AdA'
print(message.title()) # 将每个单词首字母大写其余小写
>>> Ada Ada Ada

# lower
message = 'aDA ada AdA'
print(message.lower())
>>> ada ada ada

# upper
message = 'aDA ada AdA'
print(message.upper())
>>> ADA ADA ADA

# strip & rstrip & lstrip
message = ' python '
print(message.rstrip()) # ' python'
print(message.lstrip()) # 'python '
print(message.strip()) # 'python'

# 字符串的单引号&双引号
message = 'attention "Do not touch that"'
message2 = "haha this is jack's girl friend"
print(message)
print(message2)

# ** 乘方运算
message = 3 ** 2 # 3的2次方 = 9
print(message)

# 小数 结果包含的小数位数可能是不确定的
print(0.2 + 0.1) # 0.30000000000004
print(0.1 + 0.1) # 0.2

# 获取 python之禅
import this

# 列表 访问
list = ['a', 'b', 'c']
print(list[0]) # a
print(list[-1]) # 最后一个
print(list[-2]) # 倒数第二个

# 列表 修改
list = ['a', 'b', 'c']
print(list)
list[0] = 'aa'
print(list)

# 列表 添加
list = []
list.append('a')
list.append('b')
list.append('c')
print(list)

list = ['a', 'b', 'c']
list.insert(0, 'aa')
print(list)

# 列表 删除
list = ['a', 'b', 'c']
del list[0]
print(list)

list = ['a', 'b', 'c']
print(list)
pop = list.pop() # 删除 'c'
print(list)
print(pop)

list = ['a', 'b', 'c']
print(list)
pop = list.pop(0) # 删除索引为0的元素
print(list)
print(pop)

list = ['a', 'b', 'c', 'a']
print(list)
del_node = 'a'
list.remove('a') # 只删除第一个 'a'
print(list)

# 列表 组织
list = ['b', 'a', 'c', 'd']
print(list)
list.sort()
print(list)
list.sort(reverse=True) # 反向排序
print(list)

list = ['b', 'a', 'd', 'c']
print(list)
print(sorted(list)) # 不影响原 list
print(sorted(list, reverse=True))
print(list)

list = ['a', 'b', 'c', 'd']
list.reverse() # 反转列表
print(list)

list = ['a', 'b', 'c', 'd']
print(len(list)) # 列表长度

list = []
print(list[-1]) # 越界 -1表示最后一个元素

# 将 数字集 转化 为 列表
numbers = list(range(1, 6))
print(numbers) # 1, 2, 3, 4, 5

even_numbers = list(range(2, 11, 2)) # 步长2
print(even_numbers)

squares = []
for v in range(1, 11) :
    squares.append(v**2)
print(squares)

# 列表 统计 计算
nodes = [1, 2, 3, 4, 5, 9, 0]
print(min(nodes))
print(max(nodes))
print(sum(nodes))

# 列表解析
squares = [square ** 2 for square in range(1, 11)]
print(squares)

# 列表 切片
nodes = ['a', 'b', 'c', 'd'] # 切片从索引0开始
print(nodes[0:3]) # a,b,c
print(nodes[1:4]) # b,c,d
print(nodes[:4]) # a,b,c,d
print(nodes[2:]) # c,d
print(nodes[-3:]) # b,c,d

# 列表 切片 遍历
nodes = ['a', 'b', 'c', 'd']
for node in nodes[:3] :
    print(node.title())

# 列表 复制
nodes = ['a', 'b', 'c', 'd']
nodes1 = nodes # nodes和nodes1 指向相同地址
nodes2 = nodes[:] # nodes和nodes2 各自有一份 互不干涉
nodes.append('00')
nodes1.append('11')
nodes2.append('22')
print(nodes)
print(nodes1)
print(nodes2)

# 列表 判断是否为空
nodes = []
if nodes :
    print("nodes is not empty")
else :
    print("nodes is empty")

# 元组(不能被修改的列表)
nodes = (100, 200)
print(nodes[0])
print(nodes[1])
nodes[0] = 111 # 不能通过 元组值不允许被修改

# 元组 遍历
nodes = (100, 200)
for node in nodes :
    print(node)

# 元组变量修改
nodes = (100, 200)
for node in nodes :
    print(node)
nodes = (200, 400) # 变量可被重新赋值
for node in nodes :
    print(node)

# if 条件判断
nodes1 = ['a', 'b', 'c', 'd']
nodes2 = [1, 2, 3, 4]
node1 = 'e'
node2 = 2
if node1 in nodes1 and node2 in nodes2 :
    print("all in") # False
elif node1 in nodes1 or node2 in nodes2 :
    print("part in") # True

if node1 not in nodes1 :
    print("node1 not in nodes1") # True

#
\n 回车
\t 制表符

# range
for i in range(0,3) : # [0, 3)
    print(" -" + str(i))

#
for k, v in map.items() :
    print("key:" + k)
    print("value: + v)

#
for k in map.keys() : #Or  for k in map:
    print("key:" + k)

# 不在map的keys列表中
if 'erin' not in favorite_languages.keys() :
    print(" erin not in !!")

# 按照键值顺序,固定
for name in sorted(favorite_languages.keys()) :
    print(name.title())

# 打印values
for value in favorite_languages.values() :
    print(value.title())

# 打印values不重复
for value in set(favorite_languages.values()) :
    print(value.title())

#
friends = ['jen', 'edward'] # 列表
for name in favorite_languages.keys() :
    print(name.title())
    if name in friends : # 在列表中
        print(" Hi" + name.title() + 
            ", I see your favorite language is " + 
            favorite_languages[name].title() + "!")

# 打印list
a_0 = {'color' : 'green', 'points' : 5}
a_1 = {'color' : 'yellow', 'points' : 10}
a_2 = {'color' : 'red', 'points' : 15}
a_list = [a_0, a_1, a_2]
for a in a_list :
    print(a)

# 动态增list元素 & 打印list的前多少个 & 求list的长度 & range
b_list = []
for i in range(30) :
    new_b = {'color' : 'green', 'points' : 5, 'speed' : 'slow'}
    b_list.append(new_b)

for b in b_list[:5] : # 前5个
    print(b)
print("...")
print("Total number of b:" + str(len(b_list)))

# list 条件判断
for b in b_list[0:3] : # 0开始的3个元素
    if b['color'] == 'green' :
        b['color'] = 'yellow'
        b['speed'] = 'fast'
        b['points'] = 10
    elif b['color'] == 'yellow' :
        b['color'] = 'red'
        b['speed'] = 'fast'
        b['points'] = 15

for b in b_list[:5] :
    print(b)
print("...")

# map里嵌套list
favorite_language = {
    'hailong' : ['C', 'C++', 'Python'],
    'jack' : ['C'],
    'meimei' : ['Java', 'Go'],
    'yuanyuan' : ['H5'],
    }

for k, v in favorite_language.items() :
    if len(v) == 1 :
        print("\n" + k.title() + " has one favorite:")
    else :
        print("\n" + k.title() + " has some favorite language:")
    for l in v :
        print("\t" + l.title())

# map里嵌套map
users = {
    'aeinstein' : {
        'first' : 'albert',
        'last' : 'aeinstein',
        'location' : 'new york'
        },
    'mcurie' : {
        'first' : 'marie',
        'last' : 'curie',
        'location' : 'pairs'
        }
    }

for name, info in users.items() :
    print("\n username:" + name.title())
    full_name = info['first'] + " " + info['last']
    location = info['location']

    print("\t full name is:" + full_name.title())
    print("\t location:" + location.title())

# 接收输入,与用户交互
message = input("tell me some message:")
print (message)
    # 如果用的是python2.7  请用raw_input

# 拼接多行字符串
prompt = "balabalabala"
prompt += "\nwhat is your name:"
message = input(prompt)
print("\nHello, " + message + "!")

# while使用
start = 1
while start <= 5 :
    print("\n number:" + str(start))
    start += 1

# while & bool
prompt = "input value, and i will echo to you,"
prompt += "\n if you enter 'quit', exit programe:"
message = ""
active = True
while active :
    message = input(prompt)

    if message == 'quit' :
        active = False
    else :
        print(message)

# break的使用
prompt = "\n tell me what city do you go:"
message = ""
while True :
    message = input(prompt)

    if message == 'quit' :
        break

    print("the city you want to go is:" + message.title())

# continue的使用
cur_number = 0
while cur_number < 10 :
    cur_number += 1

    if cur_number % 2 == 0 :
        continue

    print(cur_number)

# 遍历list & list放在while中删除 & list的pop
unconfirm_list = ['a', 'b', 'c']
confirm_list = []
while unconfirm_list : # 只能用while 不能用 for
    cur = unconfirm_list.pop() # c -> b ->a

    print("cur user is:" + cur.title())
    confirm_list.append(cur) # 加入

for cu in confirm_list :
    print("confirm member:" + cu.title())

# list的循环遍历删除(删除多个元素)
pet_list = ['a', 'b', 'c', 'a', 'a', 'd', 'f']
print(pet_list)
while 'a' in pet_list :
    pet_list.remove('a')

print(pet_list)

# while & input & map
response = {}
b_active = True
while b_active :
    name = input("What's you name:")
    mountain = input("What moutain do you like:")

    response[name] = mountain

    ack = input("do you want continue(yes/no):")
    if ack == 'no' :
        b_active = False
    
for k, v in response.items() :
    print("Hi, " + k + ", do you want climb " + v)

# 函数
def sayHello() :
    """ say hello """  #[docstring] 生成文档用的注释
    print("Hello!!!!")

sayHello()

# 函数 带参数
def sayHello(name) :
    """ say hello """ # docstring
    print("Hello " + name.title() + " !")

sayHello('hailong')

# 函数 位置实参 多个
def showAnimal(type, name) :
    print("\n I have a type:" + type.title() + " animal, name:" + name.title())

showAnimal('cat', 'mimi')
showAnimal('dog', 'taotao')

# 函数 关键字实参 再也不用担心传的顺序不对了
def showAnimal(type, name) :
    print("\n I have a type:" + type.title() + " animal, name:" + name.title())

showAnimal(type='cat', name='mimi')
showAnimal(name='mimi', type='cat')

# 函数 参数 默认值
def showAnimal(name, type='dog') :
    print("\n I have a type:" + type.title() + " animal, name:" + name.title())

showAnimal(name='mimi')
showAnimal('taotao')

# 函数 返回值
def get_clean_name(first, family) :
    full_name = first + ' ' + family
    return full_name.title()

my_name = get_clean_name('jack', 'shi')
print(my_name)

# 函数 默认值 判断字符串是否为空
def get_formatted_name(first, last, middle='') :

    if middle : # 直接判断是否为空
        full_name = first + ' ' + middle + ' ' + last
    else :
        full_name = first + ' ' + last

    return full_name.title()

my_name = get_formatted_name('jack', 'shi')
print(my_name)
my_name = get_formatted_name('jack', 'shi', 'tang')
print(my_name)

# 函数 返回map
def build_person(first, last) :
    person = {'first' : first, 'last' : last}
    return person

my_person = build_person('hailong', 'shi')
print(my_person)

# 函数 返回map 默认值
def build_person(first, last, age='') :
    person = {'first' : first, 'last' : last}
    if age :
        person['age'] = age
    return person

my_person = build_person('hailong', 'shi', 27) # map的age为int型27 以实参为准
print(my_person)

# 函数 返回值 & while & break
def get_formatted_name(first, last) :
    full_name = first + ' ' + last
    return full_name.title()

while True :
    f_name = input("Input first name:")
    if f_name == 'q' :
        break
    l_name = input("Input last name:")
    if l_name == 'q' :
        break

    my_fullname = get_formatted_name(f_name, l_name)
    print(my_fullname)

# 函数 传参list & 字符串拼接
def greet_user(names) :
    for name in names :
        msg = "Hello " + name.title() + "!"
        print(msg)

user_list = ['hailong', 'yuanyuan', 'taotao']
greet_user(user_list)

# 函数 参数list回传 & docstring &
def printModules(un, ed) :
    """
    docstring 说明 # 可以嵌套注释
    """
    while un :
        cur = un.pop()
        print("pop from list:" + cur)
        ed.append(cur)

def showModule(l) :
    for node in l :
        print(node)
    
my_list = ['a', 'b', 'c', 'd']
ed_list = []
printModules(my_list, ed_list) #回传 ed_list
showModule(ed_list)

# 函数 参数list不能被函数修改
def printModules(un, ed) :
    """
    docstring 说明 # 说明
    """
    while un :
        cur = un.pop()
        print("pop from list:" + cur)
        ed.append(cur)

def showModule(l) :
    for node in l :
        print(node)
    
my_list = ['a', 'b', 'c', 'd']
ed_list = []
printModules(my_list[:], ed_list) # 传my_list的切片副本 不会被函数内部修改
showModule(my_list)
showModule(ed_list)

# 函数 可变实参
def make_pizza(*toppings) : # 注意toppings前面的*
    print("Make a pizz need some toppings:")
    for t in toppings :
        print("- " + t)

make_pizza('a')
make_pizza('a', 'b', 'c', 'd')

# 位置实参 & 可变实参(可变实参用list收藏)
def make_pizza(size, *toppings) :
    print("Make a " + str(size) + " inch pizz need some toppings:")
    for t in toppings :
        print("- " + t)

make_pizza(11, 'a')
make_pizza(18, 'a', 'b', 'c', 'd')

# 位置实参 & 可变实参(可变实参用map收藏)
def build_profile(first, last, **var) :
    # **user_info中的两个星号为可变数量的关键字实参创建字典供
        # 供函数内部使用
    profile = {}
    profile['first'] = first
    profile['last'] = last
    for k, v in var.items() :
        profile[k] = v
    
    return profile

my_profile = build_profile('hailong', 'shi', city='shanghai', job='it')
print(my_profile)

# 导入整个模块里的所有函数
def make_pizza(size, *toppings) :
    """ pizza.py """
    print("Make " + str(size) + " pizza, need toppings below:")
    for topping in toppings :
        print(" -" + topping)

 """ test.py """
import pizza
pizza.make_pizza(15, 'a', 'b') # 需要 pizza后面跟点
pizza.make_pizza(18, 'a', 'b', 'c')

# 导入整个模块里的所有函数2     import * 版
def make_pizza(size, *toppings) :
    """ pizza.py """
    print("Make " + str(size) + " pizza, need toppings below:")
    for topping in toppings :
        print(" -" + topping)

def fun_b() :
    print("fun_b")

 """ test.py """
import pizza *
make_pizza(15, 'a', 'b') # 需要 pizza后面跟点
make_pizza(18, 'a', 'b', 'c')
fun_b()

# 导入模块里的特定函数
def make_pizza(size, *toppings) :
    """ pizza.py """
    print("Make " + str(size) + " pizza, need toppings below:")
    for topping in toppings :
        print(" -" + topping)

 """ test.py """
from pizza import make_pizza # 特定函数
from pizza import * # 导入所有函数 但是容易重名 尽量少用
make_pizza(15, 'a', 'b') # 不要要点
make_pizza(18, 'a', 'b', 'c')

# 导入模块里的特定函数  并且 指定别名
def make_pizza(size, *toppings) :
    """ pizza.py """
    print("Make " + str(size) + " pizza, need toppings below:")
    for topping in toppings :
        print(" -" + topping)

 """ test.py """
from pizza import make_pizza as mp
mp(15, 'a', 'b') # 不要要点
mp(18, 'a', 'b', 'c')

# 导入整个模块 并且 把模块 指定别名
def make_pizza(size, *toppings) :
    """ pizza.py """
    print("Make " + str(size) + " pizza, need toppings below:")
    for topping in toppings :
        print(" -" + topping)

 """ test.py """
import pizza as mn
mn.make_pizza(15, 'a', 'b') # 不要要点
mn.make_pizza(18, 'a', 'b', 'c')

# 导入类
""" xxx.py """
class A() :
    -- snip --

""" test.py """
from xxx import A
my_a = A()

# 类定义 & 访问类实例属性 & 访问类实例方法
 # class Dog(object) :   # python2.7 的做法
class Dog() :
    """ 创建小狗 """

    def __init__(self, name, age) :
        """ initialize dog """
        self.name = name
        self.age = age

    def site(self) :
        """ simulate site down """
        print(self.name.title() + " site down")

    def rollover(self) :
        """ simulate rollover """
        print(self.name.title() + " roll over")


my_dog = Dog('taotao', 26)
print("my dog name:" + my_dog.name.title())
print("my dog age:" + str(my_dog.age))
my_dog.site()
my_dog.rollover()

# 类 访问属性 修改属性接口 属性默认值
class Car() :
    """ Car Info """

    def __init__(self, make, model, year) :
        """ Initialize """
        self.make = make
        self.model = model
        self.year = year
        self.mile = 0 # 属性默认值

    def get_full_name(self) :
        """ return full name """
        full_name = "The Car info:" + self.make + " " + self.model + " " + str(self.year)
        return full_name.title()

    def display_mile(self) :
        print("The car mile:" + str(self.mile))

    def update_mile(self, new_mile) : # 接口修改属性值
        if new_mile >= self.mile :
            self.mile = new_mile
        else :
            print("You can not roll back mile")
    def inc_mile(self, new_mile) :
        self.mile += new_mile

my_car = Car('audi', 'a4', 2016)
print(my_car.get_full_name())
my_car.display_mile()
my_car.update_mile(26)
my_car.display_mile()
my_car.update_mile(24)
my_car.display_mile()
my_car.mile = 24 # 直接修改属性值
my_car.display_mile()
my_car.inc_mile(100) # 通过接口增量修改属性值
my_car.display_mile()

# 类 继承
class EleCar(Car) :
    def __init__(self, make, model, year) :
        super().__init__(make, model, year) # 调用父类的 __init__函数

my_tesla = EleCar('tesla', 'model s', 2016)
print(my_tesla.get_full_name())

# python2.7的继承
class Car(object) :
    def __init__(self, make, model, year) :
    -- snip --

class EleCar(Car) :
    def __init(self, make , model, year) :

        # super需要2个实参 将父类和子类关联起来
        super(EleCar, self).__init__(make, model, year)
        -- snip --

# 类 继承 给子类增加属性和方法 & 重写父类的方法
class EleCar(Car) :
    def __init__(self, make, model, year) :
        super().__init__(make, model, year)
        self.battery = 70

    def display_battery(self) :
        print("The car battery:" + str(self.battery))

    def display_mile(self) : # 重写父类的方法
        print("Now I am in EleCar")

my_car = Car('aodi', 'a4, 2016)
my_tesla = EleCar('tesla', 'model s', 2016)
my_car.display_mile() # 调用父类的
my_tesla.display_mile() # 调用子类的
print(my_tesla.get_full_name())
my_tesla.display_battery()

# 类的组合
class Battery() :
    
    def __init__(self, battery_size=70) :
        self.battery_size = battery_size

    def show_battery(self) :
        print("The car's batter size:" + str(self.battery_size))

    def show_go_mile(self) :
        if self.battery_size == 70 :
            range = 240
        elif self.battery_size == 85 :
            range = 360

        print("The car can go " + str(range) + " miles under batter_size:" + str(self.battery_size))


class EleCar(Car) :
    def __init__(self, make, model, year) :
        super().__init__(make, model, year)
        self.battery = Battery(85)


my_tesla = EleCar('tesla', 'model s', 2016)
my_tesla.battery.show_battery()
my_tesla.battery.show_go_mile()

# 导入单个类 (被导入模块含单个类)
""" car.py """
class Car() :
    -- snip --

""" my_car.py """
from car import Car

# 导入单个类(被导入模块含多个类)
""" car.py """
class Car() :
    -- snip --

class EleCar(Car) :
    -- snip --

""" my_car.py """
from car import EleCar

# 从一个模块导入多个类
from car import Car, EleCar

my_car = Car('Audi', 'a6', 2016)
my_car.display_mile()
my_tesla = EleCar('tesla', 'model s', 2016)
my_tesla.battery.show_battery()
my_tesla.battery.show_go_mile()

# 导入整个模块  然后用 模块名.类名 实例化类
import car

my_car = car.Car('Audi', 'a6', 2016)
my_car.display_mile()
my_tesla = car.EleCar('tesla', 'model s', 2016)
my_tesla.battery.show_battery()
my_tesla.battery.show_go_mile()

# 导入模块内的所有类  --不建议使用
from car import *

my_car = Car('Audi', 'a6', 2016)
my_car.display_mile()
my_tesla = EleCar('tesla', 'model s', 2016)
my_tesla.battery.show_battery()
my_tesla.battery.show_go_mile()

# 模块分散 各自导入
""" car.py """
    -- snip --

""" ele_car """
    -- snip ---

""" my_car.py """
from car import Car
my_car = Car('Audi', 'a6', 2016)
my_car.display_mile()

from ele_car import EleCar
my_tesla = EleCar('tesla', 'model s', 2016)
my_tesla.battery.show_battery()
my_tesla.battery.show_go_mile()

# 标准库 - collections:OrderedDict
from collections import OrderedDict

f_l = OrderedDict()
f_l['a'] = 'a100'
f_l['b'] = 'b100'
f_l['c'] = 'c100'
f_l['d'] = 'd100'
for k, v in f_l.items() :
    print(" -" + k + " " + v.title())

# 文件  读取全部内容
with open('C:/Dev/pi.txt') as file_object :
    c = file_object.read()
    print(c.rstrip()) # 删除字符串末尾的空格 不再换行

# 文件 逐行读取文件
with open('C:/Dev/pi.txt') as file_object :
    for line in file_object :
        print(line.rstrip()) # 删除字符串末尾的空格 不再换行

# 文件  读取文件行保存在list 然后在外部使用
with open('C:/Dev/pi.txt') as file_object :
    lines = file_object.readlines()

for line in lines :
    print(line.rstrip())

# 文件 拼接所有行在一起
with open('C:/Dev/pi.txt') as file_object :
    lines = file_object.readlines()

pi_string = ''
for line in lines :
    pi_string += line.strip() # 删除所有的空格

print(pi_string)
print(len(pi_string))

# 文件 只获取文件的一部分内容
with open('C:/Dev/pi.txt') as file_object :
    lines = file_object.readlines()

pi_string = ''
for line in lines :
    pi_string += line.strip() # 删除所有空格

print(pi_string[:52] + "...") # 只获取52个字节
print(len(pi_string))

# 文件 检查文件内容是否包含指定字符串
with open('C:/Dev/pi.txt') as file_object :
    lines = file_object.readlines()

pi_string = ''
for line in lines :
    pi_string += line.strip()

birth = input("Input your birthday:")
if birth in pi_string :
    print("You birth day is in")
else :
    print("You birth is not in")

# 文件  写文件
with open('C:/Dev/t.txt', 'w') as file_object :
    """ r w(写覆盖) a r+(读写) """
    file_object.write("Ha ha ha")

# 文件 写文件 加入 换行符
with open('C:/Dev/t.txt', 'w') as file_object :
    file_object.write("Ha ha ha1\n")
    file_object.write("Haha2\n")
    file_object.write("Haha3\n")

# 异常 异常码 汇总
ZeroDivisionError
FileNotFoundError

# 异常
try :
    print(5/0)
except ZeroDivisionError :
    print("Divide zero")

# 异常 else代码块
print("Enter two num, I will divide them:") 
print("Print q to exit")
while True :
    num1 = input("Fist number:")
    if num1 == 'q' :
        break
    num2 = input("Second number:")
    try :
        div = int(num1) / int(num2)
    except ZeroDivisionError :
        print("You can not divide 0")
    else :
        print("Result:" + str(div))

# 异常 FileNotFoundError
file_name = 'tt.txt'
try :
    with open(file_name) as file_object :
        content = file_object.read()
except FileNotFoundError :
    msg = "Sorry, the file " + file_name + " not found"
    print(msg)

# 文件 异常 字符串 split
try :
    with open('C:/Dev/pi.txt') as file_object :
        content = file_object.read()
except FileNotFoundError :
    msg = "File not found "
else :
    words = content.split() # words 现在是一个 list
    len = len(words)
    print("File have about " + str(len) + " Words")

# 文件 使用多个文件 pass
def count_times(file) :
    try :
        with open(file) as file_object :
            content = file_object.read()
    except FileNotFoundError :
        print("Do no find file:" + file) # pass 也可以用pass,占位符,啥都不做
    else :
        value = content.split()
        times = len(value)
        print("The file " + file + " have " + str(times) + " words")

file_list = ['ff.txt', 'C:/Dev/pi.txt']
for file in file_list :
    count_times(file)

# 文件 将数据存储为json文件
import json

numbers = [1, 2, 3, 4, 5]
with open('C:/Dev/tt.json', 'w') as file_object :
    json.dump(numbers, file_object)

# 文件 读取json文件
import json

with open('C:/Dev/tt.json') as file_object :
    numbers = json.load(file_object)

print(numbers)

# 文件&异常 函数 返回值 重构(多个小函数配合)
import json

def get_old_name() :
    filename = 'C:/Dev/name.json'
    try :
        with open(filename) as file_obj :
            username = json.load(file_obj)
    except FileNotFoundError :
        return None
    else :
        return username

def get_new_name() :
    username = input("Input your name:")
    filename = 'C:/Dev/name.json'
    with open(filename, 'w') as file_obj :
        json.dump(username, file_obj)
    return username

def greet_user() :
    user_name = get_old_name()
    if user_name :
        print("Welcome back:" + user_name + "!")
    else :
        username = get_new_name()
        print("Your new name is:" + username)
        
greet_user()

# 单元测试 函数 3个测试用例
import unittest

def get_full_name(first, last, middle='') :
    if middle :
        return first.title() + ' ' + middle.title() + ' ' + last.title() 
    else :
        return first.title() + ' ' + last.title()        

class NameTestCase(unittest.TestCase) :
    def test_name_case(self) : # 函数名必须以test开头 [测试用例1]
        full_name = get_full_name('hailong', 'shi')

        # 测试用例  通过
        self.assertEqual(full_name, 'Hailong Shi')
    
    def test_middle_case(self) : # 函数名必须以test开头 [测试用例2]
        full_name = get_full_name('hailong', 'shi', 'jack')

        # 测试用例  通过
        self.assertEqual(full_name, 'Hailong Jack Shi')

class NameTestCase2(unittest.TestCase) :
    def test_name_case(self) : # 函数名必须以test开头 [测试用例3]
        full_name = get_full_name('hailong', 'shi')

        # 测试用例  未通过
        self.assertEqual(full_name, 'hailong Shi')


unittest.main()

# 单元测试 各种断言方法
assertEqual(a, b)
assertNotEqual(a, b)
assertTrue(x)
assertFalse(x)
assertIn(x, list)
assertNotIn(x, list)

# 单元测试 类 2个测试用例
class AnoSurvey() :
    def __init__(self) :
        self.responses = []

    def add_response(self, value) :
        self.responses.append(value)

    def show_result(self) :
        for v in self.responses :
            print(" - " + v)

import unittest
class TestAnoSurvey(unittest.TestCase) :
    def setUp(self) : # 首先执行 setUp函数
        self.m_survey = AnoSurvey()
        self.m_testlist = ['english', 'chinese', 'japanese']

    def test_single_result(self) : # 单元测试1
        self.m_survey.add_response(self.m_testlist[0])
        
        self.assertIn(self.m_testlist[0], self.m_survey.responses)

    def test_three_result(self) : # 单元测试2
        for v in self.m_testlist :
            self.m_survey.add_response(v)

        for v in self.m_testlist :
            self.assertIn(v, self.m_survey.responses)

unittest.main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值