Python 練習100題---No.(61-80)---附其他題目解答鏈接

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)

推薦文章:
MySql練習題–50題–第一彈
MySql練習題–45題–第二彈

發佈了32 篇原創文章 · 獲贊 59 · 訪問量 5868
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章