1. 程式人生 > 其它 >Golang 切片(slice)擴容機制原始碼剖析

Golang 切片(slice)擴容機制原始碼剖析

技術標籤:筆記python

一、題目
對於使用者輸入的一個關於變數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)))