如何使这个带有变量参数的函数返回一个列表?

0 投票
3 回答
77 浏览
提问于 2025-04-14 15:55

我修改了这个内容,因为有人帮我解决了主要的问题。不过不知为什么,我就是无法让这个程序打印出序列的列表,我也搞不清楚原因,但我觉得我的验证部分可能有问题。

import math

while True:
    startVal = (input('Enter the starting value: '))
    maxVal = (input('Enter the maximum value:'))
    try:
        startVal = float(startVal)
        maxVal = float(maxVal)
        break
    except ValueError:
        print('False')

def number_sequence(startVal, maxVal):
    j = startVal
    sequence = [startVal]

    while j <= maxVal:
        i = (math.sqrt((j + 4) ** 3)) + 5.125936194710044
        i = round(i, 3)   
        if j <= maxVal:
            sequence.append(i)
        j = i
    return sequence

3 个回答

0

我需要导入数学库才能让我的Python代码正常运行。5和300是我随便选的数字。Hujaakbar的代码很不错____

import math

def number_sequence(startVal, maxVal):
    j = startVal
    sequence = [startVal]
    while j <= maxVal:
        i = (math.sqrt((j + 4) ** 3)) + 5.125936194710044
        i = round(i, 3)   
        if j <= maxVal:
            sequence.append(i)
        j = i
    return sequence


print(number_sequence(5,300))
0

发帖者没有输出任何内容的原因是因为代码里没有任何可以输出的部分(除了输入验证和可能出现的ValueError)。

你需要让 number_sequence() 函数返回一些东西,然后再把它打印出来。

number_sequence() 函数里的计算可以很简单地写成一行代码,但这样可能会让人难以阅读、理解和维护。最好是把步骤分开,一步一步来。

在计算的某个环节,你将一个数的三次方后又立即取平方根。其实可以直接把这个数的指数写成1.5,这样就能达到同样的效果。

def number_sequence(startVal, maxVal):
    sequence = [startVal]

    while (j := sequence[-1]) <= maxVal:
        j += 4
        j **= 1.5
        j += 5.125936194710044
        sequence.append(round(j, 3))

    return sequence

if __name__ == "__main__":
    while True:
        startVal = input('Enter the starting value: ')
        maxVal = input('Enter the maximum value: ')
        try:
            startVal = float(startVal)
            maxVal = float(maxVal)
            print(number_sequence(startVal, maxVal))
            break
        except ValueError as e:
            print(e)
    
0

你需要在while循环之前定义一下number_sequence这个函数,并且要调用这个函数。你的代码没有调用它。

试试下面的代码:

import math 
def number_sequence(startVal, maxVal):
    j = startVal
    sequence = []
    while j <= maxVal:
        i = (math.sqrt((j + 4) ** 3)) + 5.125936194710044
        i = round(i, 3)
        if j <= maxVal:
            sequence.append(i)
        j = i
    return sequence


while True: 
    startVal = (input('Enter the starting value: ')) 
    maxVal = (input('Enter the maximum value:')) 
    try: 
        startVal = float(startVal) 
        maxVal = float(maxVal) 
    except ValueError: 
        print('False') 
    # when ValueError occurs, if you want to prompt user again
    # use continue instead of break
        break #continue

    retuned_sequence = number_sequence(startVal, maxVal)
    print(retuned_sequence)
    break

撰写回答