我最近开始在edX上的MIT课程中学习Python。
但是,我在某些练习中遇到了一些麻烦。这是其中之一:
“编写一个名为oddTuples的过程,它将一个元组作为输入,并返回一个新的元组作为输出,其中输入元组的每个其他元素都被复制,从第一个元素开始。所以如果test是元组('我','是','a','测试','元组'),然后在此输入上评估oddTuples将返回元组('I','a','tuple')。“
根据讲座,正确的代码如下:
def oddTuples(aTup):
'''
aTup: a tuple
returns: tuple, every other element of aTup.
'''
# a placeholder to gather our response
rTup = ()
index = 0
# Idea: Iterate over the elements in aTup, counting by 2
# (every other element) and adding that element to
# the result
while index < len(aTup):
rTup += (aTup[index],)
index += 2
return rTup
但是,我尝试使用以下代码以不同的方式自行解决:
def oddTuples(aTup):
'''
aTup: a tuple
returns: tuple, every other element of aTup.
'''
# Your Code Here
bTup=()
i=0
for i in (0,len(aTup)-1):
if i%2==0:
bTup=bTup+(aTup[i],)
print(bTup)
print(i)
i+=1
return bTup
然而,我的解决方案不起作用,我无法理解为什么(我认为它应该与导师提供的代码基本相同)。
答案 0 :(得分:3)
我只想补充一点,这个问题的pythonic解决方案使用带有步长的切片,并且是:
newTuple = oldTuple[::2]
oldTuple[::2]
具有以下含义:使用spepwidth为2从old(省略值)到结束(省略)获取oldtuple的副本。
答案 1 :(得分:2)
我想我在这里遇到了问题。
在for循环中,为i
指定两个固定值:
0
len(aTup)-1
您真正想要的是从0
到len(aTup)-1
的值范围:
0
1
2
...
len(aTup)-1
为了将开始值和结束值转换为范围内的所有值,您需要使用Python的range
方法:
for i in range(0,len(aTup)-1):
(实际上,如果您查看range's documentation,您会发现第三个参数名为skip
。如果您使用它,您的功能会变得无关紧要:))
答案 2 :(得分:1)
您的代码应为:
for i in range(0,len(aTup)):
# i=0, 1, 2 ..., len(aTup)-1.
而不是
for i in (0,len(aTup)-1):
# i=0 or i=len(aTup)-1.
答案 3 :(得分:1)
行for i in (0,len(aTup)-1):
和i+=1
并没有完全按照您的意愿行事。与其他答案一样,您可能需要for i in range(0,len(aTup)-1):
(插入range
),但您还要删除i+=1
,因为for
- in
构造设置了i
{{1}}的值依次为迭代中的每个项目。
答案 4 :(得分:0)
好的,在运行代码时输出如下:
Private Sub CommandButton1_Click()
Dim Sheet1 As Worksheet, Sheet2 As Worksheet
'Variable Declaration
Dim iCnt As Integer, i As Long, j As Long, shdr As String
Dim cols(12) As Long
Dim count As Integer, lastRow As Integer, destCol As Integer
count = 0
If count = 0 Then
MsgBox "Please Select One Or More Items Then Try Again!", vbExclamation
Exit Sub
End If
destCol = 1
Application.ScreenUpdating = False
' here follows the rest of your sub
这是因为您编写的代码中的问题是您实现for循环的方式。 而不是使用:
('I', 'tuple')
您应该将其更改为以下内容,您的代码将起作用:
for i in (0,len(aTup)-1):
range函数基本上创建一个整数列表,范围从0到元组的长度 - 。
所以你的代码应该在编辑之后看起来像:
for i in range(len(aTup)):