2015-02-03 4 views
0

Я пытаюсь разработать решение задачи курсовой работы, которую мои ученики должны заполнить и зациклиться на проходящих переменных между функциями. Я создал викторину внутри функции, которая генерирует следующие данные:Передача данных в переменную от одной функции к другой

  • Имя
  • Фамилия
  • Score

Мне нужно передать эти данные во вторую функцию, которая будет затем добавьте эти данные в файл (в зависимости от группы, в которой находится учащийся).

Мой код выглядит так, как я пытался передать данные в виде строки/списка во второй функции в качестве параметра:

def Quiz(): 
     #Code to collect user details and generate scoe (10 random questions)  
     strSave=input("Do you want to save your score? y/n") 
     if strSave.lower()=="y": 
      result=(strFirstName+","+strLastName+","+str(score)) 
      #Stores the required data as a csv string 
      return result 
      #?passes the data back? 
      funcSave() 
     elif strSave.lower()=="n": 
      funcQuiz() 
      #restarts the quiz function 

def funcSave(result): 
    #The function to save the score(s) to file 
    group=input("Which group are you A1, A2 or A3?\n") 
    if group=="A1": 
     file=open("A1.txt","a") 
     file.write(result) 
     #error is that result is not defined 
     file.close() 
    elif group=="A2": 
     file=open("A2.txt","a") 
     file.write(strFirstName+","+strLastName+","+str(score)) 
     file.close() 
    elif group=="A3": 
     file=open("A3.txt","a") 
     file.write(strFirstName+","+strLastName+","+str(score)) 
     file.close() 
    else: 
     print("unknown") 

ответ

2

Ваша проблема здесь:

return result #immediately ends the method, returning result to the caller 

funcSave() # Is never executed because you've return'd. Would throw TypeError if it did because funcSave() needs one argument 

Вы должны удалить return вызов, то на самом деле передать переменную results от метода Quiz, например, так:

funcSave(results) 

У вас также есть опечатка в Quiz, где он вызывает funcQuiz() вместо Quiz() для перезапуска.

Как и в сторону, вместо этого:

result=(strFirstName+","+strLastName+","+str(score)) 

Вы можете просто сделать это:

result = ','.join((strFirstName,strLastName,str(score))) 

Метод join в питона присоединяет список значений вместе, используя строку перед . как разделитель. Это более эффективно, чем использование +, поскольку python не требует создания каких-либо промежуточных строк. Обратите внимание, что join ожидает, что все значения будут строками, поэтому вам по-прежнему нужен листинг на score.

+0

Спасибо - очень полезно и объяснил проблему, а также ее решение - Что-то еще для меня, чтобы научить мой класс! –

0

Вместо

return result 
#?passes the data back? 
funcSave() 

сделать

funcSave(result) 

Кроме того, переименуйте функцию Quiz в funcQuiz, поэтому перезапуск работает.

0

Я думаю, что вы возвращаете данные, прежде чем передавать их функции funcSave. Если вы хотите передать данные функции в другую функцию, вам не нужно возвращать данные. Возвращаемые данные позволяют получить данные из функции, но также завершают выполнение функции.

Попробуйте это:

def Quiz(): 
     #Code to collect user details and generate scoe (10 random questions)  
     strSave=input("Do you want to save your score? y/n") 
     if strSave.lower()=="y": 
      result=(strFirstName+","+strLastName+","+str(score)) 
      # Pass the result to the funcSave function instead of returning it. 
      funcSave(result) 
     elif strSave.lower()=="n": 
      # rename the funcQuiz() function to Quiz() so it is called correctly 
      Quiz() 
      #restarts the quiz function 

def funcSave(result): 
    #The function to save the score(s) to file 
    group=input("Which group are you A1, A2 or A3?\n") 
    if group=="A1": 
     file=open("A1.txt","a") 
     file.write(result) 
     #error is that result is not defined 
     file.close() 
    elif group=="A2": 
     file=open("A2.txt","a") 
     file.write(strFirstName+","+strLastName+","+str(score)) 
     file.close() 
    elif group=="A3": 
     file=open("A3.txt","a") 
     file.write(strFirstName+","+strLastName+","+str(score)) 
     file.close() 
    else: 
     print("unknown") 
+0

Спасибо - добавлено немного ясности в решение выше ni условий добавления переменной результатов как параметра для функции, так и при вызове функции. Теперь все, что мне нужно сделать, это решить задачу 3! –

Смежные вопросы