算法输入输出

python输入

牛客不能用@cache记忆化搜索

从标准输入读取(通常用于竞赛或控制台输入)

  1. input()读取一行
    a = input()
    a:‘3 5’ str类型
    b,c= a.split()
    b:‘3’ str

使用标准库 sys.stdin

  1. 一次性读取所有输入
    sys.stdin.read()

  2. 一次读取一行

    • sys.stdin.readline()
      示例:
      a= sys.stdin.readline()
      a:‘3 5\n’ str类型
    • for line in sys.stdin:
      line:‘3 5\n’
      a = line.split()
      a:[‘3’, ‘5’] list类型
  3. 读取一行并分开
    sys.stdin.readline().split()是一个list
    可以用对应个数的变量接,也可以用一个list变量接

总结

input()和sys.stdin.readline()和for line in sys.stdin读入的都是一行,input()不会读入换行符,其他两个会
split()后都是可以用单变量来接,就是str类型的list

从标准输入读取(通常用于竞赛或控制台输入)

使用 input() 函数来逐行读取输入

# 读取单行输入,以空格分隔的整数
# 3 4 8 12 2
data = input().strip()
numbers = list(map(int, data.split()))
#读取单行带有特定分隔符的多个值
# 输入示例:name,age,city
data = input().strip()
values = data.split(',')
# 多行输入,每行多个数据:
#3 5
#2 10
#4 5
#1 4
n,V=list(map(int,input().split()))
#n,V=list(map(int,input().strip().split()))
v,w=[],[]
for i in range(n):
    a,b=map(int,input().split())
    #a,b=map(int,input().strip().split())
    v.append(a)
    w.append(b)
  • input() 函数默认读取一行输入,并返回一个字符串
  • 使用 strip() 方法可以去除字符串两端的空白字符(包括换行符)。看别人实际代码中好像很少用
  • 使用 split() 方法可以根据指定的分隔符(默认为空白字符)将字符串分割成列表
  • map() 函数可以将一个函数映射到一个输入列表的所有元素上

从文件读取

# 打开文件并逐行读取
filename = 'input.txt'
with open(filename, 'r') as f:
    for line in f:
        #line是str类型
        # 处理每一行的数据
        print(line.strip())

# 读取所有行到列表中
with open(filename, 'r') as f:
    lines = f.readlines()
    for line in lines:
        # 处理每一行的数据
        print(line.strip())
  • 使用 read() 方法读取整个文件内容,返回一个字符串。
  • 使用 readline() 方法逐行读取文件,每次返回一个字符串,包含行末的换行符 \n。
  • 使用文件对象迭代器(如 for line in file:)也会逐行读取文件内容,并且每行内容作为字符串赋给变量 line。

脚本在运行时从命令行传递参数

使用 sys.argv 或者 argparse 模块
在命令行运行 python script.py input.txt

#使用sys.argv


# script.py
import sys

# 检查命令行参数数量是否正确
if len(sys.argv) != 2:
    print("Usage: python script.py <filename>")
    sys.exit(1)

# 获取文件名参数
#sys.argv[0]是脚本文件名
filename = sys.argv[1]

# 打开文件并读取内容
try:
    with open(filename, 'r') as f:
        content = f.read()
        print(content)
except FileNotFoundError:
    print(f"Error: File '{filename}' not found.")

在命令行输入 python script_argparse.py input.txt

#使用argparse 模块
# script_argparse.py

import argparse

# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(description='Process a file.')

# 添加位置参数
# 必须输入,且好像顺序不能错
parser.add_argument('filename', type=str, help='input file name')

#添加可选参数
#添加位置参数
#parser.add_argument("name", help="Enter your name")
#parser.add_argument("-g", "--gender", choices=["male", "female"], help="Enter your gender")  --是长选项,-是短选项,命令行可以输入也可以不输入
#python my_program.py John -g male
#可以通过args.name和args.gender访问了解析后的参数值
# 解析命令行参数
args = parser.parse_args()

# 获取参数值
filename = args.filename

# 打开文件并读取内容
try:
    with open(filename, 'r') as f:
        content = f.read()
        print(content)
except FileNotFoundError:
    print(f"Error: File '{filename}' not found.")

使用标准库 sys.stdin

  1. 一次性读取所有输入
    sys.stdin.read()

  2. 一次读取一行

    • sys.stdin.readline()
      示例:
      a= sys.stdin.readline()
      a:‘3 5\n’ str类型
    • for line in sys.stdin:
      line:‘3 5\n’
      a = line.split()
      a:[‘3’, ‘5’] list类型
  3. 读取一行并分开
    sys.stdin.readline().split()是一个list
    可以用对应个数的变量接,也可以用一个list变量接

可以使用 sys.stdin.read() 来一次性读取所有输入(比如处理管道输入或者重定向输入)
脚本read_stdin.py

import sys

# 一次性读取所有输入
input_data = sys.stdin.read()

# 输出读取的内容
print("Input read from sys.stdin:")
print(input_data)

命令行输入

python read_stdin.py
Hello, World!
This is a test input.
Input read from sys.stdin:
Hello, World!
This is a test input.

