第七次作业

Demo61 指定等级

 
  1. #初始化数据

  2. student_num = int(input("请输入人数:"))

  3. grade = eval(input("请输入对应学生成绩:"))

  4. #算出最大值

  5. best = max(grade)

  6. #分级

  7. for i in range(student_num) :

  8. if grade[i] >= best-10 :

  9. print(f"学生{i}分数为{grade[i]}等级为A")

  10. elif grade[i] >= best-20 :

  11. print(f"学生{i}分数为{grade[i]}等级为B")

  12. elif grade[i] >= best-30 :

  13. print(f"学生{i}分数为{grade[i]}等级为C")

  14. elif grade[i] >= best-40 :

  15. print(f"学生{i}分数为{grade[i]}等级为D")

  16. else :

  17. print(f"学生{i}分数为{grade[i]}等级为E")

Demo62 计算数字的出现次数

 
  1. #初始化数据

  2. num = int(input("请输入数的个数:"))

  3. array = list(eval(input("请输入数据:")))

  4. #插入排序

  5. def sort(array) :

  6. for i in range(len(array) - 1) :

  7. for j in range(len(array) - 1 , 0 , -1) :

  8. if array[j] < array[j - 1] :

  9. array[j] , array[j -1] = array[j - 1] , array[j]

  10. return array

  11. array = sort(array)

  12. #函数计数

  13. def search (num , array) :

  14. #初始化容纳计数的数

  15. temp = 0

  16. #下标法表示数组中的数

  17. for i in range(num) :

  18. #如果前一个数和当前数相等,直接跳过该次循环

  19. if array[i - 1] == array[i] :

  20. continue

  21. #如果不相同,则进行计数

  22. else :

  23. #循环,有一个相同的数计数容器加一

  24. for j in range(i , num) :

  25. if array[i] == array[j] :

  26. temp += 1

  27. #若不相同,直接跳出循环

  28. else :

  29. break

  30. print(f"{array[i]}出现过{temp}次")

  31. #相同数计数完成将容纳计数的数归零

  32. temp = 0

  33. search(num , array)

Demo63 打印不同的数

 
  1. #初始化数据

  2. num = int(input("请输入数的个数:"))

  3. array = list(eval(input("请输入数据:")))

  4. #使用集合的特性直接实现去重

  5. array = list(set(array))

  6. print(array)

Demo64 最大公约数II

 
  1. def gcd(a, b):

  2. '''

  3. 功能:求最大公约数

  4. 参数a:一个数

  5. 参数b:一个数

  6. 返回两个数的最大公约数

  7. '''

  8. if b == 0:

  9. return a

  10. else:

  11. return gcd(b, a % b)

  12. def multi_gcd(nums):

  13. '''

  14. 功能:循环遍历求数组中每一个数共同的最大公约数

  15. 参数nums:传入数组

  16. 返回最大公约数

  17. '''

  18. result = nums[0]

  19. for i in range(1, len(nums)):

  20. result = gcd(result, nums[i])

  21. return result

  22. if __name__ == "__main__" :

  23. nums = [12, 24, 36, 48 , 3]

  24. print(multi_gcd(nums))

Demo65 打乱数组

 
  1. def disarray(array) :

  2. '''

  3. 功能:打乱数组

  4. 参数array表示传入数组

  5. 返回打乱的数组

  6. '''

  7. array = list(set(array))

  8. return array

  9. if __name__ == "__main__" :

  10. array = input("请输入一共数组:")

  11. print(disarray(array))

Demo66 是否有序

 
  1. def is_non_decreasing(arr):

  2. '''

  3. 功能:判断数组是否非单调递减

  4. 参数arr:传入数组

  5. 返回判断值,True为非单调递减,False为不是非单调递减

  6. '''

  7. for i in range(len(arr)-1):

  8. if arr[i] > arr[i+1]:

  9. return False

  10. return True

  11. def creat_arr(temp) :

  12. '''

  13. 功能:创建数组并储存在列表里面

  14. 参数temp表示创建多少个数组

  15. 返回创建的列表

  16. '''

  17. array = []

  18. for i in range(temp) :

  19. num = int(input("请输入数组的长度:"))

  20. arr = eval(input("请输入一个数组:"))

  21. array.append(arr)

  22. return array

  23. if __name__ == "__main__" :

  24. temp = int(input("请输入数组的个数:"))

  25. array = creat_arr(temp)

  26. for i in range(temp) :

  27. if is_non_decreasing(array[i]) :

  28. print("YES")

  29. else :

  30. print("NO")

Demo67 相似词

 
  1. def judge(array1 , array2) :

  2. '''

  3. 功能:判断单词是否一致

  4. 参数array1和array2是传入两个单词

  5. 返回判断值,相同返回True,不同返回False

  6. '''

  7. if len(array1) == len(array2) :

  8. for i in array1 :

  9. if i in array2 :

  10. return True

  11. else :

  12. return False

  13. else :

  14. return False

  15. if __name__ == "__main__" :

  16. array1 = input("请输入一个单词:")

  17. array2 = input("请输入第二个单词:")

  18. if judge(array1 , array2) :

  19. print("YES")

  20. else :

  21. print("NO")

