Создайте функцию с четырьмя параметрами

Правильно, поэтому я выполняю домашнее задание, и меня просят сделать следующее:

Создайте функцию, называемую данными студента, которая принимает четыре параметра, имя (строка), возраст (целое число), номер студента (строка) и включены ли они в CSCA08 (логическое) и возвращает строку содержащую эту информацию в следующем формате: [номер студента, имя, возраст, зарегистрированный].

Ваш код должен работать следующим образом:

>>> student_data("Brian",32,"1234567",False)
`[1234567,Brian,32,False]'
>>> student_data("Nick",97,"0000001",True)
`[0000001,Nick,97,True]'

Я придумал следующее:

def student_data(name, age, student_number):
    return  '[' + student_number + ',' + name + ',' + str(age) + ']'

и при вводе его в Python:

student_data("Jeremy", 19, "999923329")
'[999923329,Jeremy,19]'

(Обратите внимание, что я оставил последний бит о логических значениях - я получу это через секунду.)

Из того, что я понимаю, "Jeremy" и "999923329" - это строки, которые впоследствии были возвращены как часть строки во второй строке. Для "возраста", поскольку не было никаких цитат, когда я вызывал функцию student_data, он интерпретировался как int by Python. Затем я преобразовал это значение int в строку, поэтому я мог бы получить "[999923329, Jeremy, 19]".

Так технически, я предполагаю, что я спрашиваю: есть ли параметр age, рассматриваемый как int на python, до тех пор, пока функция return не изменит ее на тип str? Обратите внимание, что назначение требует четыре параметра, две строки (которые у меня есть), один int (который я не знаю, если он фактически интерпретируется как int) и логический, что приводит к следующему:

Я действительно не знаю, как работают булевы. В частности, в контексте задания, что именно я должен делать? Какой пример? Я немного поиграл с моим кодом, и я придумал это:

def student_data(name, age, student_number, boolean):
    return  '[' + student_number + ',' + name + ',' + str(age) + "," + str(boolean) + ']'

И введите его в Python:

student_data("Jeremy", 19, "999923329", True)
'[999923329,Jeremy,19,True]'

Фактически это точно соответствует тому, что мне хотелось сделать, но мне это не нравится, потому что я действительно не понимаю, что происходит. Например, "boolean" - это параметр, который должна работать функция student_data. Но что такое параметр в точности? Это то же самое, что и переменная? Когда я ввожу "True" в оболочку python, что именно происходит?

Это то, что происходит, когда вы назначаете значение переменной? В этом случае, что происходит, когда я присваиваю значение переменной? Назначение требует, чтобы параметр был логическим, но я не верю, что ввел логический код в код, не так ли?

И да, если это уже не очевидно, у меня никогда не было класса компьютерной науки.

Ответы

Ответ 1

В Python есть объекты и имена. Объект имеет тип, имя - это просто указатель на объект. Если у объекта нет имени, вы не можете получить к нему доступ (на самом деле, если нет имен, указывающих на объект, Python полностью избавится от него).

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

Python работает по-другому. Имена, которые эквивалентны переменным, не имеют типа. Они могут указывать на любой объект и, более конкретно, на любой объект любого типа.

Итак, технически, я думаю, что я спрашиваю: это параметр "возраст", считается int с помощью python, пока функция возврата не изменит ее на тип str? Обратите внимание, что для назначения требуется 4 параметра, 2 строки (который у меня есть), 1 int (который я не знаю, действительно ли он интерпретируется как int) и boolean

Так как Python не является строгим в отношении типов; вы обычно говорите об объектах. Поэтому, когда вы передаете 17 в параметре функции, вы передаете объект 17, который из целочисленного типа.

Однако age - это просто имя, а имена могут указывать на любой тип. Поскольку вы можете передать любой объект функции (другими словами, age может быть любым допустимым объектом Python), его неверно сказать, что параметр "возраст" считается int. Его просто заполнитель для любого объекта, который передается функции.

В теле вашей функции вы создаете строковый объект, комбинируя другие объекты вместе.

Строковый объект знает, что делать, когда вы попросите его объединиться с другим объектом - любым другим объектом. Поскольку он не знает, что вы попробуете и сочетаете с ним; он имеет некоторые разумные значения по умолчанию и пытается преобразовать материал в строку.

Если он не может выполнить эту комбинацию, это даст вам ошибку:

