Golang 切片(slice)擴容機制原始碼剖析
阿新 • • 發佈:2020-12-21
一、題目
對於使用者輸入的一個關於變數x和y的二元函式f(x,y),二元函式g(x,y) 由如下公式定義
g(x,y) = x*(f(x,y))2+y*f(x,y)
請實現Python函式construct_g_from_f(f),該Python函式返回基於函式f構造得到的上述g函式。
圖1
二、說明
1.程式執行時,會多次讀取鍵盤輸入,並呼叫函式進行計算,當輸入為end時,程式執行結束(見圖1);
2.鍵盤輸入的是函式f的表示式,打印出的是函式g在x=2,y=3處的值;
3.測試用例見圖1。
題目要點解析:
函式返回的是g但輸入時輸入的卻是g(x,y)說明返回值本身是一個函式,而函式construct_g_from_f(f)中的變數只有f,要使x和y也能作為變數需要藉助lambda函式
# -*- coding:cp936 -*-
'''
點選“試題資料夾”按鈕,開啟“題目.docx”文件,裡面給出了題目和相關說明。
'''
from math import *
def construct_g_from_f(f):
#在下方新增程式碼
return lambda x,y:x*(f(x,y))**2 + y*f(x,y)
#在上方新增程式碼
while True:
f=input('【f(x,y)=】')
if f=='end':
break
f = eval('lambda x,y:'+f)
g = construct_g_from_f( f)
print('%.6f' % (g(2,3)))