如何在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。这是一个学习新东西的机会。但我明白你的意思。