2016-04-12 2 views
0

У меня есть этот код:не все аргументы преобразуются во строке форматирования - 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 

Что не так с моим кодом?

+0

Для начала 'strnum +" 37 "', вероятно, следует заменить на 'strnum + =" 37 "'. – Antoine

+0

@Antoine Спасибо – Ansh145

+1

Я не получаю ту же ошибку, когда я запускаю тот же код, хотя и не должен давать эту ошибку, поскольку код, который вы выложили, явно выполняет целочисленное преобразование. Вы действительно уверены, что действительно используете код, который вы разместили? – Dolda2000

ответ

0

Я думаю, что python думает, что вы пытаетесь выполнить замену строк, когда вы намереваетесь фактически использовать оператор модуля. Возможно, попробуйте использовать круглые скобки вокруг l + 1, например %(l+1)? Не уверен, что это сработает, но это единственное, что, кажется, объясняет вашу ошибку.

Кроме того, я думаю, что вы имеете в виду, чтобы линия над ней говорят:

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

Это также может быть причиной ошибки. В противном случае строка над ним ничего не делает.

Кроме того, это может помочь:

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

Позвольте мне знать, если что-то работает.

+0

Да, сработало, спасибо – Ansh145

Смежные вопросы