1

我是一名休闲游戏玩家和业余程序员,懂一点 Python。我正在尝试制作一个简单的文本冒险游戏引擎,因此我需要从玩家那里获得原始输入。

这是 Python 3.2.2,所以我的行是这样的:

var = input("What do you want to do? ").lower()

那行有效,但我不想输入整行,而是想将它变成一个函数(类似于“getinput()”)。根据我对 input() 和函数的阅读,我正在寻找一个不返回任何内容但将另一个变量的状态(此处为“var”)更改为“副作用”的函数。

我确实有一个不带参数的工作函数“halt()”:

def halt():
    input("(Press Enter to continue...) ")
    print("")

调用“halt()”会给出提示,等待 Enter,然后打印一个空行并继续,这是我的意图。

我试图开始工作的功能如下所示:

def getinput(x):
    x = input("What do you want to do? ").lower()
    print("")

定义 getinput(x) 后:

var = ""
getinput(var)
print(var)

该片段不打印用户的输入,我很困惑为什么。我需要做什么才能以预期的方式完成这项工作?

我试图用函数做的事情是不可能的,还是我对范围一无所知?我应该参加codereview吗?

4

4 回答 4

4

你是对的,这个问题是关于范围的。此行中的 x:

x = input("What do you want to do? ").lower()

不会更改传递给它的值 - 它会在函数的本地范围内创建一个新变量(也称为 x)。

正确的方法是:

def getinput():
    return input("What do you want to do? ").lower()

x = getinput()
print(x)
于 2012-04-13T02:11:56.067 回答
2

注意:如果您要使用 3.x 之前的任何 Python 版本,请务必考虑使用 raw_input() 函数,因为普通的 input() 函数只接受来自用户的 SYNTACTICALLY VALID 输入,否则会引发 SyntaxError。

我不确定你到底想做什么,但我已经改变了你上面写的内容,这样它就可以工作了。这是我建议尝试的方法:

首先是函数 getinput()...

def getinput():
    x = raw_input("What do you want to do? ").lower() #prompts for the value of x
    print "" #prints a blank line
    return x

然后第二部分...

var = getinput()
print(var)
于 2012-04-13T02:27:47.143 回答
1

当您将某些内容传递给 Python 函数时,通常不可能修改它,除非它是可变的。这将您限制为 Python 类型的一小部分,例如列表或字典。

def getinput(x):
    x[0] = input("What do you want to do? ").lower()
    print("")

var = [""]
getinput(var)
print(var[0])

你最好让函数返回一个值。这就是 Python 的工作方式。

于 2012-04-13T02:41:31.983 回答
0

var是一个 python 字符串变量,它通过值传递给您的getinput函数,这意味着您的getinput函数仅修改名称“x”的本地副本,而不是调用范围内的“x”指向的值。

同样在 Python 中,字符串是不可变的,因此由于字符串实习/散列 consing ,不可能就地修改字符串的底层值- 您只需创建一个新字符串。你真的应该返回你的价值:

x = getinput()

但是,如果您仍想坚持现有的设计,您可以通过将其包装在列表或其他引用类型中来通过引用传递此字符串变量:

def getinput(li):
    li.append(input("What do you want to do? ").lower())
    print("")

用法:

x = []
getinput(x)
print x[0]
于 2012-04-13T02:17:54.483 回答