并非在字符串格式化过程中转换所有参数 - Python

时间:2016-04-12 00:13:53

标签: python

我有这段代码:

def rndint(self, s=0, l=10):
    num = pow(self._seed, 2)
    strnum = str(num)
    if len(strnum) < 3:
        strnum + "37"
    mid = int(strnum[1:len(strnum)-1]) % l+1
    self._seed = mid
    return mid

问题是,当我用:

运行它时
rnd = Random(100)
rnd.rndint()

它给出了:

Traceback (most recent call last):
    File "C:\Anaconda2\lib\site-packages\IPython\core\interactiveshell.py", line 3066, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
    File "<ipython-input-29-0d460ce98561>", line 1, in <module>
        rnd.rndint()
    File "C:\Users\Anshul\PycharmProjects\AMath\amath\random\randomGen.py", line 16, in rndint
        mid = int(strnum[1:len(strnum)-1]) % l+1
TypeError: not all arguments converted during string formatting

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

我认为当你打算实际使用模数运算符时,python认为你正在尝试进行字符串替换。也许尝试使用l + 1周围的括号%(l+1)?不确定这是否有效,但这是解决你的错误的唯一方法。

另外,我认为你的意思是让它上面的一行说:

if len(strnum) < 3:
    strnum += "37"

这也可能导致错误。否则它上面的一行什么都不做。

此外,这可能有所帮助:

mid = int(strnum[1:-1])%(l+1)

让我知道是否有效。