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