代码改变世界

Python001

2018-04-17 13:29  Ashome123  阅读(230)  评论(0)    收藏  举报

 

一、 模块:先在当前目录下找,然后在环境变量中找

  1. 标准库:放在lib里

    - sys模块(不能把文件名改成sys.py)

      -- sys.path:返回一个环境变量的列表

      -- sys.argv:返回当前脚本的路径,命令行模式下可带参数,用来捕获执行执行python脚本时传入的参数

import sys

print(sys.path)
print(sys.argv)     # ['C:/Users/ashome/Desktop/python/2期/code/旧的/week2/sys模块和os模块.py']
View Code

 

    - os模块

      -- os.system():执行系统命令

import os

cmd_res = os.system('dir') # 执行命令,不保存结果,cmd_res里面是数字0
print(cmd_res) # 返回0,表示执行成功

 

      -- os.popen():返回当前目录详细信息

import os

cmd_res2 = os.popen('dir').read() # 不调用read()返回的是内存地址
print(cmd_res2)

 

      -- os.mkdir():在当前目录下创建一个目录

import os

os.mkdir('new_dir') # 在当前目录下创建一个目录

 

  2. 第三方库:放在site-packages里

 

二、getpass模块——密码的密文模式(在pycharm无效,在命令行可行)

import getpass

user = input('username:')
pwd = getpass.getpass('password:')

print(user,pwd)

 

三、万恶的字符串拼接:

    python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空间,并且一旦需要修改字符串的话,就需要再次开辟空间,+号每出现一次就会在内从中重新开辟一块空间。

 

四、 pyc

  存放在__pycache__目录下,当python运行时,编译的结果保存在内存中的PyCodeObject中,当python运行结束时,python解释器将PyCodeObject写回pyc文件中。当python第二次运行时,如果找到pyc文件,直接载入,否则重新编译。如果源代码有更新,则判断修改时间,如果修改时间靠后,则重新编译。

 

五、 三元运算

  result = 值1  if 条件 else  值2

 

六、变色

  print('\033[32;1m金额不足!!\033[0m\n'):变色,31红色,32绿色,41红底

 

七、 bytes类型(字节)

    python3中,文本总是Unicode,由str类型表示;二进制数据由bytes类型表示。不能拼接字符串和字节包,不能在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。

    字符串可以编码成字节包,字节包可以解码成字符串:

    

a = 'hello中国'
print(a) # 结果:hello中国

b = a.encode('utf-8') # encode将字符串按utf-8编码成字节包,若没有输入,默认用utf-8
print(b) # 结果:b'hello\xe4\xb8\xad\xe5\x9b\xbd'

c = b.decode('utf-8') # decode将字节包按utf-8解码成字符串
print(c) # 结果:hello中国

 

八、猜年龄游戏

  1. while版     
age = 56
count = 0

while count < 3:
    guess_age = int(input('请输入年龄:'))
    if guess_age == age:
        print('猜对了!!游戏结束啦~~')
        exit()
    elif guess_age > age:
        print('猜大了,小点就对了!')
    else:
        print('猜小了,大点就对了!')
    count += 1
else:
    print('玩太多次了,下次再玩儿吧~~')
View Code

 

  2. for版

age = 56

for i in range(3):
    guess_age = int(input('请输入年龄:'))
    if guess_age == age:
        print('猜对了!!游戏结束啦~')
        exit()
    elif guess_age > age:
        print('猜大了,小点就对了!')
    else:
        print('猜小了,大点就对了!')
else:
    print('玩太多次了,下次再玩儿吧~~')     # else在for循环里正常走完程序时执行,可以不写
View Code

 

  3. 询问是否继续版

age = 56
count = 0

while count < 3:
    guess_age = int(input('请输入年龄:'))
    if guess_age == age:
        print('猜对了!!游戏结束啦~~')
        exit()
    elif guess_age > age:
        print('猜大了,小点就对了!')
    else:
        print('猜小了,大点就对了!')
    count += 1

    if count == 3:
        continue_confirm = input('是否继续玩?输入任意键继续,输入N退出游戏:')
        if continue_confirm == 'N':
            print('下次再玩儿吧~~')
            exit()
        else:
            count = 0
View Code

 

