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]。
此题需要注意的地方:
- Python3中/表示除法,//表示整除, 3/2 的结果为1.5, 3//2的结果为1。与数学写法有些不一样, 需注意。
- 题目中提到m > n,是出题人对输入数据的保证,写代码的时候可以直接利用这个条件,不用自己判断m是否大于n。
- 有同学用两个print语句将结果打印成两行。必须使用用print(a, b)或者print(str(a) + ' ' + str(b))这两种形式之一,前一种是利用print函数的特点,当输入多个参数,参数之间用' '连接后打印,后一种是先利用字符串的拼接,把最终要打印的字符串算出来,再打印。
- 输入的数据有可能是小数,所以不能用 a = int(input()),而应该用 a = float(input())
- 小数点保留两位的写法参考以下示例代码。
a = float(input())
print('%.2f' % (a * 6.5573))
import math
a = float(input())
if a < 0:
a = - a
print('%.2f' % a)
- 1004 题目的难点在知道一个三位数数后,怎么取得百位、十位、个位。这里分别介绍两个技巧来解决:
- 一个利用数学计算。a = 134, a // 100 可以计算出1, a // 10 % 10 可以计算出3,用//10可以看作划掉十进制最右边的数,用%10可计算出最右边的数。
- 利用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')