zoukankan      html  css  js  c++  java
  • python全栈开发学习03

    #_author:felix
    #date 2018/7/3
    # 格式化输出
    # ctrl+? 选中的行都注释
    name = input ("Name:")
    age = int(input("Age:"))
    job = input("Job:")
    salary = input("Salary:")


    if salary.isdigit(): #长得像不像数字
    salary = int(salary)
    # else:
    # #print("must input digit!")
    # exit("must input digit")
    msg = '''
    -------info of %s---------
    Name:%s
    Age:%d
    Job:%s
    salary:%f
    You will be retired %s years
    ---------end--------
    ''' %(name,name,age,job,salary,65-age)
    print(msg)



    #_author:felix
    #date 2018/7/3
    '''
    #数据类型知识点
    #python3中不区分整形与长整形
    我之前手机装了个termux 装了python3
    我尝试着去试他能最多运行到2的多少次方,我最终试到了2的一百万次方,我就没试了,
    在尝试一千万的时候就卡住了

    #for循环
    for i in range(1,100):
    if i % 2 == 1:
    print("loop:",i)
    '''
    #利用步长
    # for i in range(1,100,2):
    # print(i)
    #跳过50-70不打印
    # for i in range(100):
    # if i > 70 or i < 50:
    # print(i)



    #写一个登陆接口
    #报错IndentationError: expected an indented block 说明没缩进

    #passwd_authentication = False #flagzhi

    # _user = "felix"
    # _passwd = "123"
    # for i in range(2):
    # username = input(" Username: ")
    # password = input(" Password: ")
    #
    # if username == _user and password == _passwd:
    # print("Welcome %s login...." % _user)
    # passwd_authentication = True
    # break
    # else:
    # print("Invalid username or password")
    #
    #
    # if not passwd_authentication:
    # print("登陆次数过多!")

    _user = "felix"
    _passwd = "123"
    for i in range(2):
    username = input(" Username: ")
    password = input(" Password: ")

    if username == _user and password == _passwd:
    print("Welcome %s login...." % _user)
    break
    else:
    print("Invalid username or password")

    else:
    print("登陆次数过多!")

    #只要上面的for循环正常执行完毕,中间没有被打断,就会执行else语句
    #break过后就不会执行最后面的else语句,for后面不能加elif 只能加else



    #_author:felix
    #date 2018/7/4
    # 设置断点调试程序
    _user = "felix"
    _passwd = "123"
    counter = 0
    while counter < 3:
    username = input(" Username: ")
    password = input(" Password: ")

    if username == _user and password == _passwd:
    print("Welcome %s login...." % _user)
    break
    else:
    print("Invalid username or password")
    counter += 1
    if counter == 3:
    keep_going_choice = input("继续登陆吗?[y/n]")
    if keep_going_choice == "y":
    counter = 0

    else:
    print("登陆次数过多!")


    #_author:felix
    #date 2018/7/4
    '''continue语句,break,以及flag的使用'''
    exit_flag = False
    for i in range(10):
    if i<5:
    continue
    print(i)
    for j in range(10):
    print("layer2",j)
    if j == 6:
    exit_flag = True
    break
    if exit_flag:
    break


    #_author:felix
    #date 2018/7/4
    '''
    a=['a','b','c','d','e','f']

    #增删改查
    #查 切片
    print(a[0:]) #取到最后
    print(a[0:-1]) #取到倒数第二个值
    print(a[0::2])#从左到右隔一个去取
    print(a[0::-2])#从右到左隔一个去取
    print(a[::-2])
    print(a[:])#打印整个列表

    print(a[3:])

    #添加 append insert

    a.append('z') #插到末尾最后位置
    print(a)
    a.insert(1,'w')#插入到任意位置
    print(a)

    #修改

    a[0] = 'r'
    print(a)

    a[1:3]=['t','y']
    print(a)

    #删除 remove pop del
    a.remove('a') #直接把值写入,删除
    print(a)

    a.pop(1)#括号里是索引
    b=a.pop(1)
    print(a)
    print(b)

    del a[0]
    del a #可以删除某个固定的内容,也可以把整个对象删除


    w=['to','be','or','not','to','be'].count('to') #计算某个值出现的次数
    print(w)



    #extend 类似于append

    a = [1,2,3]
    b = [4,5,6]
    a.extend(b)

    print(a)
    print(b)


    #index 通过名称找索引
    a = ['a','b','c','d','e','f']
    print(a.index('b'))


    #reverse 倒转 无返回值
    a = ['a','b','c','d','e','f']
    a.reverse()
    print(a)


    #sort 数字从小到大排序,字母从大写到小写排序
    a = [2,4,6,9,8,5]
    a.sort()
    print(a)

    #sort 数字从小到大排序,字母从大写到小写排序
    a = [2,4,6,9,8,5]
    a.sort(reverse=True)
    print(a)


    #将倒着排序 按着ctrl 鼠标到sort会出现提示 reverse默认False
    a = [2,4,6,9,8,5]
    a.sort(reverse=True)
    print(a)


    总结:

    查:
    索引
    切片
    .count 查看某个元素出现的次数
    .index 根据内容找其对应的位置

    增加:
    .append() 追加
    .insert(索引,'内容')
    .extend 扩展

    修改:
    列表名[索引] = '新的值'
    通过切片修改 列表名[开始:结束] = ['内容1','内容2',...] 不匹配就会默认删掉没有匹配的

    删除:
    remove("内容")
    pop(索引) 如果不指定默认删除最后一个
    del /列表名/列表名[索引].clear() 清空排序:sort()reversed()如何判断是否是一个列表:type(列表名) is list #会返回一个true
    #_author:felix
    #date 2018/7/5
    #写一个购物车

    product_list = [
    ('Mac',9000),
    ('Kindle',800),
    ('tesla',900000),
    ('book',100),
    ('biycle',2000)
    ]

    salary = input('please input your salary:')
    shopping_car = []
    if salary.isdigit():
    salary = int(salary)
    #打印商品列表
    while True:
    for i,v in enumerate(product_list,1):
    print(i,'>>>>',v)
    #引导用户选择商品
    choice = input('选择购买的商品编号[退出:q]:')

    #验证输入是否合法
    if choice.isdigit():
    choice = int(choice)
    if choice > 0 and choice <= len(product_list):
    #将用户选择的商品通过choice取出来
    p_item = product_list[choice-1]
    if p_item[1] < salary:
    salary -= p_item[1]
    shopping_car.append(p_item)
    else:
    print('余额不足,还剩%s'%salary)
    print(p_item)
    else:
    print('编码不存在')
    elif choice == 'q':
    print('-------------你已经购买如下商品------------')

    for i in shopping_car:
    print(i)
    print('余额:%s'%salary)
    break
    else:
    print('invalid input')



    #_author:felix
    #date 2018/7/6

    #字典
    '''
    >>> header = {
    'Host' : 'www.java.sun.com',
    'Connection' : 'keep-alive'
    }
    >>> header['Host']
    'www.java.sun.com'
    >>> empty_d = {}
    >>> empty_d['host'] = 'www.java.sun.com'
    >>> empty_d
    {'host': 'www.java.sun.com'}
    >>> empty_d['host']
    'www.java.sun.com'
    >>> empty_d = {}
    >>> empty_d['host']
    Traceback (most recent call last):
    File "<pyshell#14>", line 1, in <module>
    empty_d['host']
    KeyError: 'host'
    >>> v1=empty_d.get['host']
    Traceback (most recent call last):
    File "<pyshell#15>", line 1, in <module>
    v1=empty_d.get['host']
    TypeError: 'builtin_function_or_method' object is not subscriptable
    >>> v1=empty_d.get('host')
    >>> type(v1)
    <class 'NoneType'>
    >>> v2 = empty_d.get("host","www.python.com")
    >>> v2
    'www.python.com'
    >>> empty_d
    {}

    字典的get方法可以返回一个默认值,但不会对字典产生影响,字典里的内容不会改变
    字符串,整数类不可变类型都可以作为字典的键,元组也可以作为键,前提是元组的元素都是不可变类型。

    与列表的推导一样,字典也有相应的字典推导,如下,生成了10个链接,以1-10的数字作为键,以键为页号的url作为值

    >>> urls_d = {i:"www.python.com/?page{}".format(i) for i in range(1,11)}
    >>> urls_d
    {1: 'www.python.com/?page1', 2: 'www.python.com/?page2', 3: 'www.python.com/?page3', 4: 'www.python.com/?page4', 5: 'www.python.com/?page5', 6: 'www.python.com/?page6', 7: 'www.python.com/?page7', 8: 'www.python.com/?page8', 9: 'www.python.com/?page9', 10: 'www.python.com/?page10'}
    >>>

    可以使用字典的 items() 方法对字典进行循环遍历,每次可以同时获得键和值:或者使用 keys() 方法对键进行遍历,每次可以利用键获得相应的值,
    两种方法类似,对比两种方法
    >>>for key,val in urls_d.items():
    print(key,val)

    ========================= RESTART: E:/python/test.py =========================
    1 www.python.com/?page1
    2 www.python.com/?page2
    3 www.python.com/?page3
    4 www.python.com/?page4
    5 www.python.com/?page5
    6 www.python.com/?page6
    7 www.python.com/?page7
    8 www.python.com/?page8
    9 www.python.com/?page9
    10 www.python.com/?page10

    >>> for key in urls_d.keys():
    print(key,urls_d[key])


    ========================= RESTART: E:/python/test.py =========================
    1 www.python.com/?page1
    2 www.python.com/?page2
    3 www.python.com/?page3
    4 www.python.com/?page4
    5 www.python.com/?page5
    6 www.python.com/?page6
    7 www.python.com/?page7
    8 www.python.com/?page8
    9 www.python.com/?page9
    10 www.python.com/?page10
    >>>


    #关于集合

    集合的特点是无序且无重复的元素,python提供了集合类型set和相关的操作,主要包括 成员测试,添加元素,去除元素等方法,也提供了数学中常见的集合的
    交,并,差 运算等。

    可以使用set()或大括号{} 来初始化集合,如下
    >>> s1 = set(['a','b','c'])
    >>> s1
    {'a', 'b', 'c'}
    >>> s2 = {'a','b','c'}
    >>> s2
    {'a', 'b', 'c'}
    >>> s1 == s2
    True
    >>>

    空集合只能用set进行定义,当{}中没有写入任何内容,其实就相当于建了个字典
    >>> s3 = {}
    >>> type(s3)
    <class 'dict'>
    >>> s4 = set()
    >>> s4
    set()
    >>> type(s4)
    <class 'set'>
    >>>

    可以用add()方法向集合中添加一个元素,或者可以使用update()向集合中添加多个元素,可以用 in 检查某个元素是否在此集合中

    >>> s4.add('x')
    >>> s4
    {'x'}
    >>> s4.update(['y','z'])
    >>> s4
    {'y', 'z', 'x'}
    >>> 'y' in s4
    True
    >>>

    可以用循环遍历集合中的元素
    >>>s4 = {'y', 'z', 'x'}
    >>>for x in s4:
    print(x)

    ========================= RESTART: E:/python/test.py =========================
    x
    y
    z


    #随机数

    可以利用python中的random 模块中的方法生成随机数,如 random.random 将生成0 - 1 之间的随机数,如下
    >>> import random
    >>> random.random()
    0.6710898931607918
    >>>
    可以使用randoma.randint(a,b)方法返回a-b之间(包括a,b)的整数

    >>> random.randint(2,9)
    5
    >>> random.randint(2,9)7>>> random.randint(2,9)9
    >>> random.randint(2,9)
    6
    >>> random.randint(2,9)
    7

    如果希望可以在程序中多个产生随机数的位置产生相同的随机数,则可以通过设置随机数的种子值来实现,如下
    >>> random.random()
    0.6619420090129978
    >>> random.seed(20)
    >>> random.random()
    0.9056396761745207
    >>> random.random()
    0.6862541570267026
    >>> random.random()
    0.7665092563626442
    >>> random.seed(20)
    >>> random.random()
    0.9056396761745207
    >>>
    #enumerate的使用
    可以使用enumerate在对列表,元组等类型操作时,同时返回元素的索引和元素的值
    for ind,val in enumerate([10,20,30,40,50,60]):
    print(ind,val)

    ========================= RESTART: E:/python/test.py =========================
    0 10
    1 20
    2 30
    3 40
    4 50
    5 60
    >>>

    for ind,val in enumerate([10,20,30,40,50,60],1):
    print(ind,val)

    ========================= RESTART: E:/python/test.py =========================
    1 10
    2 20
    3 30
    4 40
    5 50
    6 60
    >>>

    for ind,val in enumerate([10,20,30,40,50,60],3):
    print(ind,val)

    ========================= RESTART: E:/python/test.py =========================
    3 10
    4 20
    5 30
    6 40
    7 50
    8 60
    >>>

    #元组 只可读!!
    #如果元组里只有一个元素,在其后面加个逗号
    查询与列表一样
    嵌套:
    a = [[1,2,3],'felix',5,(3,5,6)]
    print(a[0][1])
    打印出2
    n级嵌套一样



    '''
    #_author:felix
    #date 2018/7/9

    '''
    不可变类型:整型,字符串,元组
    可变类型:列表,字典

    键必须是不可变类型
    字典两大特点:无序,键唯一

    字典的操作:

    增:
    a = {'name':'felix'}
    a['age'] = 21
    print(a)

    a.setdefault('hobby','python') #如果字典里有对应的键,则不修改原来键对应的值
    print(a)

    setdefault有返回值

    查:
    通过键去查
    a[name]
    看到所有的键:print(a.keys())
    看到所有的值:print(a.values())
    看到所有的键值对:print(a.items())

    改:

    a = {'name':'felix','age':'21'}
    a['name'] = 'alex'
    a = {'name':'felix','age':'21'}
    b = {'1':'111','2':'222'}
    a.update(b)
    将字典b里的东西加入字典a

    删:

    a = {'name':'felix','age':'21'}
    del a['name'] #a中的name的键值对删除

    a.clear() #将字典a清空

    a.pop('age') #会删掉age对应的键值对,pop有返回值,返回age对应的值


    a.popitem() #随机删除一组键值对

    del a #删除整个字典


    其他操作以及涉及到的方法:

    dic1 = dict.fromkeys(['host1','host2','host3'],'test')
    创建一个字典,n个键值对为 hostn ,test

    字典的嵌套

    字典排序:
    dic = {5:'555',2:'222',4:'444'}
    print(sorted(dic))


    字典的遍历:

    a = {'name':'felix','age':'21'}

    (推荐用这个,效率高)
    for i in a:
    print(i,a[i])

    ====================== RESTART: E:/python/test_dict.py ======================
    name felix
    age 21
    >>>
    或者:
    for i in a.items():
    print(i)

    ====================== RESTART: E:/python/test_dict.py ======================
    ('name', 'felix')
    ('age', '21')
    >>>

    或者(和第一个是同样的效果)
    for i,v in a.items():
    print(i,v)

    ====================== RESTART: E:/python/test_dict.py ======================
    name felix
    age 21



    关于字符串:
    #1 重复输出字符串
    print'hello'*20

    #2 通过索引获取字符串中的字符,与列表的切片相同
    print('helloworld'[2:])

    #3 成员判断 in
    print('el' in 'hello') #如果在会打印True

    #4 格式字符串
    print('felix is a man')
    print('%s is a man'%'felix')

    #5 字符串拼接
    a = '123'
    b = 'fdgd'
    c = '4rf'
    w = a+b+c
    以上拼接效率低,用下面的方法
    a = '123'
    b = 'fdgd'
    c = '4rf'
    w = ''.join([a,b,c]) # '' 里面可以加东西如---+++。不加表示无间隔拼接


    字符串的内置方法:

    str = 'hello kitty'

    print(str.count('l')) #看字符串str中有几个l
    print(str.capitalize()) #将字符串首字母大写
    print(str.center(50,'-')) #变成-------------------hello kitty--------------------
    print(str.endswith('y')) #验证以什么结尾 返回一个布尔值
    print(str.startswith('y')) #验证以什么开始 返回一个布尔值
    print(str.expandtabs(tabsize = 10))#str = 'he llo kitty' 会在he tllo之间增加十个空格
    print(str.find('t')) #返回查找到的第一个 t 的索引值

    print(str.format(name = 'felix')) #另一种方式格式化输入,字符串变为 str = 'hello kitty {name}'
    #输出就会变成 hello kitty felix
    print(str.format_map({'name':'felix'}))

    index() find() 功能一样,如果没有会报错,find会返回-1 推荐用find

    print('adf224'.isalnum()) #如果字符串里只有字母,汉字和数字会返回布尔值True

    更多关于字符串 http://www.runoob.com/python3/python3-string.html


    作业
    程序 :三级菜单
    要求:
    1.打印省市县三级菜单
    2.可返回上一级
    3.可以随时退出程序

    '''





  • 相关阅读:
    IM客户端Socks 5代理协议应用
    招聘程序员的方法
    Power BI Embedded 与 Bot Framework 结合的AI报表系统
    Surface Dial 与 Windows Wheel UWP应用开发
    如何将 Microsoft Bot Framework 链接至微信公共号
    Mobilize.Net Silverlight bridge to Windows 10 UWP
    使用 Windows10 自定义交互消息通知
    如何使用新浪微博账户进行应用登录验证(基于Windows Azure Mobile Service 集成登录验证)
    NFC 与 Windows Phone 的那点事儿
    Windows Phone 支持中国移动官方支付
  • 原文地址:https://www.cnblogs.com/root1/p/9351856.html
Copyright © 2011-2022 走看看