>>> 'a' + 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

В этом сценарии мы хотим преобразовать объект 2 в строку. Чтобы сделать это для целых чисел, или действительно - любого объекта вообще, мы используем метод str() (как вы сделали правильно).

Итак, что происходит, когда вы конвертируете объект в строку, создается совершенно новый объект, который не имеет ссылки на оригинал, и является строковым представлением его. Это совершенно новый объект. Другое дело.

Я действительно не знаю, как работают булевы. в частности, в контексте о том, что именно я должен делать?

Хорошо, когда вы знаете, как работает один объект - все объекты обычно ведут себя одинаково. В Python, когда вы знаете, как получить строчную версию одного объекта (делая str()), вы используете ту же технику для каждого другого объекта. Задача заключается в том, чтобы выяснить, как "преобразовать" себя.

Другими словами - поскольку вы знаете, что str() возьмет объект и преобразует его в свое строковое представление; вы можете легко успокоиться, что он будет работать с любым другим объектом в Python.

Поскольку типы не строгие в Python, это дает программистам такую ​​гибкость, которая позволяет им полагаться на объект, чтобы знать, что нужно сделать.

Вот почему str() работает с booleans и int и float и с любым другим объектом. Позже, когда вы начнете изучать классы (которые являются способами создания пользовательских объектов), вы узнаете, как управлять тем, что происходит с вашим объектом, когда кто-то делает на нем str().

Ответ 2

Переменная в Python - это метка для объекта. Код x = 7 помещает метку x на объект в памяти, представляющий 7. Это похоже на то, что все переменные являются указателями. Это означает, что вы можете использовать метку x вместо номера 7:

>>> y = x + 8
>>> print(y)
15
>>> x = "hello world!"
>>> print(x)
hello world!

Функция несколько похожа на функцию в математике, она принимает некоторые входы и возвращает результат.

Пример:

def f(x, y, z):
    return x + y * z

В этом примере x, y и z - это параметры. Затем я могу вызвать функцию так:

>>> print(f(1, 2, 3))
6

В этом примере 1, 2 и 3 являются аргументами.

Параметры - это переменные внутри определения функции:

def f(x):
    print(x)
    return x + 7

>>> variable = f(5)
5
>>> print(variable)
12
>>> print(x)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    print(x)
NameError: name 'x' is not defined

Вне функции x не определяется. Это понятие переменных, доступных только в определенных местах, называется переменной областью.

В вашей функции параметр age должен иметь аргумент типа int. Когда он вызывается, он возвращает объект, к которому указывает переменная age, преобразованная в строку. Это не изменяет этот объект.

Вы вводили логический код в код в качестве аргумента при вызове функции:

student_data("Jeremy", 19, "999923329", True)
                                          ^
                                     There is the Boolean!

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

Ответ 3

Python имеет нетипизированные параметры. Вы можете передать любой объект, у которого есть метод __str__ (строки возвращаются сами, ints возвращают представление строки сами... как и все встроенные типы, насколько мне известно), и ваша функция будет работать.

Используя Python, ваш профессор просит вас "сделать функцию из четырех произвольных позиционных параметров и вернуть строковое представление этих объекты в другом порядке".

Ответ 4

В Python у нас нет никакого типа для переменных и что говорить о типе данных. Python даже не имеет переменных, В Python по переменной мы подразумеваем a name, ссылаясь на конкретный value.

Пример:

my_var=4

my_var - это имя, и оно относится к 4. Это int в приведенном выше описании, но в следующем,

my_var="hello"

это строка. Теперь 4 не упоминается никем. "hello" - это значение, которое ссылается на my_var.

После этого вы можете легко сделать вывод, что тип данных не имеет значения для Python, если ваши операции над ссылочными значениями верны. Это все о значении, а не о имени.

По вашему вопросу

>>> student_data("Brian",32,"1234567",False)
[1234567,Brian,32,False]

рассмотрим это:

def student_data(name,age student_no):
    age = age + 4       # Valid if the age is referring to number but invalid if age is string.
    age = str(age)      # If you want your number to be string then use str() function.
    age = age + "test"  # It is valid because age is referring to string now.
    return "your string"

Также проверьте эту демонстрацию: http://ideone.com/pYSl3l

Статья Основы Python: Понимание переменных объясняет то же самое на графическом уровне.