python3输入输出练习-牛客网刷题

python3输入输出练习-牛客网刷题

  • 1. A+B(1)
    • 题目
    • 通过代码
      • 代码1
      • 代码2
      • 代码3
      • 代码4
      • 代码5
      • 代码6
  • 2.A+B(2)
    • 题目
    • 通过代码
      • 代码1
      • 代码2
      • 代码3
      • 代码4
  • 3.A+B(3)
    • 题目
    • 通过代码
      • 自编
      • 代码1
      • 代码2
      • 代码3
  • 4.A+B(4)
    • 题目
    • 通过代码
      • 自编1
      • 自编2
      • 代码1
      • 代码2
      • 代码3
      • 代码4
  • 5.A+B(5)
    • 题目
    • 通过代码
      • 自编1
  • 6.A+B(6)
    • 题目
    • 通过代码
  • 7.A+B(7)
    • 题目
    • 通过代码
  • 7.字符串排序(1)
    • 题目
    • 通过代码
  • 字符串排序(2)
  • 字符串排序(3)
  • 字符串排序(4)
    • 题目描述
  • 通过代码

1. A+B(1)

题目

  • 题目描述
    计算a+b
  • 输入描述
    输入包括两个正整数a,b(1<=a, b<=10^9),输入数据包括多组。
  • 输出描述
    输出a+b的结果

示例:

  • 输入
1 5
10 20
  • 输出
6
30 

通过代码

代码1

while 1:
	try:
		a,b = map(int, input().split())
		print(a+b)
	except:
		break
  1. map()函数
  • 描述
    map()函数会根据提供的函数对指定序列做映射。
    第一个参数function以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的新列表。
  • 语法
map(function,iterable,...)

function – 函数
iterable – 一个或多个序列

  1. split()函数
  • 描述
    split()通过指定分隔符对字符串进行切片,如果有第二个参数num有指定值,则分割为num+1个子字符串。返回列表?
  • 语法
str.split(str="", num=string.count(str))

str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表位(\t)等。
num – 分割次数。默认为-1,即分割所有。

  1. 其他
  • while 1相当于while true,此外,while 2, while “A” 等都是相同作用。
    字符,数值都表示为真??
  • 如果要赋值的变量数量不足,map()会如何运行,是否依然对参数序列中每一个元素调用函数。(猜测是)

代码2

import sys
for line in sys.stdin:
	if line == '\n':break
	a,b = (int(i) for i in line.split())
	result = a + b
	sys.stdout.write("{}\n".format(result))
  1. import语句
    引入模块,import sys引入python标准库中的sys.py模块
  2. sys.stdin
  • sys.stdin是一个标准化输入的方法。

  • 使用sys.stdin.readline()可以实现标准输入,其中默认输入的格式是字符串,如果是int,float类型则需要强制转换。

  • 与input()区别
    sys.stdin.readline()会将标准输入全部获取,包括末尾的‘\n‘,因此用len计算长度时是把换行符’\n‘计算进去的,而input()获取输入时返回的结果是不包含末尾的换行符’\n‘的。
    此外,input()括号内可以直接填写说明文字,例如

n = int(input('Please input a number:\n'))
  1. for语句
  • for循环可以便利任何序列的项目,如一个列表或者一个字符串。
    for循环的一般格式如下:
for <variable> in <sequence>
	<statements>
else:
	<statements>

由此猜测
sys.stdin可以理解为一个由字符串组成的列表,每一行的输入是其中的一个元素,即\n分隔且构成元素??
4. a,b = (int(i) for i in line.split())
赋值语句括号内,声明变量i
是否可以不加外括号?变量i的适用范围?是否仅限于外括号?
猜测:外括号就是用于规定声明局部变量i适用范围
5. sys.stdout.write()
使用print(obj)在console上打印对象的时候,实质上调用的是sys.stdout.write(obj+'\n'),print在打印时会自动加个换行符.

sys.stdout.write('hello'+'\n')
print 'hello'

以上两行等价。
6. str.format

  • 基本使用
    括号及里面的字符(称作格式化字段)将会被format()中的参数替换。
  • 括号中的数字用于指向传入对象在format()中的位置,例如:
