这里的第一篇文章并没有多大问题,因为我得到了想要的输出,但我只是想知道是否有更简单的方法来解决这个问题。还要记住,我是python的初学者(我正在使用python 3),而且我真的很喜欢它,这完全是出于好奇。
因此,我正在练习的练习要求您创建一个if-elif-else链以遍历数字1-9,并在末尾(st,rd,nd..etc)添加适当的后缀,然后将其打印在一次排队。这就是我想出的。
ordinalNumbers = range(1,10)
for ordinalNumber in ordNumbers:
if ordinalNumber == 1:
print(str(ordinalNumber) + "st")
elif ordinalNumber == 2:
print(str(ordinalNumber) + "nd")
elif ordinalNumber == 3:
print(str(ordinalNumber) + "rd")
else:
print(str(ordinalNumber) + "th")
就像我说的那样,这给了我想要的输出,只是想知道是否有一种不太重复的方式来处理它。谢谢大家!
答案 0 :(得分:2)
查找在每种情况下重复的内容:对str(ordinalNumber)
和print
的调用。 if
语句的实际作用是选择要使用的正确后缀:
for ordinalNumber in ordNumbers:
if ordinalNumber == 1:
suffix = "st"
elif ordinalNumber == 2:
suffix = "nd"
elif ordinalNumber == 3:
suffix = "rd"
else:
suffix = "th"
print(str(ordinalNumber) + suffix)
很多时候,您可以将if
语句替换为合适的dict
查找。在先前的重构之后,更容易看到适当的dict
。
suffixes = {1: "st", 2: "nd", 3: "rd"}
for ordinalNumber in ordNumbers:
print(str(ordinalNumber) + suffixes.get(ordinalNumber, "th"))
一个人可能会考虑使用嵌套的条件表达式,但是我自己并不十分喜欢它。
print(str(ordinalNumber) + "st" if ordinalNumber == 1 else
"nd" if ordinalNumber == 2 else
"rd" if ordinalNumber == 3 else
"th")
答案 1 :(得分:2)
我肯定有更好的解决方案,但这是一种重复性较低的解决方案
ordinalNumbers = range(1,10)
suffixes = ["", "st", "nd", "rd"]
for ordinalNumber in ordinalNumbers:
print(str(ordinalNumber), end="")
print(suffixes[ordinalNumber]) if ordinalNumber < 4 else print("th")
答案 2 :(得分:2)
suffix = ('st', 'nd', 'rd', 'th')
print([str(i) + suffix[min(i-1,3)] for i in range(1,10)])
输出:
['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th']
答案 3 :(得分:1)
您可以使用字典来存储表示映射,如下所示:
ordinalNumbers = range(1, 10)
mapper = {1: 'st', 2: 'nd', 3: 'rd'}
for ordinalNumber in ordinalNumbers:
if ordinalNumber % 10 <= 3:
print(str(ordinalNumber) + mapper[ordinalNumber])
else:
print(str(ordinalNumber) + 'th')
这适用于任何范围的数字