• Python学习日记(三)——Python基本数据类型(运算符、int、str、tuple、dict、range)


    运算符

    1、算数运算

    2、比较运算

    3、赋值运算

    4、逻辑运算

    5、成员运算

     基本数据类型

    1、数字

    int(整型)

      在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
      在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
     
    int的常用功能
    #加法实际上是调用__add__,先了解
    n1 = 123
    n2 = 456
    print(n1 + n2)
    print(n1.__add__(n2))
    
    #ret——获取可表示的二进制最短位数
    n1 = 4 #0000 0100
    ret = n1.bit_length()
    print(ret)

    2、布尔值

      真或假
      1 或 0
    3、字符串
    "hello world"
    字符串常用功能:
    • 索引
    • 切片
    #——索引——
    s = "alex"
    print(s[0])
    print(s[1])
    print(s[2])
    print(s[3])
    # print(s[4])
    # 超出范围会报错:IndexError: string index out of range
    
    #显示范围
    ret = len(s)
    print(ret)
    
    
    #——切片——
    s = "alex"
    # 0=< 0,1 < 2
    print(s[0:2])
    
    
    #——for循环——
    s = "alex"
    for item in s:
        print(item)
    • 其它——移除空白,分割,长度
    a1 = "sullivan"
    #capitalize——首字母大写
    ret = a1.capitalize()
    print(ret)
    #输出结果:Sullivan
    
    
    a1 = "sullivan"
    #center(self, width, fillchar=None):
    #内容居中,width:总长度;fillchar:空白处填充内容,默认无
    ret = a1.center(20,'*')
    print(ret)
    #输出结果:******sullivan******
    
    
    a1 = "sullivan is sulli"
    #count——子序列的个数
    ret = a1.count("a")
    print(ret)
    #输出结果:1
    ret = a1.count("su")
    print(ret)
    #输出结果:2
    ret = a1.count("su",0,4)
    print(ret)
    #输出结果:1
    
    
    a1 = "sullivan"
    #endwith——是否已 xxx 结束
    #startwith——是否已 xxx 起始
    print(a1.endswith('n'))
    #输出结果:True
    print(a1.endswith('u'))
    #输出结果:False
    #获取字符串大于等于0,小于2的位置,
    print(a1.endswith('u',0,2))
    #输出结果:True
    
    
    #content——将Tab键转换为空格
    content = "hello	999"
    print(content)
    print(content.expandtabs())
    print(content.expandtabs(20))
    
    
    #find——寻找子序列位置,如果没找到,返回 -1
    #rfind——从右向左找
    s = "sullivan is sulli"
    print(s.find("ll"))
    
    
    #format——字符串格式化,动态参数,将函数式编程时细说
    s = "hello {0},age {1}"
    print(s)
    #{0} 占位符
    new1 = s.format('sullivan',19)
    print(new1)
    #输出结果:hello sullivan,age 19
    
    
    #index——寻找子序列位置,如果没找到,报错
    #和find功能一样,且find不报错,忽略掉就行
    """
    都不用传参数
    isalnum——判断是否是数字和字母
    isalpha——判断是否是字母
    isdigit——判断是否是数字
    isspace——判断是否全是空格
    istitle——判断是否是标题,首字母是否大写
    isupper——判断是否全是大写
    islower——判断是否全是小写
    title——变标题
    upper——变大写
    lower——变小写
    """
    a = "sullivan1"
    print(a.isalnum())
    print(a.isalpha())
    print(a.isdigit())
    print(a.isspace())
    print(a.istitle())
    print(a.isupper())
    print(a.islower())
    
    
    #join——连接
    #li = ["prime","sullivan"]  #列表类型中括号
    li = ("prime","sullivan")  #元组类型小括号
    print("".join(li))
    print("_".join(li))
    print("***".join(li))
    
    
    #ljust——内容左对齐,右侧填充
    #rjust——内容右对齐,左侧填充
    s = "Sullivan"
    set = s.ljust(20,'_')
    print(set)
    #输出结果:Sullivan____________
    set = s.rjust(20,'_')
    print(set)
    #输出结果:____________Sullivan
    
    
    #lstrip——去除左边的空格
    #rstrip——去除右边的空格
    #strip——去除左右两边的空格
    s = "  sulli  "
    news = s.lstrip()
    print(news)
    news = s.rstrip()
    print(news)
    news = s.strip()
    print(news)
    
    
    #partition——按指定字符分割为前,中,后三部
    #rpartition——从右向左找
    s = "i love you"
    ret = s.partition('love')
    print(ret)
    #输出结果:('i ', 'love', ' you')   元组类型
    
    
    #replace——替换
    s = "i love you"
    ret = s.replace("i","I")
    print(ret)
    #输出结果:I love you
    
    
    #split——按指定字符分割
    #rsplit——从右向左
    s = "sullisulli"
    ret = s.split("l")
    print(ret)
    #输出结果:['su', '', 'isu', '', 'i']
    ret = s.split("l",1)
    print(ret)
    #输出结果:['su', 'lisulli']
    ret = s.rsplit("l",1)
    print(ret)
    #输出结果:['sullisul', 'i']
    
    
    #swapcase——大写变小写,小写变大写
    s = "Sullivan"
    print(s.swapcase())
    #输出结果:sULLIVAN
    

    4、列表

    创建列表

    name_list = ['alex', 'seven', 'eric']
    或
    name_list = list(['alex', 'seven', 'eric'])
    

    基本操作

    • 索引
    • 切片
    • 循环
    name_list = ["prime","cirila","sullivan"]
    
    #——索引——
    print(name_list[0])
    #输出结果:prime
    
    
    #——切片——
    print(name_list[0:2])
    #输出结果:['prime', 'cirila']
    
    print(name_list[2:len(name_list)])
    #输出结果:['sullivan']
    
    
    #——循环——
    for i in name_list:
        print(i)
    """
    输出结果:
    prime
    cirila
    sullivan
    """
    • 追加
    • 删除
    • 长度
    • 包含
    name_list = ["prime","cirila","sullivan"]
    
    #append——向后追加
    name_list.append('seven')
    name_list.append('seven')
    name_list.append('seven')
    print(name_list)
    
    
    #count——元素出现的次数
    print(name_list.count('seven'))
    
    
    #extend——扩展,批量添加数据
    temp = [111,222,33,44]
    name_list.extend(temp)
    print(name_list)
    
    
    #index——获取指定元素的索引位置
    print(name_list.index('cirila'))
    
    
    #insert——向指定索引位置插入数据
    name_list.insert(1,'SB')
    print(name_list)
    
    
    #pop——在原列表中移除掉最后一个元素,并将移除的元素赋值给a1
    a1 = name_list.pop()
    print(name_list)
    print(a1)
    
    
    #remove——移除从左边数第一个元素
    name_list.remove('seven')
    print(name_list)
    
    
    #reverse——翻转
    name_list.reverse()
    print(name_list)
    
    
    #sort——排序
    # name_list.sort()
    # print(name_list)
    #因为数字和字符都存在所以出错,了解即可
    
    
    #del——删除指定索引位置
    print(name_list)
    del name_list[1]
    print(name_list)
    del name_list[2:3]
    print(name_list)
    上面程序的输出结果
    ['prime', 'cirila', 'sullivan', 'seven', 'seven', 'seven']
    3
    ['prime', 'cirila', 'sullivan', 'seven', 'seven', 'seven', 111, 222, 33, 44]
    1
    ['prime', 'SB', 'cirila', 'sullivan', 'seven', 'seven', 'seven', 111, 222, 33, 44]
    ['prime', 'SB', 'cirila', 'sullivan', 'seven', 'seven', 'seven', 111, 222, 33]
    44
    ['prime', 'SB', 'cirila', 'sullivan', 'seven', 'seven', 111, 222, 33]
    [33, 222, 111, 'seven', 'seven', 'sullivan', 'cirila', 'SB', 'prime']
    [33, 222, 111, 'seven', 'seven', 'sullivan', 'cirila', 'SB', 'prime']
    [33, 111, 'seven', 'seven', 'sullivan', 'cirila', 'SB', 'prime']
    [33, 111, 'seven', 'sullivan', 'cirila', 'SB', 'prime']
    

    5、元组

    创建元组

    ages = (11, 22, 33, 44, 55)
    或
    ages = tuple((11, 22, 33, 44, 55))
    

    特点
      1、元组和列表几乎是一样的
      2、列表是可以进行修改的,元组是不能修改的

    基本操作:
    • 索引
    • 切片
    • 循环
    • 长度
    • 包含
    name_tuple = ('prime','cirila')
    
    #——索引——
    print(name_tuple[0])
    #len,因为长度是2,但是字符的排序是从0开始的
    print(name_tuple[len(name_tuple)-1])
    
    #——切片——
    print(name_tuple[0:1])
    
    #——循环——
    for i in name_tuple:
        print(i)
    
    #count——计算元素出现的个数
    print(name_tuple.count('prime'))
    
    
    #index——获取指定元素的索引位置
    print(name_tuple.index('prime'))
    
    #删除
    #del name_tuple[0],不支持删除
    #TypeError: 'tuple' object doesn't support item deletion
    上面程序的输出结果
    prime cirila ('prime',) prime cirila 1 0

    6、字典(无序) 

    创建字典

    person = {"name": "mr.hou", 'age': 18}
    或
    person = dict({"name": "mr.hou", 'age': 18})
    

    常用操作:

    • 索引
    • 新增
    • 删除
    • 键、值、键值对
    • 循环
    • 长度
    user_info = {
        "name":"ciri",
        "age":16,
        "gender":'W'
    }
    #——索引——
    print(user_info['name'])
    
    
    #——切片——,不能用。因为切片是连续的,自己定义的key没有连续性
    
    
    #——循环——,默认输出所有的key
    for i in user_info:
        print(i)
    for i in user_info.keys():
        print(i)
    """
    输出结果都是
    	name
    	age
    	gender
    """
    
    #输出所有的值
    for i in user_info.values():
        print(i)
    """
    输出结果
    	ciri
    	16
    	W
    """
    	
    #输出所有的键值对
    for k,v in user_info.items():
        print(k,v)
    """
    输出结果
    	name ciri
    	age 16
    	gender W
    """
    
    #获取所有的键key,值value,键值对
    print (user_info.keys())
    print (user_info.values())
    print (user_info.items())
    """
    输出结果
    	dict_keys(['name', 'age', 'gender'])
    	dict_values(['ciri', 16, 'W'])
    	dict_items([('name', 'ciri'), ('age', 16), ('gender', 'W')])
    """
    
    
    #clear——清楚所有的内容
    user_info.clear()
    print(user_info)
    
    
    #get——根据key获取值,如果key不存在,可指定一个默认值,不指定会返回None
    val = user_info.get('age')
    print(val)
    val = user_info.get('age111')
    print(val)
    val = user_info.get('age111','123')
    print(val)
    """
    输出结果
    	16
    	None
    	123
    """
    #索引取值时key不存在,会报错;get则会返回none,所以推荐用get
    
    
    #has_key 检查字典中指定key是否存在,python3里没有了,但是可以用in代替
    ret = 'age' in user_info.keys()
    print(ret)
    
    
    #update——更新
    print(user_info)
    test = {
        "a1": 123,
        "a2": 456
    }
    user_info.update(test)
    print(user_info)
    """
    输出结果
    {'name': 'ciri', 'age': 16, 'gender': 'W'}
    {'name': 'ciri', 'age': 16, 'gender': 'W', 'a1': 123, 'a2': 456}
    """
    
    #del——删除指定索引的键值对
    del test['a1']
    print(test)
    
    
    #pop——获取并在字典中移除,可以传参数,移除指定的值
    #popitem——不能传参数,从尾部移除
    set = user_info.popitem()
    print(set)
    print(user_info)
    set = user_info.pop('name')
    print(set)
    print(user_info)
    """
    输出结果
    	('gender', 'W')
    	{'name': 'ciri', 'age': 16}
    	ciri
    	{'age': 16}
    """
    

    其它  

    1、for循环

    用户按照顺序循环可迭代对象中的内容,
    PS:break、continue
    li = [11,22,33,44]
    for item in li:
        print item

    2、enumrate

     为可迭代对象添加序号

    enumerrate在循环的时候会加上一列,相当于变成了键值对

    li = ["电脑","鼠标垫","U盘","游艇"]
    for key,item in enumerate(li,start=1):
        print(key,item)
    inp = input("请输入商品:")
    #字符串(str)转换成数字(int)
    inp_num = int(inp)
    print(li[inp_num-1])

    3、range和xrange

     指定范围生成指定的数字

    python2.7
      range在2.7里,创建指定范围里的所有
      xrang只在2.7里面有,不会一次性创建所有的数
    python3
      在python3中只有range,且效果等同于27里的xrange

    print range(1, 10)
    # 结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
     
    print range(1, 10, 2)
    # 结果:[1, 3, 5, 7, 9]
     
    print range(30, 0, -2)
    # 结果:[30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2]
    

    练习题  

    一、元素分类

    有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
    即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}

    #写法一
    li = [11,22,33,44,55,66,77,88,99,90]
    l1 = []
    l2 = []
    for i in li:
    	if i <= 66:
    		l1.append(i)
    	else:
    		l2.append(i)
    
    temp = {"k1":  l1,"k2": l2}
    print(temp)
    
    
    #写法二
    li = [11,22,33,44,55,66,77,88,99,90]
    dic = {
        "k1": [],
        "k2": [],
    }
    for i in li:
        if i <=66:
            dic['k1'].append(i)
        else:
            dic['k2'].append(i)
    print(dic) 

    二、查找

    查找列表中元素,移除每个元素的空格,并查找以 a或A开头 并且以 c 结尾的所有元素。
        li = ["alec", " aric", "Alex", "Tony", "rain"]
        tu = ("alec", " aric", "Alex", "Tony", "rain") 
        dic = {'k1': "alex", 'k2': ' aric',  "k3": "Alex", "k4": "Tony"}
    li = ["alec", " aric", "Alex", "Tony", "rain"]
    tu = ("alec", " aric", "Alex", "Tony", "rain")
    dic = {'k1': "alex", 'k2': ' aric',  "k3": "Alex", "k4": "Tony"}
    
    for i in li:
        b = i.strip()
        b = b.title()
        if b.endswith("c") and b.startswith("A"):
            print(b)
    
    for i in tu:
        b = i.strip()
        b = b.title()
        if b.endswith("c") and b.startswith("A"):
            print(b)
    
    for i in dic.values():
        b = i.strip()
        b = b.title()
        if b.endswith("c") and b.startswith("A"):
            print(b)
     

    三、输出商品列表,用户输入序号,显示用户选中的商品

        商品 li = ["手机", "电脑", '鼠标垫', '游艇']
    li = ["电脑","鼠标垫","U盘","游艇"]
    for i,j in enumerate(li,start=1):
        print(i,j)
    inp = input("请输入商品:")
    num = int(inp)
    len_li = len(li)
    if num > 0 and num <= len_li:
        print(li[num-1])
    else:
        print("商品不存在!")

    四、购物车

    功能要求:

    • 要求用户输入总资产,例如:2000
    • 显示商品列表,让用户根据序号选择商品,加入购物车
    • 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
    • 附加:可充值、某商品移除购物车
      goods = [
          {"name": "电脑", "price": 1999},
          {"name": "鼠标", "price": 10},
          {"name": "游艇", "price": 20},
          {"name": "美女", "price": 998},
      ]
    car_list = {}  #{"商品名":{"价格" : 699,"个数" : 1}}
    i1 = input("请输入您的总资产:")
    asset_all = int(i1)
    goods = [
        {"name": "电脑", "price": 1999},
        {"name": "鼠标", "price": 10},
        {"name": "游艇", "price": 20},
        {"name": "美女", "price": 998},
    ]
    for i in goods:
        print(i["name"],i["price"])
            #输出商品列表
    #循环购物
    while True:
        i2 = input("请选择商品,按y退出")
        if i2 == "y":
            break
        for item in goods:
            if item["name"] == i2:
                name = item["name"]
                #判断购物车是否有此类商品
                if name in car_list.keys():
                    car_list[name]["num"] = car_list[name]["num"] + 1
                else:
                    car_list[name] = {"num":1,"single_price":item["price"]}
    print("购物车:",car_list)
    #结算
    all_price = 0
    for k,v in car_list.items():
        n = v["single_price"]
        m = v["num"]
        all_sum = m * n
        all_price = all_price + all_sum
    if all_price > asset_all:
        print("购买失败——穷逼")
    else:
        print("购买成功")

    五、用户交互,显示省市县三级联动的选择

    dic = {
        "河北": {
            "石家庄": ["鹿泉", "藁城", "元氏"],
            "邯郸": ["永年", "涉县", "磁县"],
        },
        "河南": {
            "郑州": ["中原", "惠济", "金水"],
            "开封": ["龙庭", "金明", "顺河"],
        },
        "山西": {
            "太原": ["小店", "迎泽", "杏花岭"],
            "大同": ["南郊", "新荣", "阳高"],
        }
    
    }

     

    dic = {
        "河北": {
            "石家庄": ["鹿泉", "藁城", "元氏"],
            "邯郸": ["永年", "涉县", "磁县"],
        },
        "河南": {
            "郑州": ["中原", "惠济", "金水"],
            "开封": ["龙庭", "金明", "顺河"],
        },
        "山西": {
            "太原": ["小店", "迎泽", "杏花岭"],
            "大同": ["南郊", "新荣", "阳高"],
        }
    
    }
    #循环输出所有的省
    for x in dic:
        print(x)
    i1 = input("请输入省份:")
    #循环输出选择省的市
    a = dic[i1]
    for y in a:
        print(y)
    i2 = input("请输入市:")
    #循环输出选择市的区
    a = dic[i1][i2]
    for z in a:
        print(z)
    i3 = input("请输如区:")
    print("地址为:",i1,i2,i3)
    

      

  • 相关阅读:
    FNV与FNV-1a Hash算法说明【转】
    FNV哈希算法【转】
    git超详细教程【转】
    Git基础篇【转】
    Notepad++中常用的插件【转】
    美化博客园界面(让您的博客更加赏心悦目)希望对您有用【转】
    scanf()总结--从网上收来的,感觉很好,用来提醒自己,c语言真是博大精深!!【转】
    机器人程序设计——之如何正确入门ROS | 硬创公开课(附视频/PPT)【转】
    ROS学习网址【原创】
    机器人操作系统ROS Indigo 入门学习(1)——安装ROS Indigo【转】
  • 原文地址:https://www.cnblogs.com/houzhaohui/p/7294157.html
Copyright © 2020-2023  润新知