【问题标题】:how do I use a list as an argument in a function using python如何在使用 python 的函数中使用列表作为参数
【发布时间】:2015-09-06 03:05:10
【问题描述】:

我对编程还很陌生,而且才刚学了一个月。目前我正在尝试获取用户输入,将其存储在一个列表中,然后将该列表传递给一个函数。我无法将列表用作函数的参数(最后一行代码)。提前致谢!

grade_list = []
percentages = 0

while True:
    percentages = input("Enter some numbers here: ")
    if percentages == "done":
        break
    grade_list.append(percentages)

print(grade_list)


def gpaCalc(marks):
    gpaList = []
    for grade in marks: #sorts data
        if grade <= 49.99:
            grade = 0.00

        elif 50 <= grade <= 52.99:
            grade = 0.70

        elif 53 <= grade <= 56.99:
            grade = 1.00

        elif 57 <= grade <= 59.99:
            grade = 1.30

        elif 60 <= grade <= 62.99:
            grade = 1.70

        elif 63 <= grade <= 66.99:
            grade = 2.00

        elif 67 <= grade <= 69.99:
            grade = 2.30

        elif 70 <= grade <= 72.99:
            grade = 2.70

        elif 73 <= grade <= 76.99:
            grade = 3.00

        elif 77 <= grade <= 79.99:
            grade = 3.30

        elif 80 <= grade <= 84.99:
            grade = 3.70

        elif 85 <= grade <= 89.99:
            grade = 3.90

        elif 90 <= grade <= 100:
            grade = 4.00

        gpaList.append(grade) #gathers data into list
        gpaList.sort()

    return gpaList

print (gpaCalc(PROBLEM))

【问题讨论】:

  • gpaCalc(grades_list)
  • 你遇到了什么错误?
  • 您是否将输入转换为浮点数?在我看来不是那样的,看起来你把它们当作字符串。即 如果 '48'
  • 嘿@JLPeyret,我刚刚意识到并进行了更正,但是“完成”不能转换为浮点数。还有其他方法可以摆脱用户输入吗?
  • @xdhmoore,我收到“TypeError:不可排序的类型:str()

标签: python list function


【解决方案1】:

您可以像往常一样将列表传递给任何函数,只要始终确保您通过正确索引来访问列表中的项目,而不是计算整个列表。请改用以下内容:

def gpaCalc(marks):
    gpaList = []
    for grade in marks[0]: #sorts data

        if grade <= 49.99:
            grade = 0.00

        elif 50 <= grade <= 52.99:
            grade = 0.70

        elif 53 <= grade <= 56.99:
            grade = 1.00

        elif 57 <= grade <= 59.99:
            grade = 1.30

        elif 60 <= grade <= 62.99:
            grade = 1.70

        elif 63 <= grade <= 66.99:
            grade = 2.00

        elif 67 <= grade <= 69.99:
            grade = 2.30

        elif 70 <= grade <= 72.99:
            grade = 2.70

        elif 73 <= grade <= 76.99:
            grade = 3.00

        elif 77 <= grade <= 79.99:
            grade = 3.30

        elif 80 <= grade <= 84.99:
            grade = 3.70

        elif 85 <= grade <= 89.99:
            grade = 3.90

        elif 90 <= grade <= 100:
            grade = 4.00

        gpaList.append(grade) #gathers data into list
        gpaList.sort()

    return gpaList

grade_list = []
percentages = 0

while True:
    percentages = input("Enter some numbers here: ")
    if percentages == "done":
        break
    grade_list.append(percentages)

print(gpaCalc(grade_list))

【讨论】:

    【解决方案2】:

    保持您对“完成”的检查不变。如果没有完成,则转换float。

    while True:
        percentages = input("Enter some numbers here and 'done' to exit:")
        if percentages == "done":
            break
    
        try:
            grade_list.append(float(percentages))
        except ValueError:
            pass
    

    排序...

        for grade in marks: #sorts data
            .....
    
            gpaList.append(grade) #gathers data into list
    
        #also, sort outside the loop, when done, not each time.
        gpaList.sort()
    
        return gpaList
    

    【讨论】:

    • 非常感谢!我还没有遇到错误处理,我想我会多花几天时间阅读 python 书籍。这成功了。
    【解决方案3】:

    在最后一行 print 之前,定义您的标记列表,例如marks = [70, 68, 50, 89, ...] 并在您的函数调用中将其传递给 gpaCalc:

    print(gpaCalc(marks))
    

    请注意,Python convention 表示您不应在标识符中使用驼峰式大小写;改用下划线:gpa_calc

    编辑:我错过了问题的重点!要获取用户的输入,请使用循环:

    def get_user_input():
        grades = []
    
        while True:
            # take input
            value = ... # figure it out
    
            if value == 'q':
                break
    
            try:
                # do basic validation here
                grades.append(int(value))
    
                # might be a good idea to check the range too…
            except ValueError:
                print("This is not a valid grade!")
    
        return grades
    

    如果您想解释,请发表评论!

    【讨论】:

    • 同意。从分类函数中分离出用户输入逻辑。开始修复 gpaCalc([48.0, 31,95]) 之类的问题,然后确保用户可以输入相同的术语并获得相同的结果(可能需要允许拼写错误导致浮点转换错误)。
    • 谢谢,请记住这一点!但对于列表,我希望获得用户输入并操作该数据。
    • 是的,但一次解决两个问题并非易事。硬编码一些有效值,并让 gpaCalc 首先工作。实际上,这就是 Python 的 unittest 模块大放异彩的地方 (diveintopython.net/unit_testing/romantest.html)。然后手动键入并重新键入用户输入,直到您的用户输入格式也正常工作。否则,您可以期待大量的打字。
    猜你喜欢
    • 2020-07-13
    • 2011-06-26
    • 2013-05-11
    • 2020-10-07
    • 2012-04-02
    • 2023-01-30
    • 2014-05-03
    • 2018-08-05
    • 2018-08-10
    相关资源
    最近更新 更多