python输入
牛客不能用@cache记忆化搜索
从标准输入读取(通常用于竞赛或控制台输入)
- input()读取一行
a = input()
a:‘3 5’ str类型
b,c= a.split()
b:‘3’ str
使用标准库 sys.stdin
-
一次性读取所有输入
sys.stdin.read() -
一次读取一行
- 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类型
- sys.stdin.readline()
-
读取一行并分开
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
-
一次性读取所有输入
sys.stdin.read() -
一次读取一行
- 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类型
- sys.stdin.readline()
-
读取一行并分开
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);
- 读取整数型 scanner.nextInt() 默认以空格为分隔符 hasNextInt()
从输入流中读取下一个标记(默认以空白字符作为分隔符),将其解析为整数。
它会跳过所有的空白字符(例如空格、制表符、换行符等),直到遇到下一个空白字符为止,将下一个标记解析为整数并返回。 - 读取浮点型 scanner.nextDouble() 默认以空格为分隔符,解析为浮点数,hasNexDouble()
- 读取字符串 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循环,别的太复杂了
空白符
- 空格符
- 制表符 \t,通常用于在文本中创建水平对齐或制表的效果。
- 换行符\n,在Unix/Linux和类Unix系统中是\n,在windows系统中是\r\n表示回车换行,在文本中标识新的行或段落的开始。
- 回车符\r,将光标移到行首而不换行。
- 换页符\f,在打印机或显示设备中用于分页处理。