15

Right, so I'm doing a homework assignment and I am asked to do the following:

Create a function called student data, that takes four parameters, a name (a string), age (an integer), student number (a string) and whether they are enrolled in CSCA08 (a boolean), and returns a string containing that information in the following format: [student number,name,age,enrolled].

Your code should work as follows:

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

What I came up with was this:

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

and when entering it into Python:

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

(Note I left out the last bit about booleans - I'll get to that in a second.)

From what I understand, 'Jeremy' and '999923329' are strings which were both subsequently returned as part of the string in the second line. For 'age' since there were no quotations when I called the function student_data, it was interpreted as an int by Python. Then, I converted that int value into a string, so I could end up with '[999923329,Jeremy,19]'.

So technically, I guess what I'm asking is: is the parameter 'age' considered an int by python, until the return function changes it into an str type? Note that the assignment wants four parameters, two strings (which I have), one int (which I don't know if it's actually interpreted as an int) and a boolean, which leads to the following:

I really have no idea how Booleans work. Specifically, in the context of the assignment, what exactly am I supposed to do? What would an example be? I fiddled around with my code for a bit, and I came up with this:

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

And entering it in Python:

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

That actually follows exactly what the assignment wanted me to do, but I don't like it because I don't really understand what's going on. Like, 'boolean' is a parameter that the function student_data needs to work. But what is a parameter exactly? Is it the same thing as a variable? When I enter 'True' in the python shell, what exactly is happening?

Is what is happening the same thing that happens when you assign a value to a variable? In that case, what is happening when I assign a value to a variable? The assignment is asking for a parameter to be a boolean, but I don't believe I entered a boolean into the code, did I?

And yes, if it isn't obvious already, I've never had a computer science class before.

4

4 回答 4

8

在 Python 中,有对象名称。对象具有类型,名称只是指向对象的指针。如果一个对象没有名字,你就不能访问它(事实上,如果没有名字指向一个对象,Python 会完全摆脱它)。

在其他语言中,名称通常称为变量,并且被声明为特定类型。我读过一些书,说变量是一个盒子,而盒子只能取某种类型的东西,这就是值。

Python 的工作方式有点不同。 与变量等价的名称没有类型。它们可以指向任何对象,更具体地说,可以指向任何类型的任何对象

所以从技术上讲,我想我要问的是:参数'age'是否被python视为int,直到返回函数将其更改为str类型?请注意,赋值需要 4 个参数、2 个字符串(我有)、1 个 int(我不知道它是否实际上被解释为 int)和一个布尔值

由于 Python 对类型并不严格;你通常说的对象。因此,当您将17参数传入函数时,您将传入整数类型的对象。 17

但是,age只是一个名称,而名称可以指向任何类型。由于您可以将任何对象传递给函数(换句话说,age可以是任何有效的 Python 对象),因此将参数 'age' 视为 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 和 floats 以及所有其他对象的原因。稍后在您的学习中,当您开始学习类(这是创建自定义对象的方法)时,您将学习如何控制当有人对您的对象执行操作时会发生str()什么。

于 2013-09-22T12:57:55.917 回答
6

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

在本例中xyz是参数。然后我可以这样调用该函数:

>>> 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应该为参数提供 type 的参数int。当它被调用时,它返回变量age指向的对象,并转换为字符串。这不会改变那个对象。

您确实在代码中输入了一个布尔值,作为调用函数时的参数:

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

Python 没有严格的类型系统(它使用鸭子类型),所以你不必(实际上你不能)指定函数的参数类型应该是什么。因此,您实际上可以使用字符串、整数或为参数 boolean 定义的类的实例来调用函数。

于 2013-09-22T12:29:26.873 回答
2

Python 有无类型参数。您可以传递任何具有__str__方法的对象(字符串返回自己,整数返回自己的字符串表示......据我所知,所有内置类型也是如此),并且您的函数将起作用。

通过使用Python,您的教授要求您“创建一个包含四个任意位置参数的函数,并以不同的顺序返回这些对象的字符串表示形式”。

于 2013-09-22T12:17:37.317 回答
0

Python中,我们没有任何类型的变量,而数据类型 Python 甚至没有变量。在 Python 中,我们所说的变量是name指一个特定的value.

例子:

my_var=4

my_var是一个名字,它指的是4。在上面的语句中它是int,但在接下来的语句中,

my_var="hello"

它是一个字符串。现在4没有被任何人提及。“你好”是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 基础知识:理解变量以图形方式解释了相同的内容。

于 2013-09-22T12:52:44.427 回答