2022年1月1日 python练习

Posted on 2022-01-01  25 Views


洛谷 P1001 A+B Problem

题目描述

输入两个整数 a,ba, ba,b,输出它们的和(∣a∣,∣b∣≤10ⁿ,n=9)

输入格式

两个以空格分开的整数。
输出格式

一个整数。
输入输出样例
输入 #1

20 30

输出 #1

50


对于才开始使用python刷oi题的我来说这个题刚刚好能帮我熟悉python的输入方法
输入最基本的方法是input()方法,但input方法读入的是一整行且返回字符串类型,这在大部分情况下是不能满足需求的,首先是类型问题,需要加一个强制转换来转变为我们所需要得类型,还有就是读整行的问题,这个可以使用split()方法解决

split() 方法语法:
str.split(str="", num=string.count(str))
  • str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
  • num -- 分割次数。默认为 -1, 即分隔所有。

又因为input()返回的值本身就是个字符串,可以直接使用split()方法,所以对这个题的输入我们可以使用下面的代码解决输入问题
s=input().split()
再转换一下类型就可以ac代码,这也是洛谷给出的官方题解

s=input().split()
print(int(s[0])+int(s[1]))

但如果每一个输出都要进行一次强制转换也太过麻烦了,我们还有更方便的办法,就是map()方法

map() 函数会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

例如如下使用

def sq(x):
    return x**2
a=[1,2,3,4,5]
b=list(map(sq,a)) #因为map返回的是迭代器类型所以需要进行一次强制转换
print(b)

输出结果如下

[1, 4, 9, 16, 25]

于是,我们就不需要对每一个输出都进行强制转换,可以将输出写成如下

a=list(map(int,input().split()))
print(a[0]+a[1])

甚至可以直接使用python自带的sum()方法一行ac这道题

print(sum(map(int,input().split())))

本题参考博客:https://www.cnblogs.com/BrianPeng/p/14176773.html

洛谷 P5705 【深基2.例7】数字反转

题目描述

输入一个不小于 100且小于 1000,同时包括小数点后一位的一个浮点数,例如 123.4 ,要求把这个数字翻转过来,变成 4.321并输出。
输入格式

一行一个浮点数
输出格式

一行一个浮点数
输入输出样例
输入 #1

123.4

输出 #1

4.321


这题就很奇怪,读取输入的时候不能读成字符串格式,必须先处理成float类型才能ac,到现在没想明白直接按字符串翻转和先转float再转字符串再翻转有什么区别
ac代码

s = float(input())
print(str(s)[::-1])

洛谷P5706 【深基2.例8】再分肥宅水

题目描述

现在有 t 毫升肥宅快乐水,要均分给 n 名同学。每名同学需要 2 个杯子。现在想知道每名同学可以获得多少毫升饮料(严格精确到小数点后 3 位),以及一共需要多少个杯子。输入一个实数 t 和一个整数 n,使用空格隔开。输出两个数字表示答案,使用换行隔开。

0≤t≤100000且不超过3位小数,1≤n≤1000
输入格式


输出格式


输入输出样例
输入 #1

500.0 3

输出 #1

166.667
6


这题很简单也没什么好说的,只考查了如何保留三位小数,常用方法有两种,直接上代码

a,b = input().split()
print(round(float(a)/float(b),3))
#print(format(float(a)/float(b),'.3f'))
print(int(b)*2)

欢迎来到parafish的个人博客,这里是一个正在努力的ctfer

路虽远,行则必至