今天在看书的时候,发现一些可以当做笔试面试的一些练习题,简单记录一些比较基础、要动脑子的题。
第一题:编写一个Python函数 is_even(k),用来接收一个整数 k,如果 k 是偶数返回 True,否则返回 False。但是,函数中不能使用乘法、除法或取余操作。
def is_even(k):
k = abs(k)
while k > 1:
k = k - 2
return (k == 0)
is_even(10)
第二题: 编写一个函数的伪代码描述,该函数用来逆置 n 个整数的列表,使这些以相反的顺序输出,并将该方法与可以实现相同功能的 Python 函数进行比较。
def myReverse(data):
return data[::-1]
data = list(range(10))
myReverse(data)
data.reverse()
data
知识点:
b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象
a = [0,1,2,3,4,5,6,7,8,9]
b = a[1:3] # [1,2]
当i缺省时,默认为0,即 a[:3]相当于 a[0:3]
当j缺省时,默认为len(alist), 即a[1:]相当于a[1:10]
当i,j都缺省时,a[:]就相当于完整复制一份a
b = a[i:j:s]表示:i,j与上面的一样,但s表示步进,缺省为1.
所以a[i:j:1]相当于a[i:j]
当s<0时,i缺省时,默认为-1. j缺省时,默认为-len(a)-1
所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍,即倒序。
第三题:如何使用 Python 列表解析语法来产生列表 [0, 2, 6, 12, 20, 30, 42, 56, 72, 90]。
[x * (x + 1) for x in range(10)]
第四题:演示如何使用 Python 列表解析语法在不输入所有 26 个英文字母的情况下产生列表 [‘a’, ‘b’, ‘c’,…, ‘z’]。
print list(map((lambda x:chr(ord('a')+x)), range(26)))
print map((lambda x:chr(ord('a')+x)), range(26))
第五题:编写一个可以“找零钱”的 Python 程序。程序应该将两个数字作为输入,一个是需要支付的钱数,另一个是你给的钱数。当你需要支付的和所给的钱数不同时,它应该返回所找的纸币和硬币的数量。纸币和硬币的值可以基于之前或现在政府的货币体系。试设计程序,以便返回尽可能少的纸币和硬币。
def function31():
coins = {'0.5':0, '1':0, '5':0, '10':0, '20':0, '50':0, '100':0}
temp = input("Please input Pay and Total money: \n").split(" ")
pay, total = int(temp[0]), int(temp[1])
rest = total - pay
coins[100] = int(rest / 100)
rest = int(rest % 100)
coins[50] = int(rest / 50)
rest = int(rest % 50)
coins[20] = int(rest / 20)
rest = int(rest % 20)
coins[10] = int(rest / 10)
rest = int(rest % 10)
coins[5] = int(rest / 5)
rest = int(rest % 5)
coins[1] = int(rest / 1)
rest = int(rest % 1)
coins[0.5] = int(rest / 0.5)
rest = int(rest % 0.5)
return coins.values()
