M31184: 一道题搞懂输出
http://cs101.openjudge.cn/practice/31184/
使用 sys.stdin.read().split() 一次性读入所有数据,能够有效避免换行、多余空格对读取造成的干扰,随后根据 mode 的值进入对应的输出分支。
Python 参考代码
python
import sys
def main():
tokens = sys.stdin.read().split()
if not tokens:
return
mode = int(tokens[0])
if mode == 1:
# 输出 x 的绝对值
x = int(tokens[1])
print(abs(x))
elif mode == 2:
# 同一行输出,空格分隔
a, b, c = map(int, tokens[1:4])
print(a + b, b + c, a + c)
elif mode == 3:
# 分别占一行输出
a, b, c = map(int, tokens[1:4])
print(a + b)
print(b + c)
print(a + c)
elif mode == 4:
# 使用指定分隔符 "->"
a, b, c = tokens[1:4]
print(a, b, c, sep="->")
elif mode == 5:
# 每个整数后紧跟一个 '#',包括最后一个
n = int(tokens[1])
nums = tokens[2:2 + n]
print("".join(f"{x}#" for x in nums))
elif mode == 6:
# 从大到小排序后,以空格分隔输出列表元素
n = int(tokens[1])
nums = [int(x) for x in tokens[2:2 + n]]
nums.sort(reverse=True)
print(*nums)
elif mode == 7:
# 格式化字符串拼接输出,无空格
a, b = map(int, tokens[1:3])
print(f"{a}*{b}={a * b}")
elif mode == 8:
# 浮点数除法并保留恰好 3 位小数
a, b = map(int, tokens[1:3])
print(f"{a / b:.3f}")
elif mode == 9:
# 英文逗号分隔序列,末尾无逗号
n = int(tokens[1])
nums = tokens[2:2 + n]
print(*nums, sep=",")
if __name__ == "__main__":
main()知识点解析与对应用法
- 绝对值计算:
abs(x)。 - 多变量同行输出:
print(a, b, c),默认以空格分隔。 - 分行输出:调用多次
print(),每次默认会在末尾输出换行符\n。 - 自定义分隔符:
print(a, b, c, sep="->"),通过sep参数设定项之间的连接符。 - 连续拼接输出:使用
"".join(f"{x}#" for x in nums)或print(x, end="#")修改结尾字符。 - 解包列表并按空格输出:
print(*nums),通过*解包避免了直接打印列表时带有的方括号[]。 - f-string 拼接表达式:
f"{a}*{b}={a * b}",在花括号内可直接嵌入运算。 - 保留指定小数位数:
f"{x:.3f}",即使末尾为 0 也会补齐至三位小数。 - 解包并指定分隔符:
print(*nums, sep=","),能保证元素间以逗号分隔且最后一个元素后不会带有逗号。