Python中的“read-it-and-weep”程序中非常奇怪且具有挑战性的错误

时间:2016-11-08 01:51:32

标签: python-3.x

我正在试图找出我的代码有什么问题。这是我到目前为止所做的:

std::map

所以对于那些不熟悉read-it-and-weep的人来说,如果给出数字1111,它将输出41.你读取整数,序列中的下一个整数是你读完之后的内容它再次。例如,第一对夫妇是:1,11,21,1211,1111221,312211,13112221等......所以,这是我的问题:

每当我的重复一个不在它旁边的数字时,例如1211或11122211,它就不起作用了。由于某种原因,1再次被计算,一切都变得奇怪。

例如:

  • In:I = 1211
  • 在:下一个(I)
  • 出:2121

什么时候应该是111221.任何帮助都将非常感谢!!!

谢谢!

2 个答案:

答案 0 :(得分:0)

您的for循环逻辑错误。首先,范围上升,但不包括n。你循环应该是render() { const {options} = this.props; return ( <div> <div className="optionsModalContent"> <div className={style.optionsModalTitleBar}> <div className={style.optionsModalTitle}>Options</div> <div className={style.optionsModalExit} onClick={this.exitModal}>X</div> </div> <div className={style.optionsModalContentInner}> <div className={style.optionsModalOptionsList}> <div className={style.optionItem}> <form onSubmit={this.setUser}> <input type="text" id="userEmail" ref="userEmail" placeholder="Set account email"/> </form> </div> </div> ); }

1是因为你已经开始计数为1,所以如果你从0开始,你将重复计算第一个元素。这应该是导致此错误的原因,您将重复计算每个数字。

答案 1 :(得分:0)

使用itertools.groupby()

,您当然可以更简单地做到这一点
>>> import itertools as it
>>> n = 1211
>>> [(str(len(list(i))), c) for c, i in it.groupby(str(n))]
[('1', '1'), ('1', '2'), ('2', '1')]

现在只是展平并join()

>>> ''.join(it.chain.from_iterable((str(len(list(i))), c) for c, i in it.groupby(str(n))))
'111221'