2

在我开始之前 - 让我们知道我的班级允许为这项作业寻求外部帮助,只要我们不直接复制代码。我要的是帮助,而不是公然不诚实地获得的代码。我无意以任何方式提出这个问题来作弊。

既然已经澄清了......

这是作业:

#1:编写一个函数 scalar_mult(s, v),它接受一个数字 s 和一个列表 v 并返回 v 乘以 s 的标量倍数。

例如:

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,但我真的不明白如何处理它。关于如何开始或如何工作的任何想法?

这是周五到期,昨天分配的。仅供参考。

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

如果您需要任何任务的澄清,请告诉我!任何帮助将不胜感激 :)

4

3 回答 3

1

对于您帖子的第一部分,您的错误消息是由于您使用+带有两个操作数的运算符:a ,(逗号)和v,这可能是一个列表。如果您只想打印v,您的print语句应如下所示:

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

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

>>> example_string = 'hello world!'
>>> example_string[3]
'l'
>>>

我当然不能为你回答你的家庭作业,但我肯定会推荐看看 python 的内置类型文档。它可以帮助您了解基本的字符串操作,以便您可以构建新函数。希望这会对您有所帮助:)

于 2012-03-28T20:44:03.890 回答
0

所以你想要实现的目标在 Python 中是不可能的。你可能做的是

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

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

现在您在上面看到的称为列表理解。你也可以使用地图做同样的事情,但你可以把它当作练习。

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

对于第二个问题,您通常应该使用库替换,但似乎您可能不会使用它。所以你可以通过自我注释的代码

>>> 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
于 2012-03-28T20:26:21.777 回答
0

首先是因为 Python 是强类型的,所以不能将任意类型加在一起。

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

其次,委托给替换的字符串方法。

于 2012-03-28T20:21:04.540 回答