事实上,菜鸟教程100例每一例后都带有答案
所以这篇博客主要还是给自己看的
本人追求简洁、优美、锋利的代码
虽然以下问题都不难,但是我还是想尽量写出最好的代码
尤其希望用一行代码解决一个问题
所以希望小伙伴们把你认为更好的代码留在留言区!
2017/9/29
工欲善其事,必先利其器。我决定先做一个计时器,用于测评代码的质量
。。。。。。
我把计时器做出来了,但是今天的算法时间已经用光了,还把学英语的时间占用了。。请看我的这篇博客,里面有计时器的源码http://blog.csdn/Super_Tiger_Lee/article/details/78137973
只好只把第一题给做了
#T1
#题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?(woc,题干是三位数,我写成四位数了,原理都差不多吧,就不改了)
nums=range(4)
for first in nums:
for secound in nums:
for third in nums:
for fourth in nums:
if first!=secound and first!=third and first!=fourth and \
secound!=third and secound!=fourth and \
third!=fourth:
print first*1000+secound*100+third*10+fourth
2017/9/30
打卡,嘀~
#T2
# 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;
# 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
# 20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;
# 60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,
# 从键盘输入当月利润I,求应发放奖金总数?
w=int(raw_input('请输入利润:'))
if w<0:
print "your input is NaN"
elif w<10:
print w*0.1
elif w<20:
print (w-10)*0.075+1
elif w<40:
print 1.75+(w-20)*0.05
elif w<60:
print 2.75+(w-40)*0.03
elif w<100:
print 3.35+(w-60)*0.015
else:
print 3.95+(w-100)*0.01
#给出的标准答案还挺有趣的
i = int(raw_input('净利润:'))
arr = [1000000,600000,400000,200000,100000,0]
rat = [0.01,0.015,0.03,0.05,0.075,0.1]
r = 0
for idx in range(0,6):
if i>arr[idx]:
r+=(i-arr[idx])*rat[idx]
print (i-arr[idx])*rat[idx]
i=arr[idx]
print r
#T3
# 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
def cansqur(num):
num=num
i=1
while i*i<=num:
if i*i==num:
return True
else:
i+=1
return False
someint=-100
while cansqur(someint+100)==False or cansqur(someint+168)==False:
someint+=1
print someint
#T4
# 题目:输入某年某月某日,判断这一天是这一年的第几天?
year=int(raw_input('year:'))
month=int(raw_input('month:'))
day=int(raw_input('day:'))
monthdaynum=[31,28,31,30,31,30,31,31,30,31,30,31]
#判断闰年
runnian=True if ((year%4==0 and year%100!=0) or year%400==0) else False
#计算天数
sumdata=sum(monthdaynum[0:month-1])+day
#若是闰年
if month>2 and runnian==True:
print sumdata+1
else:
print sumdata
2017/10/1
为了给祖国母亲庆生我决定今天哪也不去,好好刷题 :-)
#T5
#这道题菜鸟给出的答案真是垃圾,居然直接用sort()函数,要是使用sort()函数,这题还用做么?
# 题目:输入三个整数x,y,z,请把这三个数由小到大输出。
#排序函数
def so(nums):
min =nums[0]
order=0
length=len(nums)
for i in range(length):
if nums[i] <min:
min=nums[i]
order=i
del nums[order]
return min
#输入部分
numbers=[]
while True:
num=raw_input('请输入数值,若输入完毕请按‘q’:')
if num=='q':
break
numbers.append(int(num))
print numbers
while len(numbers)!=0:
print so(numbers)
#T6
#题目:斐波那契数列
nums=[]
nums.append(0)
nums.append(1)
for i in range(100):
nums.append(nums[i]+nums[i+1])
print nums
===================================================
#F2:
nums=[0,1]
while nums[-1]<=100000: nums.append(nums[-1]+nums[-2])
print nums
===================================================
#我在想怎么用一条语句输出斐波那契数列
#没想出来,只想出来要用print,后面带个多重嵌套的列表生成式,但具体还不会实操
#以下借鉴一位知乎上的仁兄的答案
print [x[0] for x in [ (a[i][0], a.append((a[i][1], a[i][0]+a[i][1]))) for a in ([[0,1]], ) for i in xrange(100) ]]
#T7
# 题目:将一个列表的数据复制到另一个列表中。
a=range(10)
b=a[:]
print b
#T8
# 题目:输出 9*9 乘法口诀表。
for i in range(9):
i+=1;j=1
while j<=i:
print '%d*%d=%d' %(i,j,i*j),
j+=1
print '\n'
=======================================================
#F2
for i in range(1,10):
for j in range(1,i+1):
print '%d*%d=%d' %(i,j,i*j),
print '\n'
#T9
# 题目:暂停一秒输出。
# 程序分析:使用 time 模块的 sleep() 函数。
from time import sleep
print 'i lv '
sleep(1)
print 'u'
#T10
# 题目:暂停一秒输出,并格式化当前时间。
import time
print 'now the time is :'
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()))
#T11
#题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
。。。。
这不就是第6题斐波那契数列么?只是从第二项开始罢了
#T12
# 题目:判断101-200之间有多少个素数,并输出所有素数。
###注意这个答案中的For...if...else...的语句,这个是固定用法,不明白的话参看http://blog.csdn/churximi/article/details/51043595
import math
col=0
for num in range(100,201):
for i in range(2,int(math.sqrt(num))+1):
if num%(i)==0:
break
else:
print num
col+=1
print '\n',col
#T13
# 题目:打印出所有的"水仙花数",
# 所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
# 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方
for num in range(100,1000):
if num==(num/100)**3+((num/10)%10)**3+(num%10)**3:
print num
#T14
# 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
num=int(raw_input('input a number:'))
print num,'=',
yins=[]
while num!=1:
i=2
while num%i!=0:
i+=1
num /= i
yins.append(i)
print yins[0],
for yin in yins[1:]:
print '*',yin,
#T15
# 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
score=int(raw_input('input the score:'))
if 0<=score<=100:
if score>=90:
print 'A'
elif score>=60:
print 'B'
else:
print 'C'
else:
print 'not an available score'
#T16
# 题目:输出指定格式的日期。
from datetime import datetime
now=datetime.now()
print now.strftime('%Y年%m月%d日')
#T17
# 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
strr=raw_input('please input a strings:')
letters=0
spaces=0
numbers=0
others=0
for character in strr:
if 'a'<=character<='z' or 'A'<=character<='Z':
letters+=1
elif character==' ':
spaces+=1
elif '0'<=character<='9':
numbers+=1
else:
others+=1
print 'letters:',letters
print 'spaces:',spaces
print 'numbers:',numbers
print 'others:',others
#T18
# 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
num=int(raw_input('input your number:'))
time=int(raw_input('input the times:'))
sum=0
for i in [10**x for x in range(time)]:
sum+=num*time*i
time-=1
print sum
#T19
# 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
def yinzi(num):
yins=[]
i=1
while i<num:
while num%i==0:
yins.append(i)
i+=1
i+=1
return yins
for num in range(1,1001):#100以内包括100
if sum(yinzi(num))==num:
print num
#T20
# 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#这不是等比数列么?我口算都比编程算来的快
now=100.0
sum=100.0
for i in range(9):
now/=2
sum+=now*2
print sum
print now/2
#T21
# 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾(还不瘾是什么意思,菜鸟还犯这种低级错误呢?),又多吃了一个
# 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
# 以后每天早上都吃了前一天剩下的一半零一个。
# 到第10天早上想再吃时,见只剩下一个桃子了。
# 求第一天共摘了多少。
#《奥赛经典举一反三》小学三年级版上的题--看来我小学奥数班还没白上
peaches=1
for i in range(9):
peaches=(peaches+1)*2
print peaches
2017/10/2
#T22
#菜鸟下面的一个答案,看起来挺好的
# 题目:两个乒乓球队进行比赛,各出三人。
# 甲队为a,b,c三人,乙队为x,y,z三人。
# 已抽签决定比赛名单。
# 有人向队员打听比赛的名单。
# a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
for a in ['x','y','z']:
for b in ['x', 'y', 'z']:
for c in ['x', 'y', 'z']:
if(a!=b)and(b!=c)and(c!=a) and (a!='x') and (c!='x') and (c!='z'):
print 'a和%s比赛,b和%s比赛,c和%s比赛' %(a,b,c)
#T23
# 题目:打印出如下图案(菱形):
# *
# ***
# *****
# *******
# *****
# ***
# *
for i in range(7):
print (' '*((3-i))+'*'*(2*i+1)) if (3-i)>=0 else (' '*(i-3)+'*'*(-2*i+13))
#T24
# 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
sum=0
Q=[x[0] for x in [ (a[i][0], a.append((a[i][1], a[i][0]+a[i][1]))) for a in ([[1,2]], ) for i in xrange(100) ]]
for i in range(20):
num=float(Q[i+1])/Q[i]
sum+=num
print sum
#T25
# 求1+2!+3!+...+20!的和。
def jiecheng(num):
mul=1
while num!=1:
mul*= num
num-=1
return mul
sum=0
for i in range(1,21):
sum+=jiecheng(i)
print sum
#T26
# 利用递归方法求5!
def jiecheng(num):
mul=1
while num!=1:
mul*= num
num-=1
return mul
print jiecheng(5)
#T27
# 题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
print raw_input('input five chats:')[::-1]
#T28
# 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
# 问第4个人岁数,他说比第3个人大2岁。
# 问第三个人,又说比第2人大两岁。
# 问第2个人,说比第一个人大两岁。
# 最后问第一个人,他说是10岁。
# 请问第五个人多大?
def fun(age,rank): #age 年龄,rank 递归第几个人
if rank == 1:
return age
else:
return fun(age+2,rank-1)
print (fun(10,5))
#T29
# 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
num=raw_input('please input a number:')
while num[0]=='0':
num=num[1:]
print num
print '该数字为',len(num),'位'
print num[::-1]
#T30
# 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
num=raw_input('please input a number:')
length=len(num)
for i in range(length/2):
if num[i]!=num[-i-1]:
print 'NO'
break
else:
print 'YES'
#T31
# 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
#我在想,怎么用列表生成式做这道题,但是没想出来。有思路的同学请留言。
weeks=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
for i in range(2):
t=raw_input('input:')
inner=[]
for day in weeks:
if day[i]==t:
inner.append(day)
if len(inner)==1:
print inner[0]
break
else:
weeks=inner
2017/10/3
#T32
#题目:按相反的顺序输出列表的值。
a = ['one', 'two', 'three']
for i in a[::-1]:
print i
#T33
# 题目:按||分隔列表。
L = [1,2,3,4,5]
s1 = '||'.join(str(n) for n in L)
print s1
#T34
#题目:练习函数调用。
此处略去10行
#T35
# 题目:文本颜色设置。
# 居然还有这种功能!
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
print bcolors.WARNING + "警告的颜色字体?" + bcolors.ENDC
#T36
#题目:求100之内的素数
#求素数的题不是都做了几道了么,怎么还要我做?差评!
#T37
#题目:对10个数进行排序。
等我过两天再研究研究排序再说
#T38
题目:求一个3*3矩阵对角线元素之和。
if __name__ == '__main__':
a = []
sum = 0.0
for i in range(3):
a.append([])
for j in range(3):
a[i].append(float(raw_input("input num:\n")))
for i in range(3):
sum += a[i][i]
print sum
#T39
# 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
if __name__ == '__main__':
# 方法一 : 0 作为加入数字的占位符
a = [1,4,6,9,13,16,19,28,40,100,0]
print '原始列表:'
for i in range(len(a)):
print a[i],
number = int(raw_input("\n插入一个数字:\n"))
end = a[9]
if number > end:
a[10] = number
else:
for i in range(10):
if a[i] > number:
temp1 = a[i]
a[i] = number
for j in range(i + 1,11):
temp2 = a[j]
a[j] = temp1
temp1 = temp2
break
print '排序后列表:'
for i in range(11):
print a[i],
#T40
# 题目:将一个数组逆序输出。
# 菜鸟真是有毒吧,同样的题想让我做几遍?
if __name__ == '__main__':
a = [9,6,5,4,1]
N = len(a)
print a
for i in range(len(a) / 2):
a[i],a[N - i - 1] = a[N - i - 1],a[i]
print a
#T41
#题目:模仿静态变量的用法。
def varfunc():
var = 0
print 'var = %d' % var
var += 1
if __name__ == '__main__':
for i in range(3):
varfunc()
# 类的属性
# 作为类的一个属性吧
class Static:
StaticVar = 5
def varfunc(self):
self.StaticVar += 1
print self.StaticVar
print Static.StaticVar
a = Static()
for i in range(3):
a.varfunc()
#T42
# 题目:学习使用auto定义变量的用法。
num = 2
def autofunc():
num = 1
print 'internal block num = %d' % num
num += 1
for i in range(3):
print 'The num = %d' % num
num += 1
autofunc()
菜鸟真是辣鸡,怎么越到后面的题越辣鸡呢?
没有出现的题都是不想写的题
看到了55题
2017/10/4
#T61
#题目:打印出杨辉三角形(要求打印出10行如下图)。
# 1
# 1 1
# 1 2 1
# 1 3 3 1
# 1 4 6 4 1
# 1 5 10 10 5 1
# 1 6 15 20 15 6 1
# 1 7 21 35 35 21 7 1
# 1 8 28 56 70 56 28 8 1
# 1 9 36 84 126 126 84 36 9 1
nums=[[]]
for i in range(10):
nums.append([])
nums[i].append(1)
if i>=1:
for j in range(1,i):
nums[i].append(nums[i-1][j-1]+nums[i-1][j])
nums[i].append(1)
nums[i].append('\n')
for row in nums:
for num in row:
print num,
#T85
#题目:输入一个正整数,然后判断最少几个 9 除于该数的结果为整数。
num=int(raw_input('input a int:'))
nines=9
many=1
while (nines>=num and nines%num==0)==False:
nines=nines*10+9
many+=1
print nines
print many
结束了,后面的题没什么可做的,还有很多重复的题目
更多推荐
菜鸟教程 Python100例答案
发布评论