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參數的用法,能夠應付各種排序要求。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章