有没有一种方法可以将这个if-elif-else链流化?(Python初学者)
第一篇文章在这里,这不是一个问题,因为我得到了我想要的输出,但我只是好奇是否有一个更简单的方法去做。请记住,我是python的初学者,我正在使用python 3,我非常喜欢它,这是一篇纯粹的好奇文章 因此,我正在进行的练习要求您创建一个if-elif-else链来循环数字1-9,并在st、rd、nd…等末尾添加适当的后缀,然后一次在线打印它们。这就是我想到的有没有一种方法可以将这个if-elif-else链流化?(Python初学者),python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,第一篇文章在这里,这不是一个问题,因为我得到了我想要的输出,但我只是好奇是否有一个更简单的方法去做。请记住,我是python的初学者,我正在使用python 3,我非常喜欢它,这是一篇纯粹的好奇文章 因此,我正在进行的练习要求您创建一个if-elif-else链来循环数字1-9,并在st、rd、nd…等末尾添加适当的后缀,然后一次在线打印它们。这就是我想到的 ordinalNumbers = range(1,10) for ordinalNumber in ordNumbers: if
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")
就像我说的,这给了我想要的结果,只是想知道是否有一种重复性更少的方法。谢谢大家 查找每种情况下重复的内容:调用strordinalNumber和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)
很多时候,您可以使用合适的dict查找完全替换if语句。在上一次重构之后,更容易看到合适的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")
查找每种情况下重复的内容:调用strordinalNumber和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)
很多时候,您可以使用合适的dict查找完全替换if语句。在上一次重构之后,更容易看到合适的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")
我相信有一个更好的解决方案,但这里有一个重复性较少的解决方案
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")
我相信有一个更好的解决方案,但这里有一个重复性较少的解决方案
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")
产出:
['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th']
产出:
['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th']
您可以使用字典存储表示映射,如下所示:
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')
这适用于任何数字范围您可以使用字典存储表示映射,如下所示:
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')
这适用于任何数字范围