如何替换嵌套循环中的最后一个字符?

How to replace last character in nested loops?

我正在尝试让输出以文字形式显示您输入的数字:

phone = input("Phone: ")
digits_mapping = {
    "1": "One",
    "2": "Two",
    "3": "Three",
    "4": "Four",
    "5": "Five",
    "6": "Six",
    "7": "Seven",
    "8": "Eight",
    "9": "Nine"
}
output = ""
for character in phone:
    output += digits_mapping.get(character) + ", "
print(output, end="")

例如,如果输入等于545,我将得到Five, Four, Five,

如何获得Five, Four, Five!

循环中的字符串连接通常是 Python 中的 bad idea (做几次还不错)。相反,您可以使用列表并将项目附加到它。然后使用.join()。对于打印,您需要将 end= 参数指定为 '!\n' 而不是默认的 '\n'.

output = [digits_mapping[char] for char in phone]
print(", ".join(output), end='!\n')

您也可以使用生成器表达式:

print(", ".join(digits_mapping[char] for char in phone), end='!\n')

另一种方法是使用 '!' 构建字符串,然后使用普通打印:

print(", ".join(digits_mapping[char] for char in phone) + '!')

任何时候创建字符分隔列表时,最好将列表的成员写入列表对象并使用 join() 输出分隔字符串。在任何语言中都是如此(尽管您使用的通常是数组,而不是列表)。相反:

phone = input("Phone: ")
digits_mapping = {
    "1": "One",
    "2": "Two",
    "3": "Three",
    "4": "Four",
    "5": "Five",
    "6": "Six",
    "7": "Seven",
    "8": "Eight",
    "9": "Nine"
}
words = []
for character in phone:
    words.append(digits_mapping.get(character))    
print(",".join(words) + "!", end="")

最后只打印字符串的副本,除了最后 2 个字符(space 和一个逗号:“,”),并在结束参数中添加感叹号欲望。你的最后一行看起来像这样:

print(output[:-2], end="!")

这是另一个策略 - 检查您是否在列表的最后一项上。如果是,请附加“!” - 否则,追加 ", ".

phone = input("Phone: ")
digits_mapping = {
    "1": "One",
    "2": "Two",
    "3": "Three",
    "4": "Four",
    "5": "Five",
    "6": "Six",
    "7": "Seven",
    "8": "Eight",
    "9": "Nine"
}
output = ""
for i in range(len(phone)):
  if i == len(phone) - 1:
    output += digits_mapping.get(phone[i]) + "!"
  else:
    output += digits_mapping.get(phone[i]) + ", "
    
print(output, end="")

我建议在 for 之后,将 output 重新分配给自身,省略最后一个字符 (",")。然后将 output 与“!”连接起来。

output=output[0:len(output)-1]
output+="!"

希望对您有所帮助。祝你编码愉快。