如何在此Python分配中将列表,标量和向量绑定在一起?

时间:2012-03-28 20:13:43

标签: python list vector scalar

在开始之前 - 如果我们不直接复制代码,请告知我的课程IS可以为此作业寻求外部帮助。我要求的是 help ,而不是公然不诚实地获取代码。我不想以任何方式提出这个问题而作弊。

现在已经清理了......

这是作业:

#1:编写一个带有数字,s和列表的函数scalar_mult(s,v),并用s返回v的标量倍数。

例如:

def scalar_mult(s, v):
  """    
  >>> scalar_mult(5, [1, 2])       
  [5, 10]       
  >>> scalar_mult(3, [1, 0, -1])      
  [3, 0, -3]       
  >>> scalar_mult(7, [3, 0, 5, 11, 2])       
  [21, 0, 35, 77, 14]    
  """

我已经开始了这一部分,这就是我所拥有的:

import math

s = input("Please enter a single number to be our scalar value: ")
v = input("Please enter a vector value, like [1, 2] or [5, 6, 3], to be our vector value: ")
#Note to self: TUPLES use the parentheses. LISTS use the brackets

print "scalar_mult(", s, ",", + v, "is:"
print v * s

scalar_mult(s, v)

但我不断收到此错误消息:

   print "scalar_mult(", s, ",", + v, "is:"
 TypeError: bad operand type for unary +: 'list'

你明白如何解决这个问题吗?

然后是第二部分......

#2:编写一个函数replace(s,old,new),用字符串s替换所有出现的old和new。

例如:

def replace(s, old, new):     
  """      
  >>> replace('Mississippi', 'i', 'I')       
  'MIssIssIppI'       
  >>> s = 'I love spom!  Spom is my favorite food.  Spom, spom, spom, yum!'      
  >>> replace(s, 'om', 'am')       
  'I love spam!  Spam is my favorite food.  Spam, spam, spam, yum!'
  >>> replace(s, 'o', 'a')       
  'I lave spam!  Spam is my favarite faad.  Spam, spam, spam, yum!'     """ 
  """

我还没有开始#2,但我真的不明白如何接近它。关于如何开始或如何运作的任何想法?

这是星期五到期,昨天分配。只是一个FYI。

非常感谢任何回答的人 - 我知道这是一个非常重要的问题>。<

如果您需要澄清任务,请告诉我!任何帮助都将非常感激:)

3 个答案:

答案 0 :(得分:1)

对于帖子的第一部分,您的错误消息是由于您正在使用+运算符,其中包含两个操作数:,(逗号)和{{1} },这可能是一个列表。如果您只想打印v,则v语句应如下所示:

print

对于第二部分,有许多方法可以解决这个问题,但最简单的概念是理解python中的字符串是一个字符列表,因此您可以像对待数组一样操作它。例如:

print "scalar_mult(", s, ",", v, "is:"  # Note that I removed the `+`

我当然不能为你回答你的作业,但我肯定建议看看python的built-in types documentation。它可以帮助您理解基本的字符串操作,以便您可以构建新的功能。希望这会对你有所帮助:))

答案 1 :(得分:0)

第一个是因为Python是强类型的,所以你不能一起添加任意类型。

>>> '%d %r' % (1, [2, 3])
'1 [2, 3]'

对于第二个,委托替换。

的字符串方法

答案 2 :(得分:0)

因此,您在Python中无法实现的目标。你可能做的是

>>> def scalar_mult(s, v):
    return [s*x for x in v]

>>> scalar_mult(5, [1, 2])
[5, 10]
>>> 

现在你看到的是名单列表理解。您也可以使用地图执行相同操作,但也可以将其作为练习。

因此,如果深入研究代码,则迭代所有元素,并为每个元素乘以标量值。结果将放在您理解的新列表中。

对于第二个问题,您通常应该使用库replace,但似乎您可能不会使用它。所以你可以浏览自我评论的代码

>>> def replace(st,old,new):
    res=[] #As string is not mutable
           #so start with a list to store the result
    i=0    #you cannot change an index when using for with range
           #so use a while with an external initialization
    while i < len(st): #till the end of the string, len returns the string length
        if st[i:i+len(old)]==old: #you can index a string as st[begin:end:stride]
            res.append(new) #well if the string from current index of length
                            #equal to the old string matches the old string
                            #append the new string to the list
            i+=len(old)     #update the index to pass beyond the old string
        else:
            res.append(st[i]) #just append the current character
            i+=1              # Advance one character
    return ''.join(res) #finally join all the list element and generate a string