Python与函数
我承认,我对Python还很陌生,需要一些帮助。我正在尝试把一个非常简单的计算器从C++转换到Python。到目前为止,代码是这样的:
x = 0
y = 0
sign = '+'
def getnum(prompt, number):
number = input(prompt)
def getsign(prompt, sign):
sign = raw_input(prompt)
print sign
def calc(string, number1, number2, sign):
print string
print " "
if sign == '+' or 'plus':
a = x + y
elif sign == 'x' or '*' or 'times':
a = x * y
elif sign == '/' or 'divided by':
a = x / y
elif sign == '-' or 'minus':
a = x - y
print string, a
getnum("Enter first number: ", x)
getnum("Enter second number: ", y)
getsign("Enter sign: ", sign)
calc("The answer is: ", x, y, sign)
print x
print y
print sign
问题出在函数上。最后,我得到的是:
答案是:0
0
0
+
我似乎无法让最后的两个数字发生变化。
5 个回答
这里有几个问题。
我们来看看在交互式Python解释器中,这个工具在你尝试Python时非常有用。
首先,getnum()
并不是你想象中的那样工作……
>>> def getnum(prompt, number):
... number = input(prompt)
...
>>> x = 0
>>> getnum("Enter first number: ", x)
Enter first number: 6
>>> print x
0
在这里,你应该return
这个值,并把它存储到一个变量里。
>>> def getnum(prompt):
... return input(prompt)
...
>>> x = 0
>>> x = getnum("Enter first number: ")
Enter first number: 6
>>> print x
6
getsign()
也有类似的问题。
接下来看看calc()
。在这里,or
并没有像你期待的那样工作:
>>> sign = '*'
>>> if sign == '+' or 'plus':
... print 'plus'
...
plus
这部分需要更像这样:
>>> sign = '*'
>>> if sign == '+' or sign == 'plus':
... print 'plus'
... else:
... print 'not plus'
...
not plus
或者更好的是:
>>> if sign in ('+', 'plus'):
... print 'plus'
... else:
... print 'not plus'
...
not plus
>>> sign = '+'
>>> if sign in ('+', 'plus'):
... print 'plus'
... else:
... print 'not plus'
...
plus
这个函数里的其他条件也有同样的问题。
我给你一些建议,告诉你在哪些地方需要修改代码,这样你的程序就能正常运行了,前提是你知道函数在Python(其实任何编程语言)中的基本工作原理。
def getnum(prompt, number):
number = input(prompt)
变量 'number' 只在那个函数内部有效。所以每次你调用 "getnum" 函数时,你给 'number' 赋一个值,但你还可以做些什么呢?
**提示 1:当你得到这个数字后,试着把它放到一个可以使用的变量里。可以考虑使用返回值(return)。
**提示 2:当你使用输入(input)时,默认情况下输入的值会被转换成字符串。所以想想有没有办法把这个字符串转换成整数(int)。这叫做“类型转换”(casting)?
def getsign(prompt, sign):
sign = raw_input(prompt)
print sign
打印符号
直接把符号打印到控制台,想象一下你的程序可以如何使用这个符号。我会给你同样的提示。
**提示:试着使用返回值(return)。
Python没有“按名称调用”的功能,而C语言有。
像这样调用一个函数:
getnum("Enter first number: ", x)
在Python中,这种方式永远不会给x
赋新值。而在C语言中,可以通过这种方式赋新值。在Python中,不能这样赋值。
[虽然值是可以被改变的,但这和这个问题无关。]