Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python和函数_Python_Function - Fatal编程技术网

Python和函数

Python和函数,python,function,Python,Function,我承认,我对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

我承认,我对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
+


我似乎无法改变结尾的两个数字。

我倾向于把这当作一个“家庭作业”问题,告诉你你做错了什么,而不是告诉你确切的解决办法。当您使用
input(prompt)
获取输入时,您将得到一个字符串。如果你想把它当作一个数字,你需要明确地告诉Python。

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

存在许多问题

让我们在交互式Python解释器中查看它们,当您在试验Python时,它是一个非常宝贵的工具

首先,
getnum()

>>> def getnum(prompt, number):
...     number = input(prompt)
...
>>> x = 0
>>> getnum("Enter first number: ", x)
Enter first number: 6
>>> print x
0
在这里,您应该
返回值
并将其捕获到变量中

>>> def getnum(prompt):
...     return input(prompt)
...
>>> x = 0
>>> x = getnum("Enter first number: ")
Enter first number: 6
>>> print x
6
getsign()
也有类似的问题

转到
calc()
。这里的
没有达到您期望的效果:

>>> 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解释器中查看它们,当您在试验Python时,它是一个非常宝贵的工具

首先,
getnum()

>>> def getnum(prompt, number):
...     number = input(prompt)
...
>>> x = 0
>>> getnum("Enter first number: ", x)
Enter first number: 6
>>> print x
0
在这里,您应该
返回值
并将其捕获到变量中

>>> def getnum(prompt):
...     return input(prompt)
...
>>> x = 0
>>> x = getnum("Enter first number: ")
Enter first number: 6
>>> print x
6
getsign()
也有类似的问题

转到
calc()
。这里的
没有达到您期望的效果:

>>> 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中如何工作(在任何语言中),这些肯定会使您的程序正常工作

变量“number”是该函数的局部变量。因此,每次调用函数“getnum”时,都会为该数字指定一个值,但您还需要做些什么呢

**提示1:一种机制,一旦你得到这个数字,尝试将这个数字传递给一个可以使用它的变量。尝试使用return

**提示2:使用输入时,默认情况下,输入的值将转换为字符串。因此,考虑一个方法,其中的值将从string更改为int“casting”

印刷标志

直接将标志打印到控制台,只需考虑一种情况,您的程序可以使用标志。我会给出同样的提示


**提示:尝试使用return。

我在您必须更改代码的地方给您一些建议,如果您知道函数在python中是如何工作的(在任何语言中),这些建议肯定会使您的程序正常工作

变量“number”是该函数的局部变量。因此,每次调用函数“getnum”时,都会为该数字指定一个值,但您还需要做些什么呢

**提示1:一种机制,一旦你得到这个数字,尝试将这个数字传递给一个可以使用它的变量。尝试使用return

**提示2:使用输入时,默认情况下,输入的值将转换为字符串。因此,考虑一个方法,其中的值将从string更改为int“casting”

印刷标志

直接将标志打印到控制台,只需考虑一种情况,您的程序可以使用标志。我会给出同样的提示

**提示:尝试使用return。

Python没有“按名称调用”。是的。Python没有

这样的功能评估:

getnum("Enter first number: ", x)
在Python中永远不会将新值赋值给
x
。在C语言中,可以指定一个新值。在Python中,不能以这种方式分配新值

[可以对值进行变异,但这与此问题无关。]

Python没有“按名称调用”。是的。Python没有

这样的功能评估:

getnum("Enter first number: ", x)
在Python中永远不会将新值赋值给
x
。在C语言中,可以指定一个新值。在Python中,不能以这种方式分配新值


[一个值可以变异,但这与这个问题无关。]

我想这是给学校的,所以这可能对你有帮助

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

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

我想这是给学校的,所以这可能对你有帮助

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

对于更复杂的管理,您不能对此进行修改。

“我对python非常陌生”。。。您是否完成过任何Python教程?您的
calc
函数没有
return
x
y
不会出现在
=
语句的左侧(初始值除外)。除非
x
y
出现在
=
的左侧,否则它们的值不可能更改。你能列出一些你做过的教程吗?也许我们可以推荐比您尝试过的更好的教程来涵盖
=
语句。我一定很困惑函数是如何工作的。我的计划是使用函数
getnum()
来更改
x
y
的值。我对函数的理解是,当我运行
getnum(“输入一个数字”,x)
时,变量
提示符
将替换为
“输入一个数字”
,变量
数字
将替换为变量
x
。是我的想法错了,还是我把代码搞砸了。说到教程,我几乎用谷歌搜索我的问题,这是第一个我找不到答案的问题