2015-09-06 17 views
1

使用列表作为参数我是相当新的编程和只是一直这样做了一个月。目前我正在尝试获取用户输入,将其存储在一个列表中,并将该列表传递给一个函数。我无法使用列表作为我的函数的参数(最后一行代码)。预先感谢!我怎么在一个函数使用python

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)) 
+0

'gpaCalc(grades_list)' – michaelpri

+0

你得到什么错误? – xdhmoore

+0

你把你的输入转换成浮动?看起来不像我这样,看起来像你把它们保持为字符串。即**如果'48'<= 49.99 ** –

回答

1

在最后一个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 

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

+0

同意。从分类功能中分离出用户输入逻辑。开始修复像gpaCalc([48.0,31,95])的东西,然后确保用户可以输入相同的条件并获得相同的结果(可能需要允许导致浮点数转换错误的拼写错误)。 –

+0

谢谢,生病请记住!但是对于这份清单,我希望得到用户的意见,并让这些数据运行。 –

+0

是的,但一次解决两个问题并不是一个简单的方法。硬编码一些有效值,并让gpaCalc先工作。实际上,这是Python单元测试模块闪耀的地方(http://www.diveintopython.net/unit_testing/romantest.html)。然后键入并重新手动输入用户输入,直到您的用户输入格式也起作用。否则,你可以期待很多打字。 –

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)) 
1

保持您的“已完成”检查原样。如果没有完成,则转换浮点数。

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 
+0

非常感谢!我还没有遇到错误处理,我想我会再花几天阅读Python书籍。这个伎俩。 –

相关问题