《练习100》86~90

题目86

# 生成一个包含20个随机整数(100以内)的列表,对其中偶数索引(下标)的数据进行降序排列,奇数索引的元素不变
import random
list1 = [random.randint(0,100) for _ in range(20)]
list2 = list1[::2]
list3 = list1[1::2]
list_tmp = list1[:]
list2.sort(reverse=True)
print(list1)
list1.clear()
for i in range(10):
    list1.extend((list2[i], list3[i]))
print(list1)


# 这是答案
print(list_tmp)
list_tmp[::2] = sorted(list_tmp[::2], reverse=True)
print(list_tmp)        

# 原来切片可以放在等号右边(我把它理解成分段赋值)
# 练习一下

list1 = [1,2,3,4,5,6]
print(list1)
list1[:] = ['a' for _ in range(6)]
print(list1)
list1[::2] = [1 for _ in range(3)]
print(list1)
list1[1::2] = ['cccc' for _ in range(3)]
print(list1)
list1[3:7] = ['DDDDD' for _ in range(3)]
print(list1)
list1[3:7:2] = ['FFFFFFF' for _ in range(2)]
print(list1)

# 这样的使用的话,注意右边列表中的元素数量要和左边一样,不一样要报错
# list1[3:7:2] = ['FFFFFFF' for _ in range(10)] #attempt to assign sequence of size 10 to extended slice of size 2

题目87

# 最少多少个9能整除输入的奇数
def get_divisibility(div:int):
    x = '9'
    while True:
        if not int(x) % div:
            return len(x)

        x += '9'
        
while True:
    try:
        num = int(input('请输入一个奇数:\n'))
        if  not num % 2  or not num % 5:
            raise ValueError()

        cnt = get_divisibility(num)
        print(f'{cnt}个"9"能整除{num}')
    except (ValueError, TypeError):
        print('请输入一个位不是5个奇数!!!!!!!!!!!')

题目88

# 809 * ?? = 800 * ?? + 9 * ?? 
# 条件:
# ?? 是一个两位数 
# 809 * ?? 是一个四位数
# 8* ?? 是一个两位数
# 9*??是一个三位数
# 求 ??代表的两位数以及809*??后的结果

a = 809
for i in range(10,100):
    if 809 * i == 800 * i + 9 * i and 1000 <= 809 * i <10000 and 10 <= 8 * i < 100 and 100 <= 9 * i < 1000:
        print(i)
        break
        
# 8 和 9 乘以这个两位数,正好是两位数和三位数的边界,直接穷举
# 10 8 * 10 = 80 9 * 10 = 90 这个pass
# 11   88    99   pass
# 12   96    108  
# 13  8 * 13 = 104 这个直接排除掉了

for i in range(10,100):
    if i * 8 < 100 and i * 9 > 100:
        print(i)
        break

题目89

# 列表偏移 list = [1,2,3,4,5] 向右偏移两位,变成[4,5,1,2,3]

list1 = [1, 2, 3, 4, 5]
list2 = list1[:]
list3 = list1[:]

# 整体向右移动两位,意思就是把最后两个元素依次插入到原来的列表头
def right_move(origin, step: int):
    tmp = origin[:]
    for i in range(step):
        tmp.insert(0, origin[-i-1])
    return tmp[:len(tmp) - step]

print(list1)
list1 = right_move(list1, 2)
print(list1)

# 利用拼接(原列表的倒数两个 + 原列表整数三个)
print(list2)
list2 = list2[-1:-1-2:-1] + list2[:len(list2) - 2]
# list2 = list2[len(list2) - 2:] + list2[:len(list2) - 2]
print(list2)

题目90

# 输入n个成绩,换行输出成绩中的最高分和最低分的差

score = input('请输入成绩,成绩间用空格隔开:')
print(score)
score_list = [int(x) for x in score.split(' ') if x not in [' ', '']]
# 第一种: 使用max() min()获取最大最小
high = max(score_list)
low = min(score_list)
print("输入成绩中的最高分与最低分的分差为:", high - low)
# 第二种:先排序,在确定的位置找到最大和最小
score_list.sort()
print("输入成绩中的最高分与最低分的分差为:", score_list[-1] - score_list[0])

你可能感兴趣的:(Python学习笔记,python,开发语言,学习)