题解 | 复读机
复读机
https://www.nowcoder.com/practice/9d381551b6ab40c4b5c3c8d60fe4066e
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
// 创建扫描器读取标准输入,按行分割(对应Python的for line in sys.stdin)
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
line := scanner.Text() // 获取当前行内容(已去除换行符)
// 按空白字符分割(等价于Python的split()),取第一个元素
fields := strings.Fields(line)
if len(fields) == 0 {
continue // 空行直接跳过(避免原Python代码中split()空列表取[0]报错的情况)
}
a := fields[0]
// 判断是否包含小数点(等价于Python的 '.' in a)
if strings.Contains(a, ".") {
// 转换为浮点数并保留1位小数输出(等价于Python的format(float(a), '.1f'))
num, err := strconv.ParseFloat(a, 64)
if err == nil { // 仅处理合法浮点数(与原Python行为一致,非法格式会报错)
fmt.Printf("%.1f\n", num)
} else {
// 若包含小数点但不是合法浮点数(如"123.a"),原Python会抛异常,此处保持一致(直接打印原内容或报错均可,按原逻辑选择打印原内容)
fmt.Println(a)
}
} else {
// 无小数点,直接输出原内容(等价于Python的print(a))
fmt.Println(a)
}
}
// 检查输入读取过程中的IO错误(如输入流中断)
if err := scanner.Err(); err != nil {
fmt.Fprintf(os.Stderr, "读取输入错误: %v\n", err)
}
}
查看12道真题和解析