Demo68 豆机器

 
  1. import random

  2. def top_plate(n, m):

  3. """

  4. 功能:计算每一个槽里的豆子数量,并打印每一颗豆子掉落的方向

  5. 参数n传入豆子个数

  6. 参数m传入槽数

  7. 返回每个槽中的豆子个数并用列表表现

  8. 原理:每一豆子碰到钉子有50%的概率向左滚动或者向右滚动,故使用一共数用来表示槽的位置,向某一方向滚动一次该数加一。

  9. 每有一颗豆子滚完,列表对应槽的数加一

  10. """

  11. temp_num = 0

  12. temp_arr = [0 for i in range(m)]

  13. for i in range(n):

  14. temp_num = 0

  15. direction = []

  16. for j in range(m - 1):

  17. if random.random() > 0.5:

  18. temp_num += 1

  19. direction.append("R")

  20. else:

  21. direction.append("L")

  22. print(f"第{i + 1}颗豆子掉落的方向为:{''.join(direction)}")

  23. temp_arr[temp_num] += 1

  24. return temp_arr

  25. if __name__ == "__main__":

  26. num_n = int(input("请输入豆子的个数:"))

  27. num_m = int(input("请输入槽的个数:"))

  28. print(f"每个槽中豆子数量分别为:{top_plate(num_n, num_m)}")

Demo69 更衣室难题

 
  1. def door():

  2. '''

  3. 功能:判断100个学生使用后还开启的门,开启的门用True表示,反之用False表示

  4. 返回值为包含True和False的列表

  5. '''

  6. temp_door = [False for i in range(100)]

  7. for s in range(1, 101):

  8. for l in range(s, 100, s + 1):

  9. if s == 1:

  10. temp_door[l - 1] = not temp_door[l - 1]

  11. elif s == 2:

  12. temp_door = [False for i in temp_door]

  13. temp_door[1] = True

  14. else:

  15. temp_door[l - 1] = not temp_door[l - 1]

  16. return temp_door

  17. def pri(arr):

  18. '''

  19. 功能:将包含True和False的列表中的每一个True翻译为下标加1的列表

  20. 参数arr表示传入包含True和False的列表

  21. 返回包含下标加1的列表

  22. '''

  23. door_id = []

  24. for i in range(100):

  25. if arr[i]:

  26. door_id.append(i + 1)

  27. return door_id

  28. if __name__ == '__main__':

  29. print(f"还开着的门有:{pri(door())}")

Demo70 合并两个有序数组

 
  1. def array_merge(A , B) :

  2. '''

  3. 功能:合并数组并且排序

  4. 参数传入两个数组

  5. 返回合并并且排好序的数组

  6. '''

  7. C = A + B

  8. C = [int(i) for i in C]

  9. for i in range(len(C) - 1) :

  10. for j in range(len(C) - 1 , 0 , -1) :

  11. if C[j] < C[j - 1] :

  12. C[j] , C[j - 1] = C[j - 1] , C[j]

  13. return C

  14. if __name__ == "__main__" :

  15. n_A = int(input("请输入A数组的长度:"))

  16. A = eval(input("请输入A数组,用逗号分隔:"))

  17. n_B = int(input("请输入B数组的长度:"))

  18. B = eval(input("请输入B数组,用逗号分隔:"))

  19. print(array_merge(A , B))

Demo71 数组划分

 
  1. def separation_arr(A) :

  2. '''

  3. 功能:划分数组并重新组合

  4. 参数传入数组

  5. 返回重组后的数组

  6. '''

  7. arr_1 = []

  8. arr_2 = []

  9. arr_3 = []

  10. for i in A :

  11. if i < A[0] :

  12. arr_1.append(i)

  13. elif i == A[0] :

  14. arr_2.append(i)

  15. else :

  16. arr_3.append(i)

  17. return arr_1 + arr_2 + arr_3

  18. if __name__ == "__main__" :

  19. n = int(input("请输入数组的长度:"))

  20. A = eval(input("请输入一共数组,用逗号相隔:"))

  21. print(separation_arr(A))

某个人进入如下一个棋盘中,要求从左上角开始走,最后从右下角出来(要求只能前进,不能后退),问题:共有多少种走法?

 
  1. def bushu(l , h) :

  2. '''

  3. 功能:计算走法

  4. 参数l和h用来传入宽和行高

  5. 返回走法

  6. '''

  7. if l == 1 :

  8. return 1

  9. if h == 1 :

  10. return 1

  11. else :

  12. return bushu(l - 1 , h) + bushu(l , h - 1)

  13. if __name__ == "__main__" :

  14. l , h = map(int , (input("请输入棋盘的宽和行高,用空格分隔:").split(" ")))

  15. print(bushu(l,h))

输入一行符号,以#结束,判断其中的对称符号是否匹配。对称符号包括:{ } 、 [ ] 、 ( )、 < >

 
  1. def fanls(s) :

  2. list1 = []

  3. for i in s :

  4. if i == "#" :

  5. break

  6. else :

  7. list1.append(i)

  8. return list1

  9. def pandu(list1:list) :

  10. list2 = []

  11. list2 = list1.copy()

  12. list2.reverse()

  13. c = 0

  14. for x in list2 :

  15. if x == "}" :

  16. list2[c] = "{"

  17. elif x == "{" :

  18. list2[c] = "}"

  19. elif x == "[" :

  20. list2[c] = "]"

  21. elif x == "]" :

  22. list2[c] = "["

  23. elif x == "(" :

  24. list2[c] = ")"

  25. elif x == ")" :

  26. list2[c] = "("

  27. elif x == "<" :

  28. list2[c] = ">"

  29. elif x == ">" :

  30. list2[c] = "<"

  31. c += 1

  32. if list1 == list2 :

  33. return "yes"

  34. else :

  35. return "no"

  36. if __name__ == "__main__" :

  37. s = input("请输入一串符号以#结束")

  38. list1 = fanls(s)

  39. print(pandu(list1))

给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数

 
  1. def renum(list1:list) :

  2. c = 0

  3. for i in list1 :

  4. c = c + 1

  5. list1.sort()

  6. for x in range(c) :

  7. if list1[x] == list1[x + 1] :

  8. return list1[x]

  9. if __name__ == "__main__" :

  10. list2 = [1,2,3,4,5,6,7,7,8,9,10]

  11. print(renum(list2))

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值