python基础小白题3
題目021:猴子吃桃問題
猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個
第二天早上又將剩下的桃子吃掉一半,又多吃了一個。
以后每天早上都吃了前一天剩下的一半零一個。
到第10天早上想再吃時,見只剩下一個桃子了。
求第一天共摘了多少。
'''
def tm021():
? ? '''
第十天num=1個,第九天必然是4個:4/2-1=1,也就是(num+1)*2=4。
? ? 做這種題,先用算數(shù)式列出來,然后用代碼描述就行了。
? ? '''
? ? num = 1
? ? for i in range(10-1):
? ? ? ? num = (num+1)*2
? ? print(num)
?
?
'''
題目022:兩個乒乓球隊進行比賽,各出三人。
甲隊為a,b,c三人,乙隊為x,y,z三人。
已抽簽決定比賽名單。有人向隊員打聽比賽的名單。
a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。
'''
?
def tm022():
? ? '''
? ? 【個人備注】:關鍵是將抽象化,將問題抽象成代碼方式。
? ? 我的解題思路,是用排列組合函數(shù),列出方案,然后排除。
? ? 而官方解答里面有一個純粹的for循環(huán)加if的求解方式,
? ? 更抽象一些,用了一個很常用固定范式,直接拿來解題了。
? ? 稍微對其抽象的方法注釋了一下。
? ? '''
? ? import itertools
? ? jia = ['a','b','c']
? ? yi = ['x','y','z']
? ? arr = list(itertools.permutations(yi,3)) # 面對甲隊a,b,c時,乙隊所有排列 [('x', 'y', 'z'), ('x', 'z', 'y'), ('y', 'x', 'z'), ('y', 'z', 'x'), ('z', 'x', 'y'), ('z', 'y', 'x')]
? ? arr = [[jia[i]+a[i] for i in range(3)] for a in arr] #將a,b,c寫上,得到所有對陣組合 [['ax', 'by', 'cz'], ['ax', 'bz', 'cy'], ['ay', 'bx', 'cz'], ['ay', 'bz', 'cx'], ['az', 'bx', 'cy'], ['az', 'by', 'cx']]
? ? for i in arr:
? ? ? ? if 'ax' in i:
? ? ? ? ? ? pass
? ? ? ? elif 'cx' in i or 'cz' in i:
? ? ? ? ? ? pass
? ? ? ? else:
? ? ? ? ? ? print(i) # 得到 ['az', 'bx', 'cy']
?
?
def tm022_1():
? ? for a in ['x','y','z']: ? ? ? ? ? ? ? ? ? ? ? ? ? ? # a在x,y,z中挑一個打
? ? ? ? for b in ['x', 'y', 'z']: ? ? ? ? ? ? ? ? ? ? ? # b在x,y,z中挑一個打
? ? ? ? ? ? for c in ['x', 'y', 'z']: ? ? ? ? ? ? ? ? ? # c在x,y,z中挑一個打 三層總計27種打法
? ? ? ? ? ? ? ? if a!=b and b!=c and c!=a: ? ? ? ? ? ? ?# a,b,c不能挑同一個人 縮減到6種打法
? ? ? ? ? ? ? ? ? ? if a!='x' and c!='x' and c!='z': ? ?# 依據(jù)題意不能ax,cx,cz 縮減到1種打法
? ? ? ? ? ? ? ? ? ? ? ? print('a'+a,'b'+b,'c'+c)
?
?
'''
題目023:
打印出如下圖案(菱形):
? ?*
? ***
?*****
*******
?*****
? ***
? ?*
'''
def tm023():
? ? '''
? ? 【個人備注】:想到了絕對值,
? ? 然后將[0,1,2,3,4,5,6]變成了[3,2,1,0,1,2,3],也就是每行左邊空格數(shù)。
? ? '''
? ? num = 7
? ? for i in range(num):
? ? ? ? blank = abs(num//2-i)
? ? ? ? print(' '*blank+'*'*(num-2*blank)+' '*blank)
?
?
'''
題目024:有一分數(shù)序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數(shù)列的前20項之和。
'''
def tm024():
? ? # 沒啥好說的
? ? a,b,num = 2,1,0
? ? for i in range(20):
? ? ? ? num+=a/b
? ? ? ? a=a+b
? ? ? ? b=a-b
? ? print(num)
?
?
'''
題目025:求1+2!+3!+...+20!的和。
'''
def tm025():
? ? '''
? ? 【個人備注】:實現(xiàn)起來很簡單。
? ? 下面官方的代碼,比我寫的更簡潔。
? ? '''
? ? s,t=0,1
? ? for n in range(1,21):
? ? ? ? t*=n
? ? ? ? s+=t
? ? print(s)
?
?
'''
題目026:利用遞歸方法求5!。
'''
def fac(x):
? ? if x>1:
? ? ? ? return x*fac(x-1)
? ? else:
? ? ? ? return x
?
def tm026():
? ? '''
? ? 【個人備注】:按題目要求,公式f(n)=n*f(n-1),遞歸調(diào)用求解。
? ? '''
? ? print(fac(5))
?
?
'''
題目027:利用遞歸函數(shù)調(diào)用方式,將所輸入的5個字符,以相反順序打印出來。
'''
def output(s,l):
? ? if l==0:
? ? ? ?return
? ? print (s[l-1])
? ? output(s,l-1)
?
def tm027():
? ? '''
? ? 【個人備注】:直接從官網(wǎng)復制,不喜歡遞歸。
? ? '''
? ? s = input('Input a string:')
? ? l = len(s)
? ? output(s,l)
?
?
'''
題目028:有5個人坐在一起,
問第五個人多少歲?他說比第4個人大兩歲。
問第4個人,他說比第3個人大兩歲。
問第3個人,又說比第2個人大兩歲。
問第2個人,說比第1個人大兩歲。
最后問第一個人,他說是10歲。
請問第五個人多大?
'''
def age(x):
? ? if x>1:
? ? ? ? return 2+age(x-1)
? ? else:
? ? ? ? return 10
?
def tm028():
? ? '''
? ? 【個人備注】:官網(wǎng)給的還是遞歸方法,因為不用遞歸的話就是個口算題。
? ? '''
? ? print(age(5))
?
?
'''
題目029:給一個不多于5位的正整數(shù),要求:一、求它是幾位數(shù),二、逆序打印出各位數(shù)字。
'''
def tm029():
? ? '''
? ? 【個人備注】:用Python,So Easy~
? ? list倒序可以用list.reverse();
? ? 字符串就只能用步長=-1的方式來倒序了。
? ? '''
? ? num = 12345
? ? s = str(num)
? ? print(len(s))
? ? print(s[::-1])
?
?
?
'''
題目030:一個5位數(shù),判斷它是不是回文數(shù)。即12321是回文數(shù),個位與萬位相同,十位與千位相同。
'''
def tm030():
? ? '''
? ? 【個人備注】:沒啥可說的。
? ? '''
? ? num = 12321
? ? s = str(num)
? ? for i in range(len(s)//2):
? ? ? ? if s[i]!=s[-i-1]:
? ? ? ? ? ? print(False)
? ? ? ? ? ? break
? ? else:
? ? ? ? print(True)
總結
以上是生活随笔為你收集整理的python基础小白题3的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DateFormat(炸窝)
- 下一篇: 关系数据库——基础