郑轻工oj题目-1

488 阅读3分钟

Python入门路线中提到利用郑轻工的oj题目来做题是快速提高Python编程的方法。该网站的题目比较简单,适合入门,但对初学者而言还是有些坑。

推荐最先做的题目

line = input()
a = [int(n) for n in line.split()]
print(a[0] + a[1])

input()是获取终端的输入,得到line变量是string类型,split是string类的一个方法,将字符串按空格分割开。 下一行中用到了Python的列表推导语法,列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。列表推导是将一个列表中的所有元素按一定规则进行加工,形成一个新的列表。语法规则如下:

[变量(加工后的变量) for 变量 in iterable] 比如: [x * 2 for x in [1, 2, 3]], 原来的列表是[1, 2, 3],每个元素按x * 2来进行变化,最终我们得到的列表是[2, 4, 6]。

当输入为'2 3',题目中line.split()得到列表为['2', '3'],通过列表推导,我们能得到[2, 3]。

此题需要注意的地方:

  1. Python3中/表示除法,//表示整除, 3/2 的结果为1.5, 3//2的结果为1。与数学写法有些不一样, 需注意。
  2. 题目中提到m > n,是出题人对输入数据的保证,写代码的时候可以直接利用这个条件,不用自己判断m是否大于n。
  3. 有同学用两个print语句将结果打印成两行。必须使用用print(a, b)或者print(str(a) + ' ' + str(b))这两种形式之一,前一种是利用print函数的特点,当输入多个参数,参数之间用' '连接后打印,后一种是先利用字符串的拼接,把最终要打印的字符串算出来,再打印。
  • 1002 Python中x的平方应该是x ** 2或者x * x,有些同学会写成x ^ 2。
  • 1003 基本上是1001的加强版。
  • 1008 此题需要注意的地方:
  1. 输入的数据有可能是小数,所以不能用 a = int(input()),而应该用 a = float(input())
  2. 小数点保留两位的写法参考以下示例代码。
a = float(input())
print('%.2f' % (a * 6.5573))
  • 1009
  • 1010 忘记公式自行百度
  • 1011 忘记公式自行百度
  • 1012 根据绝对值的定义,用if语句判断
import math
a = float(input())
if a < 0:
    a = - a
print('%.2f' % a)
  • 1004 题目的难点在知道一个三位数数后,怎么取得百位、十位、个位。这里分别介绍两个技巧来解决:
  1. 一个利用数学计算。a = 134, a // 100 可以计算出1, a // 10 % 10 可以计算出3,用//10可以看作划掉十进制最右边的数,用%10可计算出最右边的数。
  2. 利用s = str(a), 我们就可以用s[0]取得百位上的数,s[1]取得十位上的数。也要这个方法必须知道,这个数字是几位的整数,有一定局限性。
# 方法1
x = int(input())
print('%d %d %d' % (x % 10, x // 10 % 10, x // 100))
# 方法2
s = input()
print(s[2], s[1], s[0])

1027是这个问题的加强版。如果懂if语句,也能做这个题, 建议想一下怎么做。

x = int(input())
b, s, g = x // 100, x // 10 % 10, x % 10
if b*b*b + s*s*s + g*g*g == x:
	print('yes')
else:
	print('no')