ACM 模式处理输入输出

本文介绍了Python中处理用户输入的几种方法,如使用`input()`函数读取单行或多行数据,`map()`和`list()`转换输入,以及使用`sys.stdin`和`bufio`模块读取文件流。同时讨论了格式化输出,包括字符串格式化、数值格式化和控制输出行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python

input

读取一行输入
# strip() 将字符串首尾空格和换行符等移除
# 通过 map 将所有的输入强制转为 int 类型
print("input:")
line = list(map(int, input().strip().split()))
print("output:")
print("line:", line)
print("len:", len(line))

执行示例:

> python .\input.py
input:
1 2 3 4 8 10 29
output:
line: [1, 2, 3, 4, 8, 10, 29]
len: 7
读取多行输入(指定行数)
# 假设 n 表示一个矩阵的行数,m 表示一个矩阵的列数
print("input:")
n, m = map(int, input().strip().split())
lis = []
for _ in range(n):
    tmp = list(map(int, input().split()))
    lis.append(tmp)

print("output:")
print("n:", n, " m:", m)
print(lis)

执行示例:

> python .\input.py
input:
2 3
1 2 3 4
5 6 7 8
output:
n: 2  m: 3
[[1, 2, 3, 4], [5, 6, 7, 8]]
读取多行输入(不指定行数)
print("input:")
lis = []
while True:
    line = input().strip()
    if line == "":
        break
    lines = list(map(int, line.split()))
    lis.append(lines)
print("output:")
print(lis)
> python .\input.py
input:
1 3 4 3
7 8 9 10

output:
[[1, 3, 4, 3], [7, 8, 9, 10]]

sys.stdin.readline()

如果使用该语句,默认是读取的字符串+\n

读取一行输入
import sys
print("input:")
line = list(map(int, sys.stdin.readline().strip().split()))
print("output:")
print("len:", len(line))
print("line:", line)

执行示例:

> python .\input.py
input:
1 2 3 4 5 6 7
output:
len: 7
line: [1, 2, 3, 4, 5, 6, 7]
读取多行(指定行数)
import sys
print("input:")
n, m = map(int, sys.stdin.readline().strip().split())
lis = []
for _ in range(n):
    line = sys.stdin.readline().strip()
    if line == "":
        break
    lines = list(map(int, line.split()))
    lis.append(lines)
print("output:")
print("n:", n, " m:", m)
print("line:", lis)

执行示例:

> python .\input.py
input:
2 4
1 2 3 4
5 6 7 8
output:
n: 2  m: 4
line: [[1, 2, 3, 4], [5, 6, 7, 8]]
读取多行(不指定行数)
import sys
print("input:")
lis = []
while True:
    line = sys.stdin.readline().strip()
    if line == "":
        break
    lines = list(map(int, line.split()))
    lis.append(lines)
print("output:")
print("len:", len(lis))
print("line:", lis)

执行示例:

> python .\input.py
input:
1 2 3 4
5 6 7 8

output:
len: 2
line: [[1, 2, 3, 4], [5, 6, 7, 8]]

sys.stdin

读取多行
import sys

for line in sys.stdin:
    line = line.strip()
    if line == "":
        break
    a, b = map(int, line.split())
    print(a + b)

https://ac.nowcoder.com/acm/contest/5657/A

输出

import sys
sys.stdout.write("hello world")

执行示例:

> python .\input.py
hello world
格式化输出

使用%输出不同进制

  • %o:oct八进制
  • %d:dec十进制
  • %x:hex十六进制

使用%保留小数

  • %f:默认保留小数点后六位有效数字
    • %.3f :保留三位小数位
  • %e:保留小数点后六位有效数字,科学计数法
  • %g:在保证六位有效数字的前提下,使用小数方式,否则使用科学计数法

尽量不使用round()取整,round()函数只有一个参数,不指定位数的时候,返回一个整数,而且是最靠近的整数,类似于四舍五入,当指定取舍的小数点位数的时候,一般情况也是使用四舍五入的规则,但是碰到.5的情况时,如果要取舍的位数前的小数是奇数,则直接舍弃,如果是偶数则向上取舍。

使用%s对字符串进行格式化输出

  • %10s:右对齐,占位符10位
  • %-10s:左对齐,占位符10位
  • %.2s:截取两位字符
  • %10.2s:左对齐,占位符10位,同时截取两位字符

实例:

s = "Hello world"
print("字符串:%s" % s)
print("右对齐:%20s" % s)
print("左对齐:%-20s" % s)
print("截取:%.2s" % s)

输出:

t> python .\input.py
字符串:Hello world
右对齐:         Hello world
左对齐:Hello world
截取:He

Golang

fmt.Fscan

读取一个输入

整数

import (
	"fmt"
	"os"
)

func main() {
	var number int
	fmt.Print("输入一个整数:")
	_, err := fmt.Fscan(os.Stdin, &number)
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println("输出:", number)
}

执行示例:

go run .\main.go
输入一个整数:99
输出: 99

浮点数

func main() {
	var number float64
	fmt.Print("输入一个浮点数:")
	_, err := fmt.Fscan(os.Stdin, &number)
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println("输出:", number)
}

执行示例:

go run .\main.go
输入一个浮点数:99.9
输出: 99.9

字符串

func main() {
	var str string
	fmt.Print("输入一个字符串:")
	_, err := fmt.Fscan(os.Stdin, &str)
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println("输出:", str)
}

执行示例:

go run .\main.go
输入一个字符串:hello
输出: hello

fmt.Scan

读取一个输入

整数

func main() {
	var number int
	fmt.Print("输入一个整数:")
	_, err := fmt.Scan(&number)
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println("输出:", number)
}

浮点数

func main() {
	var number float64
	fmt.Print("输入一个浮点数:")
	_, err := fmt.Scan(&number)
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println("输出:", number)
}

字符串

func main() {
	var str string
	fmt.Print("输入一个浮点数:")
	_, err := fmt.Scan(&str)
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println("输出:", str)
}

fmt.Scanln

读取一行输入
func main() {
	var (
		m, n int
	)
	fmt.Print("请输入两个整数:")
	fmt.Scanln(&m, &n)
	fmt.Println("m:", m, "n:", n)
}

执行示例:

go run .\main.go
请输入两个整数:2 4
m: 2 n: 4

bufio.NewReader

读取一行字符串
func main() {
	fmt.Print("请输入一个字符串:")
	reader := bufio.NewReader(os.Stdin)
	bytes, _, _ := reader.ReadLine()
	str := string(bytes)
	fmt.Println("输出:", str)
}

执行示例:

go run .\main.go
请输入一个字符串:hello world
输出: hello world
读取多行

https://ac.nowcoder.com/acm/contest/5657#question

func main() {
	reader := bufio.NewReader(os.Stdin)
	for {
		bytes, _, _ := reader.ReadLine()
		str := string(bytes)
		if str == "" {
			break
		}
		arr := strings.Split(str, " ")
		a, _ := strconv.Atoi(arr[0])
		b, _ := strconv.Atoi(arr[1])
		fmt.Println(a, b)
	}
}
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	for {
		bytes, _, _ := reader.ReadLine()
		str := string(bytes)
		if str == "" {
			break
		}
		// a, _ := strconv.Atoi(arr[0])
		// b, _ := strconv.Atoi(arr[1])
		// fmt.Println(a, b)
		var a, b int
		fmt.Sscanln(str, &a, &b)
		fmt.Println(a, b)
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值