来自edX MIT类的入门Python任务

时间:2012-10-16 18:20:33

标签: python

我最近开始在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

然而,我的解决方案不起作用,我无法理解为什么(我认为它应该与导师提供的代码基本相同)。

5 个答案:

答案 0 :(得分:3)

我只想补充一点,这个问题的pythonic解决方案使用带有步长的切片,并且是:

newTuple = oldTuple[::2]

oldTuple[::2]具有以下含义:使用spepwidth为2从old(省略值)到结束(省略)获取oldtuple的副本。

答案 1 :(得分:2)

我想我在这里遇到了问题。

在for循环中,为i指定两个固定值:

0
len(aTup)-1

您真正想要的是从0len(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)):