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

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))  # 
    print(num5 + num6)  # (12+33j)
    print(num5 * num6)  # (-12+74j)
    

列表

  1. 什么是列表(list)

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

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

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

    # 1)空列表
    list1 = []
    print(list1,type(list1))  # []  
    
    # 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数字和列表及作业)