2017-07-30 103 views
0

我从CSV文件读取并创建一个函数,将玩家与该文件分隔为2个列表:经验丰富的玩家和新玩家。新函数不接受来自其他函数的返回值

然后,我试着创建另一个函数来打印每个列表的长度。但是,当我运行脚本并调用2个函数时,Python返回一个错误,指出第二个函数的变量未定义。不知道我做错了什么。

import csv 

with open('soccer_players.csv', newline='') as csvfile: 
    players_reader = csv.DictReader(csvfile, delimiter=',') 
    players = list(players_reader) 

def separate(players): 
    experienced = [] 
    fresh = [] 
    for player in players: 
     if player['Soccer Experience'] == 'YES': 
      experienced.append(player) 
     else: 
      fresh.append(player) 

    return experienced, fresh 


def countexperience (experienced, fresh): 
    players_experience = len(experienced) 
    players_fresh = len(fresh) 

    print(players_experience) 
    print(players_fresh) 

while True: 
    start = input("Want to start? (Y/n) ").lower() 
    if start == "y": 
     separate(players) 
     countexperience(experienced, fresh) 
     break 
    elif start == "n": 
     print("goodbye") 
     break 
    else: 
     print("letter not accepted! Please write 'Y' to start or 'N' to exit!\n") 

结果:

countexperience(experienced, fresh) 
NameError: name 'experienced' is not defined 

回答

0

separate()局部变量不会添加到当前的范围,所以你需要分配的separate()变量在当前范围内的回报,如:

experienced, fresh = separate(players) 

注意:您可以使用任何你想要的名字,例如

e, f = separate(players) 
countexperience(e, f) 

您也可以扩大从separate()直接在函数调用countexperience()tuple回用*,例如:

countexperience(*separate(players))