华为机试题:HJ3 明明的随机数(python)

描述:明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。

数据范围: 1≤n≤1000 ,输入的数字大小满足 1≤val≤500

输入描述:第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。 具体格式可以参考下面的"示例"。

输出描述:输出多行,表示输入数据处理后的结果

示例1

输入:3
输入:2
输入:2
输入:1
说明:第一个数字是3,也即这个小样例的N=3,说明用计算机生成了3个1到500之间的随机整数,接下来每行一个随机数字,共3行。
输出:1
输出:2

Python3

while True:
    try:
        line_num, num = int(input()), set()
        for i in range(line_num):
            num.add(int(input()))
        for j in sorted(list(num)):
            print(j)
    except:
        break
        
  • input():用于获取控制台的输入。
  • int() :强制转换为整型(强转)。
  • set() :创建集合。其表示一个无序不重复元素的序列。
  • range() :输出指定范围内的所有值(前闭后开)。
  • add() :用于向集合中添加元素。
  • list():创建列表。将任何可迭代序列转换为列表类型,并返回转换后的列表。
  • sorted() :对所有可迭代类型进行排序。不改变原始序列,返回排序后的新序列。
  • print() :用于打印输出。

知识点详解

1、int() :强制转换为整型(强转)。

【Python】int()用法详解

  • 输入参数:不带参数直接 int(),返回整数 0
  • 输入参数:整数,返回:原来的整数
  • 输入参数:浮点数,返回浮点数的整数
  • 输入参数:字符串(整数),将字符串类型转换为int类型转换。
  • 输入参数:字符串(浮点数),需先转换为float类型,再进行int转换,否则报错。
print(int())                    # 【输出结果】0
print(int(2))                   # 【输出结果】2
print(int(-2.9))                # 【输出结果】-2
print(int('-2'))                # 【输出结果】-2
print(int(float('-2.9')))       # 【输出结果】-2

2、set() :创建集合。其表示一个无序不重复元素的序列。

【Python】集合set的使用详解

无序:无论序列中的元素在赋值给变量之前是什么顺序,赋值后各元素位置都将会随机显示。
不重复:对序列中的重复元素,赋值给变量后系统会自动去除重复元素,只保留一个。

  • 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
  • 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
    备注1:不可变就是变量赋值 / 定义后不可改变,但可以通过拼接操作符等的方式改变。
    备注2:【列表、元组和字符串】都属于序列。

集合的创建方法:

  • (1)创建空集:set()
  • (2)创建集合:set((A,B))
  • (3)创建集合:{}
  • 备注1:创建空集合必须用 set() 而不能是 { },因为 { } 是用来表示空字典类型的。
  • 备注1:set() 对字符串也会去重,因为字符串属于序列。
# (1)创建空集:set()
person1 = set()         # 空集合
print(len(person1))     # 【输出结果】0
print(person1)          # 【输出结果】set()

# (2)创建集合:set((A,B))
person2 = set(("student", "teacher", "babe", 123, 321, 123))
print(len(person2))     # 【输出结果】5
print(person2)          # 【输出结果】{321, 'teacher', 'babe', 123, 'student'}

# (3)创建集合:{}
person = {"student", "teacher", "babe", 123, 321, 123}
print(len(person))      # 【输出结果】5
print(person)           # 【输出结果】{'student', 321, 'teacher', 123, 'babe'}

# 字符串去重
str1 = set("abcde")
str2 = set("abcd")
print(str1, str2)                                    	# 【输出结果】{'b', 'c', 'a', 'd', 'e'} {'b', 'c', 'd', 'a'}
print(str1 - str2)      # set()之间可以使用减号运算     	# 【输出结果】{'e'}
print(str2-str1)        # 空值                        	# 【输出结果】set()
# print(str1+str2)      # set()之间不能使用加号运算

3、add() :用于向集合中添加元素。

集合名.add(添加的元素)

  • (1)添加的元素只能是不可变数据类型,因此不能向集合中添加列表、元组、集合。
  • (2)如果添加的元素已经存在集合中,则不执行添加操作,程序也不会报错。因为集合是一个无序不重复元素的序列。
  • (3)每次只能添加一个元素,否则系统报错。
set_city = {'北京', '上海', '广州'}
print('添加前的集合:', set_city)      # 【输出结果】添加前的集合: {'上海', '北京', '广州'}

set_city.add('重庆')
print('添加后的集合:', set_city)      # 【输出结果】添加后的集合: {'上海', '北京', '重庆', '广州'}