九、 作业

  1. 编写登录接口

    - 输入用户名密码,用一个文件保存

    - 认证成功后显示欢迎信息

    - 输错三次后锁定,下次登陆时显示该用户已锁定

# {'ashome':111,'Tony':222,'aaa':333}

f = open('user_info','r')
user_info = f.read()
user_info = eval(user_info)     # 把字符串转化成字典类型

g = open('locked','r')
locked = g.read()
print(locked)

while True:
    print('\n--------------登陆页面--------------')
    user = input('请输入用户名:')
    if user not in user_info:
        print('用户名不存在!请重新输入!')
    elif user in user_info and user in locked:
        print('该用户已被锁定,请联系客服!')
    else:
        for i in range(3):
            pwd = input('请输入密码:')
            if user in user_info and pwd == user_info[user]:
                print('welcome,%s'%user)
                exit()
            else:
                print('密码错误!')

        h = open('locked','a+')
        h.write(user+'\n')
        print('用户已锁定,请联系客服!')
        exit()
View Code

 

  2. 多级菜单

    - 三级菜单

    - 可依次选择进入各级子菜单

    - 输入B返回上级菜单,输入Q退出

####自实现版####

menu_dict = {
    '深圳':{
        '南山':['海岸城','万象天地','益田假日'],
        '福田':['cocopark','kkone'],
        '罗湖':['万象城','国贸']
    },
    '广州':None,
    '汕头':None,
}

# 如果是字典,enumerate把key依次打印出来
def menu(args):
    for index, first in enumerate(args,1):
        print(index, first)
    press = input('请输入代码:')
    return press

while True:
    print('============menu1==============')
    code = menu(menu_dict)

    if code == 'Q':
        exit('感谢您的使用,再见~~')

    elif code =='B':
        print('\033[31;1m已经是最第一层了!!\033[0m\n')

    elif code == '1':
        print('============menu1-2==============')
        code = menu(menu_dict['深圳'])
        if code == '1':
            print('============menu1-3==============')

        code = menu(menu_dict['深圳']['南山'])
        while True:
            if code == 'Q':
                exit('感谢您的使用,再见~~')
            elif code == 'B':
                print('============menu1-2==============')
                code = menu(menu_dict['深圳'])
            else:
                print('\033[31;1m已经是最后一层了!!\033[0m')
                code = input('请输入代码:')
自实现版
####老师代码####

menu = {
    '北京':{
        '朝阳':{
            '国贸':{
                'CICC':{},
                'HP':{},
                '渣打银行':{},
                'CCTV':{}
            },
            '望京':{
                'momo':{},
                'benz':{},
                '360':{}
            },
            '三里屯':{
                '优衣库': {},
                'apple': {}
            },
        },
        '昌平':{
            '沙河': {
                '老男孩': {},
                '阿泰包子': {}
            },
            '天通苑': {
                '链家':{},
                '我爱我家':{}
            },
            '回龙观': {},
        },
        '海淀':{
            '五道口':{
                'google':{},
                '网易': {},
                'Sohu': {},
                'Sogou': {},
                '快手': {},
            },
            '中关村':{
                'youku':{},
                '爱奇艺': {},
                '汽车之家': {},
                '新东方': {},
            },
        }
    },
    '上海':{},
    '深圳':{},
}

current_layer = menu    # 当前层:保存keys
parent_layers = []      # 上一层

while True:
    print('---------menu-----------')

    for key in current_layer:
        print(key)                                  # 打印当前层下一层所有的key:北京,上海,深圳
    choice = input('>>>:').strip()

    if len(choice) == 0:
        continue
    elif choice in current_layer:
        parent_layers.append(current_layer)         # 把上一层放入parent_layers
        current_layer = current_layer[choice]
    elif choice == 'b':
        if parent_layers:
            current_layer = parent_layers.pop() # 取出列表最后一个值赋给current
        else:
            print('已经是最上层了!!')
    else:
        print('无此项')

    # print('current_layer:')
    # for i in current_layer:
    #     print(i)
    # print('\nparent_layers:')
    # for j in parent_layers:
    #     print(j)
老师代码

 

  3. 购物车

    用户入口:

      - 商品信息存在文件里

      - 已购商品,余额记录

      - 第一次进入输入工资,第二次进入显示余额和已购商品

    商家入口:

      - 可添加商品,修改价格