2011-09-20 61 views
0

我承认,我对Python非常陌生,需要一些帮助。我正试图将一个非常简单的计算器从C++转换为python。这是迄今为止代码: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

“我对Python非常陌生”......你有没有完成任何Python教程? –

+0

是的,很多很多。 – Ward

+0

你的'calc'函数没有'return'。在'='语句的左边不会出现'x'和'y'(除了它们的初始值)。除非在'='左边出现'x'或'y',否则它们的值不可能改变。你可以列出你所做的一些教程吗?也许我们可以建议覆盖'='语句的更好的教程比您尝试的更好。 –

回答

0

我倾向于将此视为“家庭作业”问题,并告诉您您做错了什么,而不是向您展示确切的解决方案。当你使用input(prompt)进行输入时,你会得到一个字符串。如果你想把它看作一个数字,你需要明确告诉Python。

+0

这是一个好的开始,但仅仅解决问题还不够。 – Johnsyweb

+0

这就是主意。他几乎在那里。 –

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

好的。也许他比我最初的判断还远。 –

1

我给你,你必须改变你的代码的地方一些建议,这些肯定会令你的工作方案给你知道的功能在Python如何工作(在GENRAL任何语言)

def getnum(prompt, number): 
    number = input(prompt) 

变量'number'是该函数的本地特性。所以每次你调用函数“getnum”时,你都会给这个数字赋值,但你还有什么其他的处理。

**提示1:一种机制,只要你得到的数字,尝试throwin这个数字的变量,可以使用它。尝试使用返回。

**提示2:当您使用输入时,默认情况下输入的值将被转换为字符串。所以想想一个将值从字符串更改为int的方法。 “铸件”?

def getsign(prompt, sign): 
    sign = raw_input(prompt) 
    print sign 

打印标志

直接打印标志到控制台,只是觉得一种情况,你的程序可以使用该标志。我会给出同样的提示。

**提示:尝试使用返回。

1

Python没有“按名称调用”。 C确实。 Python不。

一个功能评价是这样的:

getnum("Enter first number: ", x) 

永远不会在Python中的新的值赋给x。在C中,可以分配一个新值。在Python中,不能通过这种方式分配新值。

[A值可以突变,但是这不是有关这一问题。]

0

我asume这是为学校,所以这也许可以帮助你。

#!/usr/bin/env python 

    import re 

    #put the logic in an object like enviroment 
    class CalculatorProto(object): 
     def __init__(self, numberone, numbertwo): 
     """ 
     initialize the data 
     """ 
      self.firsn = numberone 
      self.twon = numbertwo 

     def Verifynumber(self): 
     """ 
     verify is you pass abs numbers 
     """ 
      numbers = re.compile("^[0-9]+$") 
      if numbers.search(self.firsn) and numbers.search(self.twon): 
       self.firsn = int(self.firsn) 
       self.twon = int(self.twon) 
       return True 
      else: 
       return False 

     def sum(self): 
     """ 
     manage sum 
     """ 
      rsum = self.firsn + self.twon 

      return rsum 


     def rest(self): 
     """ 
     manage rest 
     """ 
      if self.firsn > self.twon: 
       rrest = self.firsn - self.twon 
       return rrest 
      else: 
       rrest = self.twon - self.firsn 
       return rrest 

     def div(self): 
     """ 
     manage div 
     """ 
      if int(self.firsn) > int(self.twon): 
       if self.twon != 0: 
       rdiv = self.firsn/self.twon 
       return rdiv 
       return "Is not good idea div a number by 0" 
      else: 
       if self.firsn != 0: 
       rdiv = self.twon/self.firsn 
       return rdiv 
       return "Is not good idea div a number by 0" 

     def mul(self): 
      rmul = self.firsn * self.twon 
      return rmul 

    if __name__ == "__main__": 
     #here you cant write you small interface 
     print "Enter two numbers, and a operation please" 
     o = raw_input("One: ") 
     t = raw_input("Two: ") 
     operation = raw_input("Operation: ") 
     while operation not in ("sum", "div", "rest", "mul"): 
      print "WTF?? Enter a valid operation" 
      print "sum\ndiv\nrest\nor mul" 
      operation = raw_input("Operation: ") 

     cal = CalculatorProto(o, t) 

     if cal.Verifynumber(): 
     exec("print cal.%s()" % operation) 
     else: 
     print "Please insert absolute numbers" 

你不能修改这个,为更复杂的管理。