Python入门习题(100)——OpenJudge百练习题:字符串数组排序问题

OpenJudge百练第2752号习题:字符串数组排序问题

题目描述

来源
OpenJudge网站 —— 百练习题集-第2752号习题

要求
总时间限制: 1000ms 内存限制: 65536kB

描述

给定一组字符串,按指定的排序方式输出这些字符串。排序可是自然顺序(inc)、自然逆序(dec)、忽略大小写顺序(ncinc)、忽略大小写逆序(ncdec)等。

输入
输入有多行,第一行为一个表明排序方式的字符串见题面,第二行为字符串的数目。
其余各行每行一个字符串,字符串中间可能空格,前后也可能有空格,但前后的空格要忽略。
输出
输出也有多行,按指定的顺序输出输入的字符串。
样例输入
ncdec
3
Hello World!
You’re right!
haha! you’re wrong!
样例输出
You’re right!
Hello World!
haha! you’re wrong!
来源
JP06

解题思路

  1. 不忽略大小写排序的做法是,排序方法sort的key参数设置为: key = None。这也是key参数的默认值。
  2. 忽略大小写排序的做法是,排序方法sort的key参数设置为: key = str.upper。排序的时候,所有参与排序的字符串元素全变成大写后参与比较。
  3. 采用升序(inc)排序的做法是,排序方法sort的reverse参数设置为False,即reverse=False。
  4. 采用降序(dec)排序的做法是,排序方法sort的reverse参数设置为True,即reverse=True。

参考答案

order = input().strip()
key_label = None
if order[0] == 'n':  
    key_label = str.upper   #忽略大小写——全变为大写。str.upper是字符串类的upper方法。
reverse_label = False
if "dec" in order:
    reverse_label = True  #逆序

n = int(input())
lines = [input() for i in range(n)]
lines.sort(key=key_label, reverse=reverse_label)
for s in lines:
    print(s)

测试用例

  1. 题目描述给出的测试用例覆盖了忽略大小写降序排序的情形。

  2. 忽略大小写降序排序,输入的字符串的顺序与题目描述给出的测试用例不同。
    样例输入
    ncdec
    3
    Hello World!
    haha! you’re wrong!
    You’re right!
    样例输出
    You’re right!
    Hello World!
    haha! you’re wrong!

  3. 不忽略大小写,降序排序。
    样例输入
    dec
    3
    Hello World!
    You’re right!
    haha! you’re wrong!
    样例输出
    haha! you’re wrong!
    You’re right!
    Hello World!

  4. 不忽略大小写,升序排序。
    样例输入
    inc
    3
    Hello World!
    You’re right!
    haha! you’re wrong!
    样例输出
    Hello World!
    You’re right!
    haha! you’re wrong!

  5. 忽略大小写,升序排序。
    样例输入
    ncinc
    3
    Hello World!
    You’re right!
    haha! you’re wrong!
    样例输出
    haha! you’re wrong!
    Hello World!
    You’re right!

小结

  1. 本题中,四种排序要求通过key参数和reverse参数的设置来落实。
  2. 学会灵活运用列表的sort方法,包括key参数和reverse参数的用法,能够应付各种排序要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值