set_city.add('上海')
print('添加后的集合:', set_city)      # 【输出结果】添加后的集合: {'上海', '北京', '重庆', '广州'}

4、range() :输出指定范围内的所有值(前闭后开)。

range(start=0,stop,step=1)
参数说明:

  • (1)start:序列的起始点,默认值0。
  • (2)stop:序列的终止点。
  • (3)step:滑动步长,默认为1。正数表示迭代上升,负数表示迭代下降。

备注:前闭后开[A,B),即可以取到A值,但取不到B值。

# (1)指定stop=9, start默认为0,step默认为1
for i in range(9):
    print('A =', i)
'''
A = 0
A = 1
A = 2
A = 3
A = 4
A = 5
A = 6
A = 7
A = 8
'''
# (2)指定start=2, stop=9, step默认为1
for i in range(2, 9):
    print('B =', i)
'''
B = 2
B = 3
B = 4
B = 5
B = 6
B = 7
B = 8
'''
# (3)指定start=2, stop=9, step=-2
for i in range(9, 2, -2):
    print('C =', i)
'''
C = 9
C = 7
C = 5
C = 3
'''

5、list():创建列表。将任何可迭代序列转换为列表类型,并返回转换后的列表。

list(object)

  • object:待转换为列表的数据类型。object可省略,若参数为空,则创建一个空列表。

备注1:参数必须是可迭代序列对象,否则系统报错。
备注2:将字典转换为列表时,默认只输出key,而舍去value。若想将字典的值转换为列表,可以使用dict.values()默认dict.keys()

# (1)创建一个空列表
test1 = list()
print(test1)                            # 【输出结果】[]
#################################################################
# (2)将字符串转换为列表
test2 = list('cat')
print(test2)                            # 【输出结果】['c', 'a', 't']
#################################################################
# (3)将元组转换为列表
test3 = list(('I love Python.', 'I also love HTML.'))
print(test3)                            # 【输出结果】['I love Python.', 'I also love HTML.']
#################################################################
# (4)将字典转换为列表
test4 = list({'China': 'Beijing', 'Russia': 'Moscow'})
test44 = list({'China': 'Beijing', 'Russia': 'Moscow'}.keys())      
test444 = list({'China': 'Beijing', 'Russia': 'Moscow'}.values())
print(test4)                            # 【输出结果】['China', 'Russia']
print(test44)                           # 【输出结果】['China', 'Russia']
print(test444)                          # 【输出结果】['Beijing', 'Moscow']
#################################################################
# (5)将集合转换为列表
test5 = list({1, 4, 'sdf'})
print(test5)                            # 【输出结果】[1, 4, 'sdf']
#################################################################
# (6)将列表转换为列表
test6 = list(["a", "b", "c", "d"])
print(test6)                            # 【输出结果】['a', 'b', 'c', 'd']
#################################################################
# (7)将可迭代序列(range类型)转换为列表
test7 = list(range(10))
print(test7)                            # 【输出结果】[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#################################################################
# (8)将可迭代序列(map类型)转换为列表
test8 = list(map(int, [23.2, 33.1]))
print(test8)                            # 【输出结果】[23, 33]

6、sorted() :对所有可迭代类型进行排序。不改变原始序列,返回排序后的新序列。

sorted(iterable, key=None, reverse=False)
输入参数:

  • (1)iterable:可迭代的对象(如:字典、列表)。
  • (2)key:可迭代类型中某个属性,对指定函数进行排序。默认=None
  • (3)reverse:升序reverse=False(默认)降序reverse=Ture

备注:字符串按照ASCII的大小进行排序。默认先排序大写字母,后排序小写字母。

lst1 = (5, 4, 3, -2, 1)
L1 = sorted(lst1)                       # 【输出结果】[-2, 1, 3, 4, 5]
L2 = sorted(lst1, key=abs)              # 【输出结果】[1, -2, 3, 4, 5]
L3 = sorted(lst1, reverse=True)         # 【输出结果】[5, 4, 3, 1, -2]
print(L1)
print(L2)
print(L3)
###################################################################################
lst2 = ('F', 'D', 'Y', 'e', 'a', 'v')
L4 = sorted(lst2)                       # 【输出结果】['D', 'F', 'Y', 'a', 'e', 'v']
L5 = sorted(lst2, key=str.lower)        # 【输出结果】['a', 'D', 'e', 'F', 'v', 'Y']
print(L4)
print(L5)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖墩会武术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值