01 题目如下:
02 第一次编程:错误理解了题目意思
题目中有一句:同一个测试用例里可能会有多组数据,希望大家能正确处理。
这句话对我产生了很大的误导,我以为是系统输入一次性输入多个测试用例,我们需要将多个测试用例的“学生号码”进行去重排序。
所以,一开始我的思路是这样的:
(1)第一步,先将系统所有输入读取,放入列表
(2)第二步,找出随机整数个数的标记index
(3)去除该index位置的值,得到新的列表
(4)将新的列表,转成set去重,再转成list排序即可
因此,代码如下:
import sys
# 第一步
lines = sys.stdin.readlines()
lines = [int(line.strip()) for line in lines]
num_list = lines.copy()
num_index = []
num_len = len(num_list)
n=0
# 第二步
while n<num_len:
num_index.append(n)
n = n+1+num_list[n]
# 第三步
for i in num_index:
del num_list[i]
# 第四步
num_list = list(set(num_list))
num_list.sort(reverse = False)
for i in num_list:
print(i)
错误原因:同一个测试用例里可能会有多组数据,希望大家能正确处理。意思是,这组测试用例是多行输入的,并不是上述理解方式。
03 第二次编程:修改代码
(1)每次读取一个值,第一次读取的即为随机数的个数
(2)根据随机数个数,循环读取每一个学生号码,获得一个list
(3)同样,利用set去重,再转成list排序
(4)循环读取每一个测试样例,直到读取完毕
因此,代码如下:
import sys
while True:
try:
num_count = int(sys.stdin.readline())
stu_list = []
for i in range(num_count):
stu_list.append(int(sys.stdin.readline()))
stu_list = list(set(stu_list))
stu_list.sort(reverse = False)
for each in stu_list:
print(each)
except:
break
当然,代码还可以进一步优化!!
在循环读取学生号码的时候,可以直接将学生号码直接加到set中,省去一个步骤。
代码如下:
import sys
while True:
try:
num_count = int(sys.stdin.readline())
stu_list = set() # 注意set的声明
for i in range(num_count):
# set使用add方法添加数据
stu_list.add(int(sys.stdin.readline()))
stu_list = list(stu_list)
stu_list.sort(reverse = False)
for each in stu_list:
print(each)
except:
break
04 注意:
- set的声明
stu_list = set()
- set添加数据:add()
stu_list.add(num)
05 别人用input()读取输入的代码
while True:
try:
nums_count = int(input())
nums = set()
for i in range(nums_count):
nums.add(int(input()))
nums = sorted(list(nums))
for each in nums:
print(each)
except:
break