第一题
代码如下:
class Game:
def __init__(self):
self.person_list = [0, 0, 0, 0]
self.person_list_1 = ['甲', '乙', '丙', '丁']
@staticmethod
def judge_number(number):
if '7' in str(number):
return False
else:
if number % 7 == 0:
return False
else:
return True
def call_number(self, i_number):
c_number = 1
flag = -1
amount = 0
while True:
flag += 1
if self.judge_number(c_number):
# 报出数字
amount += 1
else:
# 跳过
self.person_list[(flag % 4)] += 1
c_number += 1
if amount == i_number:
break
[print(i) for i in self.person_list]
if __name__ == '__main__':
game = Game()
i_number = int(input(""))
game.call_number(i_number)
提交结果:
第二题
代码如下:
"""
题意理解:
选用字典存储坐标点的数据
key:x的坐标
vale: y的坐标
"""
class Exam:
def __init__(self):
self.score = [0, 0, 0, 0, 0]
self.all_numbers = int(input(""))
self.positions = {}
for i in range(0, self.all_numbers):
x, y = input().split(" ")
if x in self.positions.keys():
self.positions[x] += "," + y
else:
self.positions[x] = y
def find_one(self):
final_x = []
final_y = []
for i in self.positions.keys():
x = int(i)
if str(x+1) in self.positions.keys() and str(x-1) in self.positions.keys():
# 如果当前坐标的左右的x线上有点,则继续
y_list = self.positions[i].split(",")
for j in y_list:
# 遍历当前x坐标的所有y点
y = int(j)
# 此时x, y为当前选中坐标点
if str(y+1) in y_list and str(y-1) in y_list:
# 接下来判断x两边是否有相邻点
left_y_list = self.positions[str(x+1)].split(",")
right_y_list = self.positions[str(x-1)].split(",")
if j in left_y_list and j in right_y_list:
final_x.append(x)
final_y.append(y)
return final_x, final_y
def find_two(self, x, y):
# 此处传来的值已经验证过x和y两边都有点,只需查看y点是否在里面即可
for i in range(len(x)):
flag = 0
if str(y[i]+1) in self.positions[str(x[i]+1)].split(","):
flag += 1
if str(y[i]-1) in self.positions[str(x[i]+1)].split(","):
flag += 1
if str(y[i]+1) in self.positions[str(x[i]-1)].split(","):
flag += 1
if str(y[i]-1) in self.positions[str(x[i]-1)].split(","):
flag += 1
self.score[flag] += 1
[print(i) for i in self.score]
if __name__ == "__main__":
exam = Exam()
all_x, all_y = exam.find_one()
exam.find_two(all_x, all_y)
提交结果: