题目46
# 画一个正方形
# 随便一搜,就有相关的库,这里使用tkinter库
# 使用tkinter库
from tkinter import *
# 使用画布控件 Canvas,创建一个画布
# Canvas的参数很多:我们用其中的width height bg(background)
canvas = Canvas(width=800, height=600, bg='green')
canvas.pack()
# 直接用四个点来确认一个正方形,就是画四条线
points = (100,200,200,200,200,300,100,300,100,200)
canvas.create_line(points, width=1,fill='pink')
# 用画矩形的方法
canvas.create_rectangle(400,500,500,600,fill='yellow')
mainloop() # 这个是必须的,没有这个就没有窗口
题目47
# 画一个椭圆
# 随便一搜,就有相关的库,这里使用tkinter库
# 使用tkinter库
from tkinter import *
# 使用画布控件 Canvas,创建一个画布
# Canvas的参数很多:我们用其中的width height bg(background)
canvas = Canvas(width=800, height=600, bg='green')
canvas.pack()
# 直接用四个点来确认一个正方形,就是画四条线
canvas.create_oval(100,100,200,150,fill='purple')
mainloop() # 这个是必须的,没有这个就没有窗口
题目48
# 输入一个数组,最大的与第一个交换,最小的与最后一个交换
# 第一种方法
nums = []
while True:
try:
elm = int(input("请输入一个数,输入其它非数字字符结束:\n"))
nums.append(elm)
except ValueError:
print("当前已经输入的内容是:",nums)
break
def func1(my_list:list):
"""找到数组中最小和最大的数字,然后分别将它们与最后一个和第一个元素交换
Args:
my_list (list): 传入需要被操作的列表
"""
if not len(my_list):
print("传入的列表中没有数据!!!")
return None
tmp = sorted(my_list) # 默认是升序index=0的是最小的,index最大的是最大的
index1 = my_list.index(tmp[-1])
my_list[0], my_list[index1] = my_list[index1], my_list[0]
index1 = my_list.index(tmp[0])
my_list[-1], my_list[index1] = my_list[index1], my_list[-1]
nums1 = nums[:]
print("nums = ", nums)
func1(nums)
print("nums = ", nums)
# 第二种方法
def find_min_max(my_list:list): # sourcery skip: avoid-builtin-shadow
"""先找到最小的,然后找最大的,把他们放入指定的位置
Args:
my_list (list): 查找的范围
"""
def exchange_elm(my_list, arg1, arg2):
result = my_list.index(arg1)
my_list[arg2], my_list[result] = my_list[result], my_list[arg2]
# print("my_list = ", my_list)
if not len(my_list):
print("传入的列表中没有数据!!!")
return None
list_min = min(my_list)
list_max = max(my_list)
# print("list_min = ", list_min)
# print("list_max = ", list_max)
exchange_elm(my_list, list_max, 0)
exchange_elm(my_list, list_min, -1)
print("nums1 = ", nums1)
find_min_max(nums1)
print("nums1 = ", nums1)
题目49
# 有n个整数,使其前面的各数向后移动m个位置,最后m个数字变成最前面的m个数
def listmove(my_list:list, m:int):
"""前面的各数向后移动m个位置,最后的m个数字变成最前面的m个数字
Args:
my_list (list): 待处理的列表
m (int): 移动的位置
"""
try:
if len(my_list) < m:
raise("参数m的值已经超过参数my_list的长度")
# 前面的各个数字向后移动m
my_list = my_list[len(my_list) - m:] + my_list[:len(my_list) - m]
print("my_list = ", my_list)
# 最后的m个数字变成最前面的m个数字
for i in range(m):
my_list[m + i],my_list[-m+i] = my_list[-m+i],my_list[m+i]
return my_list
except ValueError as ve:
print(ve)
return None
nums = [1,2,3,4,5,6]
print("nums = ", nums)
nums = listmove(nums,2)
print("nums = ", nums)
listmove(nums,10)
题目50
# 有n个人组成一个圈,顺序排号,从第一个开始报数,从第一个开始报数(1~3),凡报到3的人退出
# 关键信息1: 组成一个圈:如果第n个人报数2,那么第一个人就得报数3
# 关键信息2: 报数范围(1~3)
# 关键信息3: 报到3的人退出
# 过程分析 举例: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 如果下-个报数的是初始index最小那个,我们称为本轮结束,下一轮开始
# 原始index: 0 1 2 3 4 5 6 7 8 9
# 第一轮: 1 2 3 1 2 3 1 2 3 1 # 剔除原始index 2,5,8, 下一轮从2开始数
# 原始index: 0 1 3 4 6 7 9
# 第二轮: 2 3 1 2 3 1 2 # 剔除原始index 1 6, 下一轮从3开始
# 原始index: 0 3 4 7 9
# 第三轮: 3 1 2 3 1 # 剔除原始index 0 7, 下一轮从2开始
# 原始index: 3,4,9
# 第四轮: 2,3,1 # 剔除原始index 4,下一轮从2开始
# 原始index: 3,9
# 第五轮: 2,3 # 剔除掉原始index 9 ,下一轮从1开始
# 原始index: 3
# 第一种使用递归:
def pop_who_is_three(nums: list, begin: int, out_num: int = 3):
print(f"left list = {nums}, current begin = {begin}")
tmp = []
if len(nums) < 2:
return nums
for x in nums:
if begin % 3:
tmp.append(x)
begin += 1
if begin > 3:
begin = 1
return pop_who_is_three(tmp, begin, out_num)
# 非递归
def pop_who_is_three1(nums: int):
out_num = 3
begin = 1
tmp = nums[:]
while True:
nums1 = tmp[:]
tmp.clear()
if len(nums1) < 2:
return nums1
for x in nums1:
if begin % 3:
tmp.append(x)
begin += 1
if begin > 3:
begin = 1
my_nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print("my_nums:", my_nums)
print(pop_who_is_three(my_nums.copy(), 1, 3))
print(pop_who_is_three1(my_nums))
# 输出
# my_nums: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# left list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], current begin = 1
# left list = [1, 2, 4, 5, 7, 8, 10], current begin = 2
# left list = [1, 4, 5, 8, 10], current begin = 3
# left list = [4, 5, 10], current begin = 2
# left list = [4, 10], current begin = 2
# left list = [4], current begin = 1
# [4]
# [4]