20180609 qzd
每日一题14
- 输入三个整数x,y,z,请把这三个数由小到大输出。
my code
x=int(input('x:'))
y=int(input('y:'))
z=int(input('z:'))
list=[x,y,z]
list.sort()
print(list)
code
l=[]
for i in range(3):
x=int(input('integer:\n'))
l.append(x)
l.sort()
print(l)
- 斐波那契数列
程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。
在数学上,斐波那契数列是以递归的方法来定义:
F0 = 0 (n=0)
F1 = 1 (n=1)
Fn = F[n-1]+ F[n-2] (n=>2)
my code:
f=[0,1]
n=int(input('n:'))
i=2
while i<=n:
f.append(f[i-1]+f[i-2])
i+=1
print(f)
print(f[n])
code:
##方法一:
def fib(n):
a,b = 1,1
for i in range(n-1):
a,b = b,a+b
return a
# 输出了第10个斐波那契数列
print fib(10)
##方法二:
# 使用递归
def fib(n):
if n==1 or n==2:
return 1
return fib(n-1)+fib(n-2)
# 输出了第10个斐波那契数列
print fib(10)
##方法三:
def fib(n):
if n == 1:
return [1]
if n == 2:
return [1, 1]
fibs = [1, 1]
for i in range(2, n):
fibs.append(fibs[-1] + fibs[-2])
return fibs
# 输出前 10 个斐波那契数列
print fib(10)
总结:这题我赢了!哈哈!!!
- 将一个列表的数据复制到另一个列表中。
程序分析:使用列表[:]。
my code:
list1=[]
i=input('input :\n')
list1.append(i)
while(i!=''):
i=input('input :\n')
list1.append(i)
list1.pop()
list2=list1[:]
print(list2)
code:
a = [1, 2, 3]
b = a[:]
print b
总结:我又赢了!!!撒花!!
- 暂停一秒输出,并格式化当前时间。
程序分析:使用 time 模块的 sleep() 函数。
code:
import time
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
# 暂停一秒
time.sleep(1)
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
- 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....
my code:
s=[1,1]
n=int(input('查询第几个月的小兔兔:'))
i=2
while i<=n-1:
s.append(s[i-2]+s[i-1])
i+=1
print(s[n-1])
code:
f1 = 1
f2 = 1
for i in range(1,22):
print('%12ld %12ld' % (f1,f2),)
if (i % 3) == 0:
print('')
f1 = f1 + f2
f2 = f1 + f2
- 判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
my code:
sushu=[]
for i in range(101,201):
sushu.append(i)
for j in range(2,i):
if i%j==0:
sushu.remove(i)
break
print(sushu)
print('the total of sushu is %d '% len(sushu))
code:
h = 0
leap = 1
from math import sqrt
from sys import stdout
for m in range(101,201):
k = int(sqrt(m + 1))
for i in range(2,k + 1):
if m % i == 0:
leap = 0
break
if leap == 1:
print '%-4d' % m
h += 1
if h % 10 == 0:
print ''
leap = 1
print 'The total is %d' % h
每日一题15
- 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
my code:
xianhua=[]
for i in range(100,1000):
a=int(i/100)
b=int(i%100/10)
c=int(i%10)
if (a**3+b**3+c**3)==i:
xianhua.append(i)
print(xianhua)
code:
for n in range(100,1000):
i = n / 100
j = n / 10 % 10
k = n % 10
if n == i ** 3 + j ** 3 + k ** 3:
print n
撒花!
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
my code:
n=int(input('input int:'))
list=[]
def fenjie(n):
for i in range(2,n+1):
if i==n:
list.append(i)
return list
if (n%i==0):
list.append(i)
break
n=int(n/list[-1])
fenjie(n)
return list
fenjie(n)
#print(list)
print('%d ='%n,end="" )
for i in range(len(list)-1):
print('%d '%list[i],end="")
print('*',end="")
print(list[-1])
code:
def reduceNum(n):
print '{} = '.format(n),
if not isinstance(n, int) or n <= 0 :
print '请输入一个正确的数字 !'
exit(0)
elif n in [1] :
print '{}'.format(n)
while n not in [1] : # 循环保证递归
for index in xrange(2, n + 1) :
if n % index == 0:
n /= index # n 等于 n/index
if n == 1:
print index
else : # index 一定是素数
print '{} *'.format(index),
break
reduceNum(90)
reduceNum(100)
- 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析:(a>b)?a:b这是条件运算符的基本例子。
code:
score = int(input('输入分数:\n'))
if score >= 90:
grade = 'A'
elif score >= 60:
grade = 'B'
else:
grade = 'C'
print '%d 属于 %s' % (score,grade)
- 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:利用 while 或 for 语句,条件为输入的字符不为 '\n'。
code:
import string
s = input('请输入一个字符串:\n')
letters = 0
space = 0
digit = 0
others = 0
i=0
while i < len(s):
c = s[i]
i += 1
if c.isalpha():
letters += 1
elif c.isspace():
space += 1
elif c.isdigit():
digit += 1
else:
others += 1
print ('char = %d,space = %d,digit = %d,others = %d' % (letters,space,digit,others))
- 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
程序分析:关键是计算出每一项的值。
code:
Tn = 0
Sn = []
n = int(input('n = '))
a = int(input('a = '))
for count in range(n):
Tn = Tn + a
a = a * 10
Sn.append(Tn)
print(Tn)
Sn = reduce(lambda x,y : x + y,Sn)
print( "计算和为:",Sn)
每日一题3
每日一题5