它会一次性读取所有标准输入(通常是控制台输入或者通过重定向输入的内容),并将其作为一个字符串返回
在这里插入图片描述

python输出

print()
print((’ ').join(map(str,arr))) 将数组[1,2,3]输出为 1 2 3

Java输入

在这里插入图片描述

使用Scanner读取数据

回车代表此输入行结束喂进程序,程序结束得代码都运行完

单行

// 创建Scanner对象,指定System.in表示从标准输入读取数据
Scanner scanner = new Scanner(System.in);

  1. 读取整数型 scanner.nextInt() 默认以空格为分隔符 hasNextInt()
    从输入流中读取下一个标记(默认以空白字符作为分隔符),将其解析为整数。
    它会跳过所有的空白字符(例如空格、制表符、换行符等),直到遇到下一个空白字符为止,将下一个标记解析为整数并返回。
  2. 读取浮点型 scanner.nextDouble() 默认以空格为分隔符,解析为浮点数,hasNexDouble()
  3. 读取字符串 scanner.next() 默认以空格为分隔符,返回下一个标记作为字符串。scanner.nextLine()会读取输入流中的下一行文本,直到遇到换行符为止。它会将包括换行符在内的所有字符作为一个字符串返回。

多行

import java.util.Scanner;

public class MultiLineInputExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("请输入多行数据,每行以空格分隔(输入空行结束):");
        
        // 使用循环读取多行输入
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine().trim(); // 读取一行并去除首尾空白
            
            // 如果遇到空行,则结束输入
            if (line.isEmpty()) {
                break;
            }
            
            // 使用 Scanner 解析每一行的数据项
            Scanner lineScanner = new Scanner(line);
            
            while (lineScanner.hasNext()) {
                if (lineScanner.hasNextInt()) {
                    int num = lineScanner.nextInt();
                    System.out.println("整数:" + num);
                } else if (lineScanner.hasNextDouble()) {
                    double d = lineScanner.nextDouble();
                    System.out.println("浮点数:" + d);
                } else {
                    String word = lineScanner.next();
                    System.out.println("字符串:" + word);
                }
            }
            
            lineScanner.close();
        }
        
        scanner.close();
    }
}

使用BufferedReader读取数据

单行

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferedReaderExample {
    public static void main(String[] args) throws IOException {
        // 创建BufferedReader对象,从标准输入读取数据
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        
        // 读取整数
        System.out.print("请输入一个整数:");
        int num = Integer.parseInt(reader.readLine());
        System.out.println("你输入的整数是:" + num);
        
        // 读取浮点数
        System.out.print("请输入一个浮点数:");
        double d = Double.parseDouble(reader.readLine());
        System.out.println("你输入的浮点数是:" + d);
        
        // 读取字符串
        System.out.print("请输入一个字符串:");
        String str = reader.readLine();
        System.out.println("你输入的字符串是:" + str);
        
        // 关闭BufferedReader
        reader.close();
    }
}

多行

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class MultiLineBufferedReaderExample {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        
        System.out.println("请输入多行数据,每行以空格分隔(输入空行结束):");
        
        String line;
        while ((line = reader.readLine()) != null) {
            line = line.trim(); // 去除首尾空白
            
            // 如果遇到空行,则结束输入
            if (line.isEmpty()) {
                break;
            }
            
            StringTokenizer tokenizer = new StringTokenizer(line);
            
            while (tokenizer.hasMoreTokens()) {
                String token = tokenizer.nextToken();
                try {
                    int num = Integer.parseInt(token);
                    System.out.println("整数:" + num);
                } catch (NumberFormatException e1) {
                    try {
                        double d = Double.parseDouble(token);
                        System.out.println("浮点数:" + d);
                    } catch (NumberFormatException e2) {
                        System.out.println("字符串:" + token);
                    }
                }
            }
        }
        
        reader.close();
    }
}

怎么转成list

import java.util.*;

public class ScannerToListExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取一行输入
        System.out.print("请输入多个数据(以空格分隔):");
        String inputLine = scanner.nextLine();
        
        // 使用空格分割输入字符串
        String[] tokens = inputLine.split("\\s+");//  \表示转义\s表示空白字符,+表示一个或多个
        
        // 将分割后的字符串数组转换为列表
        List<String> dataList = Arrays.asList(tokens);
        
        // 打印列表内容
        System.out.println("转换后的列表:");
        for (String data : dataList) {
            System.out.println(data);
        }
        
        scanner.close();
    }
}

标准输入是什么,标准输入是程序从用户或其他外部源接收输入数据的一种通用方式,控制台输入(键盘输入),文件输入,标准输出
控制台输入是什么

next()和nextLine()怎么判断还能继续读入

scanner.hasNextLine()
scanner.hasNext()

java怎么打印矩阵

for循环,别的太复杂了

空白符

  1. 空格符
  2. 制表符 \t,通常用于在文本中创建水平对齐或制表的效果。
  3. 换行符\n,在Unix/Linux和类Unix系统中是\n,在windows系统中是\r\n表示回车换行,在文本中标识新的行或段落的开始。
  4. 回车符\r,将光标移到行首而不换行。
  5. 换页符\f,在打印机或显示设备中用于分页处理。
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值