github展示python100題
鏈接如下:
https://github.com/zhiwehu/Python-programming-exercises/blob/master/100%2B%20Python%20challenging%20programming%20exercises.txt
以下爲博主翻譯後題目及解答,答案代碼分爲兩個,第一條爲博主個人解答(Python3),第二條爲題目所提供答案(Python2)
………………………………………………………………………………
題目1-20鏈接:https://blog.csdn.net/weixin_41744624/article/details/103426225
題目21-40鏈接:https://blog.csdn.net/weixin_41744624/article/details/103511139
題目41-60鏈接:https://blog.csdn.net/weixin_41744624/article/details/103575741
本部分題目爲61-80,難度1-3隨機順序;
題目81-98鏈接:https://blog.csdn.net/weixin_41744624/article/details/103646520
經檢測題庫去除重複只有98題啦(歡迎評論添加好題目)~
………………………………………………………………………………
61、問題:
編寫一個程序來讀取ASCII字符串並將其轉換爲utf-8編碼的unicode字符串。
(Python3默認輸入會自動轉爲unicode字符,Python2則會自動讀入ascii字符,ord()函數可以返回字符對應的unicode或者ascii值)
編碼關係詳見:用腳都能理解的–Python2與Python3編碼方式
# python2
s = raw_input()
u = unicode( s ,"utf-8")
print u
62、問題:
寫一個特殊的註釋來指示Python源代碼文件是unicode格式的。
# -*- coding: utf-8 -*-
63、問題:
編寫程序計算1/2+2/3+3/4+…+n/n+1,控制檯給定n個輸入(n>0)。
例子:
如果將下列n作爲程序的輸入:
5個
那麼,程序的輸出應該是:
3.55
如果向問題提供了輸入數據,則應假定它是控制檯輸入。
n = input ("input n:")
sum = 0
i=1
j=2
for x in range(1,int(n)+1):
sum = sum + i/j
i=i+1
j=j+1
print (round(sum,2))
n=int(raw_input())
sum=0.0
for i in range(1,n+1):
sum += float(float(i)/(i+1))
print sum
64、問題:
編寫要計算的程序:
當n>0時,f(n)=f(n-1)+100
f(0)=1(注:博主發現按照公式來說此處應該是0,程序按照=0來寫)
通過控制檯輸入給定的n(n>0)。
例子:
如果將下列n作爲程序的輸入:
5
那麼,程序的輸出應該是:
500
如果向問題提供了輸入數據,則應假定它是控制檯輸入。
n = input ("input n(>0):")
sum = 0
for x in range(0,int(n)):
sum = sum + 100
print (sum)
def f(n):
if n==0:
return 0
else:
return f(n-1)+100
n=int(raw_input())
print f(n)
65、問題:
斐波那契數列的計算公式如下:
如果n=0,f(n)=0
如果n=1,f(n)=1
如果n>1,f(n)=f(n-1)+f(n-2)
請編寫一個程序,用控制檯輸入的給定n計算f(n)的值。
例子:
如果將下列n作爲程序的輸入:
7
那麼,程序的輸出應該是:
13
如果向問題提供了輸入數據,則應假定它是控制檯輸入。
n = input ("input n:")
a= 0
b= 1
sum1 = 0
x= 0
if int(n) == 0:
print (a)
elif int(n) == 1:
print (b)
else:
for i in range(2,int(n)+1):
sum1 = b+a
a = b
b = sum1
print (sum1)
def f(n):
if n == 0: return 0
elif n == 1: return 1
else: return f(n-1)+f(n-2)
n=int(raw_input())
print f(n)
66、問題:
斐波那契數列的計算公式如下:
如果n=0,f(n)=0
如果n=1,f(n)=1
如果n>1,f(n)=f(n-1)+f(n-2)
請編寫一個使用列表理解的程序,以逗號分隔的形式打印Fibonacci序列,並由控制檯輸入給定的n。
例子:
如果將下列n作爲程序的輸入:
7
那麼,程序的輸出應該是:
0,1,1,2,3,5,8,13
n = input ("input n:")
ls = []
a= 0
b= 1
sum1 = 0
x= 0
if int(n) == 0:
ls.append(0)
elif int(n) == 1:
ls.append(0)
ls.append(1)
else:
ls.append(0)
ls.append(1)
for i in range(0,int(n)-1):
sum1 = b+a
ls.append(sum1)
a = b
b = sum1
print (ls)
def f(n):
if n == 0: return 0
elif n == 1: return 1
else: return f(n-1)+f(n-2)
n=int(raw_input())
values = [str(f(x)) for x in range(0, n+1)]
print ",".join(values)
67、問題:
在控制檯輸入n時,請用generator編寫一個程序,以逗號分隔的形式打印0到n之間的偶數。
例子:
如果將下列n作爲程序的輸入:
10
那麼,程序的輸出應該是:
0,2,4,6,8,10
n=input("input n:")
def is_even(n):
i=0
while i <(int(n)+1):
if (i%2==0):
yield i
i +=1
ls = []
for x in is_even(n):
ls.append(x)
print (ls)
def EvenGenerator(n):
i=0
while i<=n:
if i%2==0:
yield i
i+=1
n=int(raw_input())
values = []
for i in EvenGenerator(n):
values.append(str(i))
print ",".join(values)
68、問題:
在控制檯輸入n時,請用generator編寫一個程序,以逗號分隔的形式打印0到n之間可以被5和7整除的數字。
例子:
如果將下列n作爲程序的輸入:
100
那麼,程序的輸出應該是:
0,35,70
n=input("input n:")
def is_num(n):
i=0
while i <(int(n)+1):
if (i%5==0 | i%7==0):
yield i
i +=1
ls = []
for x in is_num(n):
ls.append(x)
print (ls)
def NumGenerator(n):
for i in range(n+1):
if i%5==0 and i%7==0:
yield i
n=int(raw_input())
values = []
for i in NumGenerator(n):
values.append(str(i))
print ",".join(values)
69、問題:
請編寫assert語句以驗證列表[2,4,6,8]中的每個數字都是偶數。
ls = [2,4,6,8]
for i in ls:
assert(i%2==0)
li = [2,4,6,8]
for i in li:
assert i%2==0
70、問題:
請編寫一個從控制檯接受基本數學表達式的程序,並打印評估結果。
例子:
如果將以下字符串作爲程序的輸入:
35+3
那麼,程序的輸出應該是:
38
ls = input("input:")
print (eval(ls))
expression = raw_input()
print eval(expression)
71、問題:
請編寫一個二分法搜索函數,用於搜索排序列表中的項目。函數應該返回要在列表中搜索的元素的索引。
l=input("輸入列表,隔開:").split(',')
ls = sorted(l)
x = input("輸入列表中需要搜索的數字:")
n=int(x)
def binarysearch(ls,a):
min=0
max=len(ls)-1
i = 0
while True:
i+=1
mid=(max+min)//2
if a>int(ls[mid]):
min = mid+1
elif a==int(ls[mid]):
print("找到數據")
print("次數:"+str(i))
break
else:
max = mid -1
binarysearch(ls,n)
import math
def bin_search(li, element):
bottom = 0
top = len(li)-1
index = -1
while top>=bottom and index==-1:
mid = int(math.floor((top+bottom)/2.0))
if li[mid]==element:
index = mid
elif li[mid]>element:
top = mid-1
else:
bottom = mid+1
return index
li=[2,5,7,9,11,17,222]
print bin_search(li,11)
print bin_search(li,12)
72、問題:
請使用Python數學模塊生成一個值介於10和100之間的隨機浮點數。
(實際上只能生成0-100間數字,如果爲0-10需要重新生成)
import random
print (random.random()*100)
73、問題:
請使用Python數學模塊生成一個值介於5和95之間的隨機浮點數。
(實際上只能生成0-95間數字,如果爲0-10需要重新生成)
import random
print (random.random()*100-5)
74、問題:
使用random.random()在[0,1]中生成隨機浮點數。
(同上的性質一樣,可能是出題者懶了一下…)
import random
print (random.random())
75、問題:
請編寫一個程序,使用random模塊和列表理解輸出0到10之間的隨機偶數。
(random.choice返回的是整數)
import random
a=random.random()*10
ls = []
if a%2 ==0:
ls.append(a)
print (ls)
import random
print random.choice([i for i in range(11) if i%2==0])
76、問題:
請編寫一個程序,使用隨機模塊和列表理解輸出一個可被5和7整除的0到10之間的隨機數。
#此方法在上一題加入了while判別
#不建議使用,因爲無數的數裏只有5和7符合條件,會一直循環好久
#優點是可以一直篩選到值後才推出
import random
ls = []
x=0
while x==0:
a=random.random()*10
if (a%5 ==0 and a%7 ==0 ):
ls.append(a)
x=1
print (ls)
import random
print random.choice([i for i in range(201) if i%5==0 and i%7==0])
77、問題:
請編寫一個程序生成一個包含5個100到200之間的隨機數的列表。
(random.sample返回的是整數)
import random
ls = []
x=0
while x<5:
a=random.random()*200
if (100<=a and a<=200 ):
ls.append(a)
x=x+1
print (ls)
import random
print random.sample(range(100), 5)
78、問題:
請編寫一個程序隨機生成一個列表,其中包含5個介於100和200之間的偶數。
#此方法依然會跑很久,而且a%2拿出後也會跑很久,建議用下列舉方法
import random
ls = []
x=0
while x<5:
a=random.random()*200
if (100<=a and a<=200 and a%2==0 ):
ls.append(a)
x=x+1
print (ls)
import random
print random.sample([i for i in range(100,201) if i%2==0], 5)
79、問題:
請編寫一個程序來隨機生成一個包含5個數字的列表,這些數字可以被5和7整除,範圍在1到1000之間。
import random
print (random.sample([i for i in range(1,1001) if i%5==0 and i%7==0], 5))
import random
print random.sample([i for i in range(1,1001) if i%5==0 and i%7==0], 5)
80、問題:
請編寫程序隨機打印7到15之間的整數。
import random
print (random.sample([i for i in range(7,15) if i%1==0 ], 1))
import random
print random.randrange(7,16)