Python и функции - PullRequest
       2

Python и функции

0 голосов
/ 20 сентября 2011

Признаюсь, я новичок в 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 голос
/ 20 сентября 2011

В Python нет «звонка по имени». С делает. Python нет.

Функция оценки, как это:

getnum("Enter first number: ", x)

Никогда не назначит новое значение для x в Python. В C может быть назначено новое значение. В Python новое значение не может быть назначено таким образом.

[Значение может быть видоизменено, но это не имеет отношения к этому вопросу.]

1 голос
/ 20 сентября 2011

Есть ряд проблем.

Давайте посмотрим на них в интерактивном интерпретаторе 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 голос
/ 20 сентября 2011

Я даю вам несколько советов в тех местах, где вы должны изменить свой код, это, безусловно, заставит вашу программу работать, если вы знаете, как работают функции в python (в общем, на любом языке)

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

Переменная 'число' является локальной для этой функции.Поэтому каждый раз, когда вы вызываете функцию «getnum», вы присваиваете значение номеру, но что еще вы с этим делаете.

** Подсказка 1. Механизм, при котором, как только вы получите число, попробуйте перебросить это число в переменную, которая может его использовать.Попробуйте использовать return.

** Подсказка 2: При использовании ввода по умолчанию введенное значение будет преобразовано в строку.Так что подумайте о методе, в котором значение будет изменено со строки на int.«casting»?

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

печать знака

Непосредственно печатает знак на консоли, просто представьте себе ситуацию, когда ваша программа можетиспользуйте знак.Я дам ту же подсказку.

** Подсказка: попробуйте использовать return.

0 голосов
/ 20 сентября 2011

Я полагаю, что это для школы, так что, возможно, это может помочь вам.

   #!/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"

Вы не можете изменить это, для более сложного управления.

0 голосов
/ 20 сентября 2011

Я склонен относиться к этому как к проблеме «домашней работы» и говорить вам, что вы делаете неправильно, а не показывать вам точное решение. Когда вы берете свои данные, используя input(prompt), вы получаете строку. Если вы хотите рассматривать его как число, вам нужно явно указать Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...