2011-09-20 58 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" 

你不能修改這個,爲更復雜的管理。