Вопрос Python (проблема с функциями)

Регистрация
20 Дек 2013
Сообщения
86
Репутация
0
Спасибо
0
Монет
0
Внимание, вопрос: вложенная функция не принимает значения из основной.

Код:

# -*- coding: cp1251 -*-

class table:

def __init__(self, name, group, geometry, EC):

self.name = name

self.group = group

self.geometry = geometry

self.EC = EC

name = "Родион"

group = "БО921ТВР"

geometry_mark = 3

EC_mark = 5

str_n = table(name, group, geometry_mark, EC_mark)

size = 1

data = []

for i in range(size):

data.append([name, group, geometry_mark, EC_mark])

def print_header():

print ("_______________________________________")

print ("| Экзаменационные оценки студентов |")

print ("---------------------------------------")

print ("| Имя | Группа | Геометрия | ЭВМ |")

print ("---------------------------------------")

#Нигде не используется

def print_string():

str_n = table(name, group, geometry_mark, EC_mark)

print ("|", str_n.name, "|", str_n.group, "| ", str_n.geometry, " | ", str_n.EC, " |")

print ("---------------------------------------")

def print_table():

print_header()

i = 0

while (i<size):

name = data[0]

group = data[1]

geometry_mark = data[2]

EC_mark = data[3]

#Функция print_string

str_n = table(name, group, geometry_mark, EC_mark)

print ("|", str_n.name, "|", str_n.group, "| ", str_n.geometry, " | ", str_n.EC, " |")

print ("---------------------------------------")

#Конец функции print_string

i += 1

print_table()

print ("1) Добавить строчку\n2) Выход")

choice = input()

while (choice != '2'):

print ('Введите имя')

name = input()

print ('Введите группу')

group = input()

print ('Введите оценку по геометрии')

geometry_mark = input()

print ('Введите оценку по ЭВМ')

EC_mark = input()

size += 1

new_str_n = [name, group, geometry_mark, EC_mark]

data.append(new_str_n)

print_table()

print ("1) Добавить строчку\n2) Выход")

choice = input()

Порядок такой:

1) Вводим данные

2) Вносим в массив

3) Вызываем функцию

4) Обновляем данные

5) (Внутри функции) Вызываем функцию

6) Выводим данные

Проблема: выводятся не обновленные в функции print_table данные, а те, которые ввели в последнем цикле.

Примечательно, что если функцию не вызывать, а тупо переписать её содержимое (как представлено в коде), то тогда всё работает. Такое ощущение, что находящиеся данные в print_table попросту нельзя использовать дальше, как будто они не сохраняются.
 
И как это читать?
Ну, если верить описанию, то плохо ты изучаешь теорию
Подучи, что такое глобальные и локальные переменные
 
# -*- coding: cp1251 -*-

class table:
def __init__(self, name, group, geometry, EC):
self.name = name
self.group = group
self.geometry = geometry
self.EC = EC

def print_header():
print("_______________________________________")
print("| Экзаменационные оценки студентов |")
print("---------------------------------------")
print("| Имя | Группа | Геометрия | ЭВМ |")
print("---------------------------------------")

def print_string(student):
print("|", student.name, "|", student.group, "| ", student.geometry, " | ", student.EC, " |")
print("---------------------------------------")

def print_table(data):
print_header()
for student in data:
print_string(student)

size = 1
data = []

print_table(data)
print("1) Добавить строчку\n2) Выход")

choice = input()

while choice != '2':
print('Введите имя')
name = input()
print('Введите группу')
group = input()
print('Введите оценку по геометрии')
geometry_mark = input()
print('Введите оценку по ЭВМ')
EC_mark = input()
size += 1
new_student = table(name, group, geometry_mark, EC_mark)
data.append(new_student)
print_table(data)
print("1) Добавить строчку\n2) Выход")
choice = input()
 
потому что это код из нейронки, пиши их сам
 
У вас проблема с обновлением данных в функции `print_table`. Чтобы решить эту проблему, передавайте актуальные данные в функцию как аргументы. Таким образом, функция сможет использовать обновленные значения вместо тех, которые ввели в последнем цикле.
 
Назад
Сверху