1.输入一个正整数n,对其进行因式分解并输出。
例如:输入18,输出18=2*3*3
解题思路:
①最小的质数为2,每次从2开始遍历,只要 n % i == 0 , i 为当前n的最小质数,n = n / i 作为新的正整数,跳出当前循环,再次从2开始遍历
②遍历至 n = i 时表示因式分解过程已结束
方法一:
a = int(raw_input("请输入一个整数:"))
b = ""
d = a
q = 1
print "n = %d" % a
while q:
if a == 1:
break
for i in xrange(2, a+1):
if a == i:
q = 0
break
if a % i == 0 :
b += '%s * ' % i
a = a / i
break
print "%s = %s%s" % (d, b, a)
方法二:
from sys import stdout
n = int(raw_input("请输入一个正整数:"))
b = n
print "n = %s" % n
stdout.write(str(n)+ " = ")
for i in range(2, n+1):
while n != 1:
if n % i == 0:
n = n/i
if n == 1:
n = n * i
break
stdout.write(str(i))
stdout.write("*")
else:
break
print "%d" % n
PS. print 和 sys.stdout的区别
实际上我们在调用 print (对象) 时,实际上是调用了sys.stdout(对象+'\n'),print 比sys.stdout多了一个换行符,所以在不需要换行的情况下追加字符串可以使用sys.stdout
2. 输入一行字符, 分别统计出其中英文字母、空格、数字和其它字符的个数。
解题思路:利用python的内置函数进行统计
s = raw_input("请输入一行字符串:")
letters = 0
space = 0
digit = 0
other = 0
print len(s)
for i in s:
//判断是否为字母
if i.isalpha():
letters += 1
//判断是否为空格
elif i.isspace():
space += 1
//判断是否为数字
elif i.isdigit():
digit += 1
else:
other += 1
print '字母数量为%d, 空格数量为%d, 数字数量为%d, 其他数量为%d' % (letters, space, digit, other)
方法一:
a = int(raw_input("请输入一个数值:"))
n = int(raw_input("请输入次数:"))
sum = 0
s = ''
for i in xrange(n):
b = int(('%d'% a) *i)
sum += b
s += '%s + '% str(b)
print 'sum = '+ s[:-2] + ' = %d'%sum
方法二:
Tn = 0
Sn = []
s = ''
a = int(raw_input("请输入一个数字:"))
n = int(raw_input("请输入数量:"))
for count in xrange(n):
Tn = Tn + a
a = a * 10
Sn.append(Tn)
s += '%s + ' % str(Tn)
Sn = reduce(lambda x,y: x + y, Sn)
print 'sum = %s = %d' % (s[:-2],Sn)
4.一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,求他在第10次落地时,共经过多少米?第10次反弹多高?
h = 100
hsum = 100
for i in xrange(1, 11):
h = 0.5 * h
hsum += h * 2
print hsum, h
5.一只青蛙一次可以跳上1级台阶,也可以跳上2级,求该青蛙跳上一个n级台阶总共有多少种跳法?
解题思路:青蛙一次只能跳1级或者2级台阶,那当青蛙要跳上n级台阶时,只能处于n-1台阶,或者n-2台阶这两种情况。如果用函数f(n)表示跳上n级台阶的跳法总数,那么青蛙在n-1级台阶时有f(n-1)种跳法,在n-2级台阶时有f(n-2)种跳法,由于最后跳上n级台阶只有两种跳法,那么总的跳法就是f(n) = f(n-1) + f(n-2)
其实这是一个斐波那契数列
方法一:
fib = lambda n: n if n <= 2 else fib(n-1) + fib(n-2)
fib(n)
方法二:
def fib(n):
a = 0
b = 1
for _ in xrange(n):
a, b = b, a+b
return b
fib(n)
fib = lambda n: n if n <= 2 else fib(n-1) * 2
fib(n)
7.L=[1,2,3,1,2,3,2,4]要求:1.排序从大到小 2.过滤相同的数,相同的个数越多,排在前面 3.个数相同,元素从小到大排列
L = [1,2,3,1,2,3,2,4]
# 将列表转为字典
a = dict.fromkeys(L, 0)
# 对重复的数字进行遍历统计
for i in L:
if i in a:
a[i] += 1
L = [(k, v) for k,v in a.iteritems()]
# 利用冒泡排序对其进行排序
for i in xrange(len(L)):
for j in xrange(len(L)-1):
if L[j][1] < L[j+1][1]:
L[j], L[j+1] = L[j+1], L[j]
elif L[j][0] < L[j+1][0]:
L[j], L[j+1] = L[j+1], L[j]
print L # [(2, 3), (3, 2), (1, 2), (4, 1)]
# 将结果以列表形式输出
res = [i[0] for i in L]
print res # [2, 3, 1, 4]
# 使用set,set使用之后会生成新的对象,对原对象不做改变,所以需要赋值给一个新的变量
L=['b', 'c', 'd', 'c', 'b', 'a', 'a']
L2 = list(set(L))
L2.sort()
print L2 # ['a', 'b', 'c', 'd']
方法二:通过列表生成
L=['b', 'c', 'd', 'c', 'b', 'a', 'a']
L2 = []
[L2.append(x) for x in L if x not in L2]
print L2 # ['b', 'c', 'd', 'a']
方法三:通过字典生成
L=['b', 'c', 'd', 'c', 'b', 'a', 'a']
L2 = dict.fromkeys(L).keys()
print L2 # ['a', 'c', 'b', 'd']
def Combine(L1, L2, tmp):
# 如果有一个列表为空,则直接将表添加进tmp尾部
if not L1 or not L2:
tmp.extend(L1)
tmp.extend(L2)
return tmp
else:
# 对两张表的第一个数进行比较,小的就添加进tmp,并删除列表中该数,依次重复,直至有一张表为空
if L1[0] < L2[0]:
tmp.append(L1[0])
del L1[0]
else:
tmp.append(L2[0])
del L2[0]
return Combine(L1, L2, tmp)
L1 = [1, 3, 5, 7, 9]
L2 = [2, 4, 6, 8]
tmp = []
Combine(L1, L2, tmp)
print tmp # [1, 2, 3, 4, 5, 6, 7, 8, 9]
方法二:
L1 = [1, 3, 5, 7, 9]
L2 = [2, 4, 6, 8]
tmp = []
while L1 and L2:
if L1[0] < L2[0]:
tmp.append(L1[0])
del L1[0]
else:
tmp.append((L2[0]))
del L2[0]
tmp.extend(L1)
tmp.extend(L2)
print tmp # [1, 2, 3, 4, 5, 6, 7, 8, 9]
def binarySearch(L, t):
x=0
low, high = 0, len(L) - 1
while low < high:
mid = (low + high)/2
if L[mid] > t:
high = mid
elif L[mid] < t:
low = mid +1
else:
return mid
return mid if L[mid-1] == t else False
print binarySearch([1,2,3,4,5,6,7,8,9,10], 4)