我很新,只是遇到了一个问题:
给定一个字符串和一个非负整数
n
,返回一个更大的字符串,即原始字符串的n
个副本。
我回答:
def string_times(str, n):
return(str * n)
并通过了所有测试。提供的解决方案:
def string_times(str, n):
result = ""
for i in range(n): # range(n) is [0, 1, 2, .... n-1]
result = result + str # could use += here
return result
我的问题是:为什么我的简单解决方案在某些情况下无法正常工作, 或者只是一个经验丰富的程序员过度思考的问题?
答案 0 :(得分:1)
您的回答是正确的,但练习可能希望使用+
和+=
来揭示其他概念,例如for loops和字符串连接。
那就是说,我想补充说明的解决方案,当你真的不需要循环变量时,使用下划线是一种更好的做法。这是一种告诉未来程序员你没有在循环中的任何地方使用变量的方法。
如果您实际上不需要列表(由范围生成),那么使用xrange也会更好。您可以尝试使用翻译range(1000000)
和xrange(1000000)
来查看即时差异。 xrange
实际上是一个generator,可以提高内存效率。
在python 3中,range默认返回一个生成器
# changed i to an underscore, using xrange instead of range
for _ in xrange(n): # xrange(n) *generates* 0, 1, 2 ... n-1