在开始之前 - 如果我们不直接复制代码,请告知我的课程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。
非常感谢任何回答的人 - 我知道这是一个非常重要的问题>。<
如果您需要澄清任务,请告诉我!任何帮助都将非常感激:)
答案 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