Python与函数

0 投票
5 回答
909 浏览
提问于 2025-04-17 02:38

我承认,我对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 个回答

1

这里有几个问题。

我们来看看在交互式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

这个函数里的其他条件也有同样的问题。

1

我给你一些建议,告诉你在哪些地方需要修改代码,这样你的程序就能正常运行了,前提是你知道函数在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)。

1

Python没有“按名称调用”的功能,而C语言有。

像这样调用一个函数:

getnum("Enter first number: ", x)

在Python中,这种方式永远不会给x赋新值。而在C语言中,可以通过这种方式赋新值。在Python中,不能这样赋值。

[虽然值是可以被改变的,但这和这个问题无关。]

撰写回答