美文网首页
2020-09-26数字和列表及作业

2020-09-26数字和列表及作业

作者: y_j杨健 | 来源:发表于2020-09-26 21:49 被阅读0次

    day4 - 数字和列表

    数字

    python中和数字相关的类型:int(整型)、float(浮点型)、bool(布尔)、complex(复数)

    1. int(整型) -- 所有整数对应的类型

      python 中整数支持的4中写法:十进制数、二进制数、八进制数、十六进制数

      基数 程序中表示 其他进制转换
      十进制 0 - 9 直接写:1,2,52,36,0
      二进制 0 和 1 0b/0B: 0b1011 bin(数字)
      八进制 0 - 7 0o/0O: 0o1574 oct(数字)
      十六进制 0 - 9,a-f(A-F) 0x/0X: 0x12aff hex(数字)
    1. floa(浮点型) -- 所有小数对应的类型

      # 支持科学技术法: xey  - x乘以10的y次方
      # 计算机在存储浮点数的时候可能会出现误差
      
      num = 3e7
      num2 = 3.24e-4
      
    1. bool(布尔)

      bool类型的本质就是一种特殊的整型,其中True,就是1,False就是0

      print(1 + True) # 2
      print(1 + False) # 1
      
    2. complex(复数)

      由实部和虚部组成的数字就是复数,数学中虚数单位是i,python中虚数单位是j:A + Bj
      `注意:如果虚部是1这个1不能省`
      
      num5 = 10+ 32j
      num6 = 2 + 1j
      print(type(num5))  # <class 'complex'>
      print(num5 + num6)  # (12+33j)
      print(num5 * num6)  # (-12+74j)
      

    列表

    1. 什么是列表(list)

      1)列表是容器型数据类型(序列),将[]作为容器的标志,里面多个元素用逗号隔开:[元素1,元素2,元素3,....]

      1. 列表是可变的(元素个数可变,元素值可变);列表是有序(元素在容器中有顺序)

      3)任何类型的数据都可以作为列表的元素

      # 1)空列表
      list1 = []
      print(list1,type(list1))  # []  <class 'list'>
      
      # 2) 列表元素是任何类型的数据
      list2 = [45,'ad',True,[1,5],'adfd']
      
    1. 列表的增删改查

      1. 查 - 获取元素

        a.获取单个元素

        # 列表[下标]   -  获取列表中指定下标对应的元素
        # 列表  - 想要获取元素对应的列表
        # []   - 固定写法
        # 下标  -  又叫索引;是元素在列表中位置信息对应的标号,每个元素对应的下标有两种:从0开始依次增加(0表示第一个...)从-1开始依次减小(-1表示第一个...)  
        movies = ['八佰','花木兰','信条']
        print(movies[1])  # 花木兰
        
        # 注意:下标不能越界
        # print(movies[10])  # 报错  IndexError: list index out of range
        
        

        b.遍历 - 将列表中的元素一个一个的全部取出来

        """
        for 变量 in 列表:
          循环体
          
        这儿的变量获取到的就是列表中的元素
        """
        # 直接遍历
        for i in movies:
            print(i)
        

        c.遍历同时获取列表元素和元素对应的下标

        """
        for 变量1,变量2 in 列表:
          循环体
          
        变量1获取到的是每个元素对应的下标,变量2获取到的是每个元素
        """
        for x,y in movies:
            print('x:',x,'y:',y)
            
        # 通过遍历列表中每个元素的下标来间接的遍历元素
        for i in range(3):
            print(movies[i])
        
        list1 = [25,56,8,63,9,8,2,522,52]
        for x in range(len(list1)):
            print(list1[x])
        
        
    1. 增 - 添加元素

      a.列表.append(元素) -- 在指定列表的最后添加指定的元素

      hero_list = ['鲁班七号','亚瑟','卢锡安']
      hero_list.append('妲己')
      print(hero_list)
      

      b.列表.insert(下标,元素) -- 在列表指定的下标对应的元素前插入指定的元素

      hero_list = ['鲁班七号','亚瑟','卢锡安']
      hero_list.insert(1,'妲己')
      print(hero_list)
      
    2. 删 - 删除元素

      a.del 列表[下标] - 删除列表中指定下标对应的元素

      masters = ['貂蝉','小乔','王昭君','周瑜']
      del masters[1]
      print(masters)
      

      b.remove(元素) - 删除列表指定的元素

      masters = ['貂蝉','小乔','王昭君','周瑜']
      masters.remove('小乔')
      print(masters)
      

      c.pop() - 取出列表最后一个元素

      ​ pop(下标) - 取出列表指定下标对应的元素

      masters = ['鲁班七号', '盲嶒', '妲己','亚瑟', '卢锡安', '妲己']
      x = masters.pop()
      print(masters,x)  #  ['鲁班七号', '盲嶒', '妲己', '亚瑟', '卢锡安'] 妲己
      
      x = masters.pop(1)
      print(masters,x)  #  ['鲁班七号', '妲己', '亚瑟', '卢锡安'] 盲嶒
      
    3. 改 - 修改元素的值

      列表[下标] = 新值 - 将列表指定下标对应的元素修改成新值

      teleplays = ['人名的名义','甄嬛传','绝命毒师','请回答1988']
      teleplays[0] = '特种兵'
      print(teleplays)
      

    作业

    1.已知一个数字列表,求列表中心元素。

    list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    if len(list1) & 1:
        print(list1[len(list1) // 2])
    else:
        print(list1[len(list1) // 2 - 1], list1[len(list1) // 2])
        
    """
    奇数:count // 2
    个数  下标
    5 -> 2
    7 -> 3
    9 -> 4
    
    偶数:count // 2, count // 2 - 1
    4 -> 1,2
    6 -> 2,3
    8 -> 3,4
    """
    

    2.已知一个数字列表,求所有元素和。

    list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    sum = 0
    for s in list1:
        sum += s
    print(sum)
    
    print(sum(list1))
    

    3.已知一个数字列表,输出所有奇数下标元素。

    list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    for i in range(len(list1)):
        if i & 1:
            print(list1[i])
            
    for index in range(1,len(list1),2)
        print(list1[index])
            
    print(list1[1::2])
    
    

    4.已知一个数字列表,输出所有元素中,值为奇数的元素。

    list1 = [25, 65, 98, 99, 2, 12, 65, 35, 65]
    for num in list1:
        if num & 1:
            print(num)
    

    5.已知一个数字列表,将所有元素乘二。

    例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]

    list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    # 修改列表元素
    for index in range(len(list1)):
        list1[index] *= 2
    

    6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的
    例如:names = ['张三', '李四', '大黄', '张三'] -> names = ['张三', '李四', '大黄']

    names = ['张三', '李四', '大黄', '张三']
    # 方法一:
    names1 = []
    for i in range(0,len(names)):
        for j in range(i+1,len(names)):
            if names[i] == names[j]:
                break
        else:
            names1.append(names[i])
    print(names1)
    
    
    names = ['张三', '李四', '大黄', '张三','张三','李四','王五','张三','小明','小红']
    # 方法二:
    new_names = []
    for i in names:
        if i not in new_names:
            new_names.append(i)
    print(new_names)
    
    # 方法四:  # 拷贝一个新列表 遍历新列表,删除原列表
    for name in names.copy():
        if names.count(name) > 1:
            names.remove(name)
    print(names)
    
    # 方法三:集合,集合是可迭代的
    names = set(names)
    print(names)
    
    

    7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)

    # 方法一:
    scores = [96,87,63,84,82,100,75,56]
    max = min = scores[0] # 假设第一个数为最大值、最小值
    sum = 0
    for i in range(len(scores)):
        if max < scores[i]:
            max = scores[i]
        elif min > scores[i]:
            min = scores[i]
        sum += scores[i]
    print('最后平均分:',(sum - max - min) / (len(scores) -2))
    
    # 方法二:
    scores = [96,87,63,84,82,100,75,56]
    sum =0
    scores.remove(max(scores))
    scores.remove(min(scores))
    for i in scores:
        sum += i
    print(float(sum / len(scores)))
    
    # 方法三:
    scores.remove(max(scores))
    scores.remove(min(scores))
    print(sum(scores) / len(scores))
    

    8.有两个列表A和B,使用列表C来获取两个列表中公共的元素
    例如: A = [1, 'a', 4, 90] B = ['a', 8, 'j', 1] --> C = [1, 'a']

    A = [1, 'a', 4, 90,1]
    B = ['a', 8, 'j', 1]
    C = []
    for a in A:
         if a in B and a not in C:
             C.append(a)
    print(C)  # [1, 'a']
    

    9.有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)

    例如: nums = [19, 89, 90, 600, 1] —> 600

    scores = [96,87,63,84,82,100,75,56]
    max = 0 # 假设一个最大值
    for i in scores:
        if max < i:
            max = i
    print(max)
    
    max_score = scores[0]
    for score in scores[1:]:
        if score > max_score:
            max_score = score
    print(max_score)
    
    

    10.获取列表中出现次数最多的元素

    例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:3

    nums = [1, 2, 3,1,4,2,1,3,2,7,3,3]
    count = 0
    cou = 0
    cou_i = 0
    for i in range(len(nums)):
        for j in range(i+1,len(nums)):
            if nums[i] == nums[j]:
                count += 1
        if cou < count:
            cou = count
            cou_i = i
    print(nums[cou_i])
    
    # 方法二:
    nums = [1, 2, 3,1,4,2,1,3,7,3,3
    max_count = 0
    for x in nums:
        count = nums.count(x)
        if count > max_count:
            max_count = count
    
    new_num = []
    for x in nums:
        if nums.count(x) == max_count and x not in new_num:
            new_num.append(x)
    print(new_num)
    
    
    1. 判断101-200之间有多少个素数,并输出所有素数。

      count = 0
      nums = []
      for i in range(101, 200):
          for j in range(2, i):
              if i % j == 0:
                  break
          else:
              count += 1
              nums.append(j)
      print('101-200之间共有{}个素数:'.format(count),nums)
      
    1. 求整数1~100的累加值,但要求跳过所有个位为3的数。

      sum = 0
      for i in range(101):
          if i % 10 == 3:
              continue
          sum += i
      print(sum)
      
      
    1. 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的第20个分数

      n = 20
      p1,p2 = 2,1
      if n == 1:
        p1,p2 = 2,1
      else:
          for x in range(n-1):
              p1,p2 = p1+p2 ,p1
      print(p1,'/',p2)
      
    1. 写程序计算 n 的阶乘 n! 的结果

    2. 求1+2!+3!+...+20!的和

    3. 写程序求表达式 a + aa + aaa + aaaa+ ... 的结果,其中a是1~9的数字,求和的项数用n来控制。(a和n可以用变量来表示)

      例如:a为3, n为5的时候: 3 + 33 + 333 + 3333 + 33333

    4. 控制台输出三角形

      a.根据n的值的不同,输出相应的形状
      n = 5时             n = 4
      *****               ****
      ****                ***
      ***                 **
      **                  *
      *
      n = 4
      for j in range(n):
          for i in range(j,n):
              print('*',end=' ')
          print('')
      
      b.根据n的值的不同,输出相应的形状(n为奇数)
      n = 5               n = 7
        *                    *
       ***                  ***
      *****                *****
                          *******
      
      c. 根据n的值的不同,输出相应的形状
      n = 4
         1
        121
       12321
      1234321
      
      n = 5
          1
         121
        12321
       1234321
      123454321
      
    1. 小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元正好花掉,可有哪些购买结合?

    2. 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?

    3. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    4. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。

    5. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值

    6. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。

    7. 本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。

    8. 输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)

    9. 求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)

    相关文章

      网友评论

          本文标题:2020-09-26数字和列表及作业

          本文链接:https://www.haomeiwen.com/subject/edphuktx.html