如何在Python中定义自己的范围函数

如何在Python中定义自己的范围函数,python,function,range,Python,Function,Range,下面我附上了一道家庭作业题。到目前为止,我唯一的代码是 def myRange(start, stop=None, step=None): if stop == None: stop = start if step == None: step = 1 while True: if step > 0 and start >= stop: break elif step

下面我附上了一道家庭作业题。到目前为止,我唯一的代码是

def myRange(start, stop=None, step=None):

    if stop == None:
        stop = start

    if step == None:
        step = 1

    while True:
        if step > 0 and start >= stop:
            break
        elif step < 0 and start <= stop:
            break
        yield ('%g' % start)
        start = start + step
        break

    lyst = myRange(start, stop=None, step=None)
    for num in lyst:
        print(num)

myRange(0, 10, 2)
def myRange(开始、停止=无,步骤=无):
如果停止==无:
停止=开始
如果步骤==无:
步骤=1
尽管如此:
如果步骤>0且开始>=停止:
打破

elif step<0和startPython允许您接受任意数量的参数和关键字参数,如下所示:

def myRange(*args, **kwargs):
    # do something
def myRange(start, stop=None, step=None):
    if stop == None and step == None:
        start, stop, step = 0, start, 1
    # handle the other conditions
args将是一个元组,kwargs将是一个字典。 例如,调用myRange(21,'foo',name='shado')时,args为(21,'foo'),kwargs为{'name':'shado'}。 从技术上讲,args和kwargs不一定是args和kwargs,但命名它们是惯例。 使用这个,我想您可以基于args的长度构造一些条件

def myRange(*args):
    if len(args) == 1:
        start, end, step = 0, args[0], 1
     # conditionals for other cases
另一种方法是:

def myRange(*args, **kwargs):
    # do something
def myRange(start, stop=None, step=None):
    if stop == None and step == None:
        start, stop, step = 0, start, 1
    # handle the other conditions
基本上只是分开处理每个案件

为了制作列表,我会使用while循环

    myRange(start=None, stop=10, step=None):
  • 处理
    stop=10
    您将默认值设置为
    stop=10
    。但是,您创建的应用程序被要求模仿内置的 范围函数。内置范围没有默认的
    stop=10
    。 因此,如果需要,请不要在您的版本中设置默认值 原始文件中没有默认值

  • 所需的最小参数数 您的
    myRange
    有3个默认参数。您是否见过以下代码

    for x in range():
        print(x)
    
    提示:
    range
    至少需要一个参数

  • 启动的默认值
    10
    是终点站。以下代码打印的第一个数字是什么?是不是
    0
    ?是不是
    1
    <代码>2
  • <代码>5<代码>10?这是什么

    for x in range(10):
        print(x)
    
  • 打印
    置于
    myRange
    缩进的代码块不应包含任何打印语句

    def myRange(start=None, stop=10, step=None):
        lyst = (list(range(stop)))
        # print (lyst) Noooo!
    
    lyst = myRange()
    print(lyst) # YES!
    
  • 您需要一个
    return
    语句
  • 如果一个函数有输出,我们写
    返回输出
    你应该返回一个
    列表

    此函数的行为应该类似于Python的标准范围函数,带有必需的和可选的参数,,但它应该返回一个列表

    编辑 我决定给你一个函数签名。你还得填上尸体。不要担心大部分代码,别管它。只需在末尾编写代码,替换
    打印(“开始:”,开始,“停止:”,停止,“步骤:”,步骤)


    不使用范围函数定义范围

    def myRange(*args):
        myList=[]
        if len(args) is 1:
            k=0
            if args[0] > 0:
                while k < args[0]:
                    myList.append(k)
                    k=k+1
            else:
                while k > args[0]:
                    myList.append(k)
                    k=k-1
        elif len(args) is 2:
            k = args[0]
            if args[0] < args[1]:
                while k < args[1]:
                    myList.append(k)
                    k=k+1
            else:
                while k > args[1]:
                    myList.append(k)
                    k=k-1
        else:
            k=args[0]
            if args[0] < args[1]:
                while k < args[1]:
                    myList.append(k)
                    k=k+args[2]
            else:
                while k > args[1]:
                    myList.append(k)
                    k=k+args[2]
        return myList    
    
    def myRange(*args):
    myList=[]
    如果len(args)为1:
    k=0
    如果参数[0]>0:
    而kargs[0]时:
    myList.append(k)
    k=k-1
    elif len(args)为2:
    k=args[0]
    如果args[0]args[1]时:
    myList.append(k)
    k=k-1
    其他:
    k=args[0]
    如果args[0]args[1]时:
    myList.append(k)
    k=k+args[2]
    返回myList
    
    到目前为止,您尝试了哪些方法,哪些方法无效?我几乎什么都没尝试过。我只是不知道该怎么做。好吧,我从range函数文档开始,从那里你至少知道你需要创建这样一个函数
    def myRange(start=None,stop,step=None):
    啊,我确实走了那么远,但我对其中的列表部分感到困惑。请阅读。你说你“走了那么远”,但在你的帖子里你说你不知道从哪里开始,所以你显然想到了一些东西。。。如果您没有代码,请编辑您的帖子,甚至包括您的想法。在这种情况下,具有
    *args、**kwargs
    的变量函数没有帮助。只有3个参数可以满足。保持简单。我认为这可能有意义,因为将10传递给range(range(10))会使stop=10,但在函数中,变量start实际上会保持stop。这是一个学习新东西的机会。但我明白你的意思。