>>>print('{0} 和 {1}'.format('python','c++'))
python 和 c++
>>>print('{1} 和 {0}'.format('python','c++'))
c++ 和 python
  • 关键字参数,对象的值会指向使用该名字的参数,例如:
>>>print('{first}, {second}'.format(first='python',second='c++'))
python, c++

代码3

import sys
for a in sys.stdin:
	b = a.split()
	print(int(b[0])+int(b[1]))

代码4

if __name__=="__main__":
	while True:
		try:
			a,b = map(int,input(),split())
			print(a + b)
		except:
			break
  • if __name__="__main__"
    当.py文件被直接运行时,if __name__="__main__"之下的代码块将被运行;
    当.py文件以模块形式被导入时,if __name__="__main__"之下的代码块不被运行。
    个人理解:相当于程序入口,方便调用

代码5

import sys
s = sys.stdin.readline().strip('\n')
res = []
while s!="":
	res.append(s)
	s = sys.stdin.readine().strip('\n')

for ch in res:
	tmp = ch.split()
	ans = int(tmp[0])+int(tmp[1])
	print(ans)
  • strip()方法
    strip()方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。
    语法:
str.strip([chars])

chars – 移除字符串头尾指定的字符序列。

  • append()方法
    append()方法用于在列表末尾添加新的对象。
    语法:
list.append(obj)

obj – 添加到列表末尾的对象。

代码6

import sys
for i in sys.stdin:
	print(sum(map(int,i.split())))

2.A+B(2)

题目

  • 题目描述
    计算a+b
  • 输入描述
    输入第一行包括一个数据组数t(1 <= t <= 100)
    接下来每行包括两个正整数a,b(1 <= a, b <=10^9)
  • 输出描述
    输出a+b的结果

示例:

  • 输入
2
1 5
10 20
  • 输出
6
30 

通过代码

代码1

for _ in range(int(input())):
	print(sum(map(int,input().split())))
  • 评价:最简洁

代码2

import sys
a = int(input())
for i in range(a)
	b,c = map(int,sys.stdin.readline().strip().split())
	print(b+c)
  • 评价:最标准

代码3

import sys
for line in sys.stdin:
	data = list(map(int,line.strip().split()))
	if len(data) == 1:
		continue
	else:
		print(data[0]+data[1])
  • 评价:没有完全按照题意,相当于去掉第一个参数。

代码4

n = int(input())
for i in range(n):
	x = input().split(" ")
	print(int(x[0])+int(x[1]))

3.A+B(3)

题目

  • 题目描述
    计算a+b
  • 输入描述
    输入包括两个正整数a,b(1 <= a, b <=10^9),输入数据有多组,如果输入为0 0则结束输入
  • 输出描述
    输出a+b的结果

示例:

  • 输入
1 5
10 20
0 0
  • 输出
6
30 

通过代码

自编

import sys
for line in sys.stdin:
	a,b = map(int,line.strip().split())
	if  (a == 0)&(b == 0):
		break
	else:
		print(a + b)
  • 评价:
  1. else多余
  2. 多余空格
  3. &and用在数值变量之间时有区别,用在逻辑变量间时基本一致
    如果是用在数值变量之间,则&|表示位运算(位与,位或),andor则依据是否非0来决定输出

代码1

while 1:
	a,b = map(int,input().split())
	if a==0 and b==0:
		break
	print(a+b)
  • 评价:最简短

代码2

while True
	a,b = map(int, input().split())
	if a==b==0:
		break
	else:
		print(a+b)
  • a==b==0python可以使用这种语法

代码3

while True:
	s = list(map(int,input().split()))
	if s[0]==0 and s[1]==0:
		break
	print(s[0]+s[1])
  • 评价:使用列表存储数字

4.A+B(4)

题目

  • 题目描述
    计算一系列数的和
  • 输入描述
    输入包括多组。
    每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100),n为0的时候结束输入。
    接下来n个正整数,即需要求和的每个正整数。
  • 输出描述
    每组数据输出求和的结果

示例:

  • 输入
