Python - 将用户输入的外部变量设置为副作用

时间:2012-04-13 02:05:48

标签: python python-3.x user-input

我是一个休闲游戏玩家和爱好者程序员,他对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 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

注意:如果要在3.x之前使用任何版本的Python,请务必考虑使用raw_input()函数,因为plain 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)

答案 2 :(得分:1)

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

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

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

让函数返回一个值会好得多。这就是Python的工作方式。

答案 3 :(得分:0)

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

同样在Python中字符串是不可变的,因此由于string interning / hash consing而无法就地修改字符串的基础值 - 您只需创建一个新字符串。你应该真的回报你的价值:

x = getinput()

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

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

用法:

x = []
getinput(x)
print x[0]