4 1 2 3 4
5 1 2 3 4 5
0
  • 输出
10
15 

通过代码

自编1

import sys
for line in sys.stdin:
	s=list(map(int,line.strip().split()))
	if s[0] == 0:
		break
	print(sum(s)-s[0])
  • map()返回的不是列表??而split()方法调用后是列表??
  • 函数map()返回值不是列表,split()方法的返回值是分割后的字符串列表

自编2

while True:
	s=list(map(int,input().split()))
	if s[0] == 0:
		break
	print(sum(s)-s[0])

代码1

while True:
	try:
		line = input().split(" ")
		n = int(line[0])
		if n == 0:
			break
		else:
			print(sum(map(int,line[1:])))
	except:
		break
  • line[1:]表示序号1及之后的元素组成的列表? 输出从第二个元素开始后的所有元素 (以列表的形式)
  • map()返回的是迭代器(iterators)可以使用sum()函数求和,但是不能当作列表使用。

代码2

s = input()
while s!='0':
	print(sum(list(map(int,s.split()))[1:]))
	s = input()  
  • s!='0'比较两个对象是否不相等
  • print(sum(list(map(int,s.split()))[1:]))修改为print(sum(map(int,s.split()[1:])))使代码更加简短,并略微增加可读性

代码3

while True:
	s=input().split()
	if s[0]=='0':break
	print(sum(map(int,s[1:])))
  • 更合题意

代码4

while True:
	m=input()
	if m=='0':
		break
	l=list(map(int,m.split(' ')))
	print(sum(l[1:]))

5.A+B(5)

题目

  • 题目描述
    计算一系列数的和
  • 输入描述
    输入的第一行包括一个正整数t(1 <= t <= 100),表示数据组数。
    接下来t行,每行一组数据。
    每行的第一个整数为整数的个数n(1 <= n <= 100)。
    接下来n个正整数,即需要求和的每个正整数。
  • 输出描述
    每组数据输出求和的结果

示例:

  • 输入
2
4 1 2 3 4
5 1 2 3 4 5
  • 输出
10
15 

通过代码

自编1

for _ in range(int(input())):
	s=list(map(int,input().split()))
	print(sum(list[1:]))                             
  • for语句和range()次数要用range(),而不能直接用数字
  • 没有完全符合题意,没有用到n,即需要求和整数的个数

6.A+B(6)

题目

  • 题目描述
    计算一系列数的和
  • 输入描述
    输入数据有多组,每行表示一组输入数据。
    每行的第一个整数为整数的个数n(1 <= n <= 100)。
    接下来n个正整数,即需要求和的每个正整数。
  • 输出描述
    每组数据输出求和的结果

示例:

  • 输入
4 1 2 3 4
5 1 2 3 4 5
  • 输出
10
15 

通过代码

7.A+B(7)

题目

  • 题目描述
    计算一系列数的和
  • 输入描述
    输入数据有多组,每行表示一组输入数据。
    每行不定有n个整数,空格隔开。(1 <= n <= 100)。
  • 输出描述
    每组数据输出求和的结果

示例:

  • 输入
1 2 3
4 5
0 0 0 0 0
  • 输出
6
9
0

通过代码

7.字符串排序(1)

题目

  • 题目描述
    对输入的字符串进行排序后输出
  • 输入描述
    输入有两行,第一行n
    第二行是n个空格隔开的字符串
  • 输出描述
    输出一行排序后的字符串,空格隔开,无结尾空格

示例:

  • 输入
5
c d a bb e
  • 输出
a bb c d e

通过代码

while True:
	try:
		n=int(input())
		s=input().split()
		print(' '.join(sorted(s)))
	except:
		break

字符串排序(2)

字符串排序(3)

字符串排序(4)

题目描述

删除字符串中重复的字母数字,并按原来的顺序进行输出。

通过代码

while True:
    try:
        s=input()
        ss=list(set(s))
        ss.sort(key=s.index)
        print("".join(ss))
    except:
        break
  • sort()中的key对每一个元素调用函数,按照函数返回值进行排序。
  • join()

你可能感兴趣的:(python)