2016-02-13 111 views
3

我正在嘗試創建一個長計算計算器(沒有長除法,加法等),而在長分區部分我試圖讓數字但我不能(如在numdiv)TypeError:字符串索引必須是數字,而不是對象(Python)

例如:在240/12,我試圖找到的數字是24,然後我會有另一個循環,將添加12找到2(作爲在24/12是2)。

這裏是我的代碼:

############## 
#number is bigger (or equal) to number 2 

number = 19000 
operation = '/' 
number2 = 12 

############## 

import math 

longer = len(str(number)) 
shorter = len(str(number2)) 
if operation == '/': 
    print str(number2) + '/' + str(number) 
for i in range(longer - 1): 
    if int(str(number)[0, i]) >= number2: 
     numdiv = int(str(number)[0, i]) 
for i in range(1, math.trunc(numdiv/number2)): 
    if number2 * (i + 1) >= numdiv: 
     print (shorter + 1) * ' ' + number * i 

的錯誤是從那裏我做了

if int(str(number)[0, i]) >= number2: 

它說

TypeError: string indices must be numbers, not object 

我試圖結束5線做

if str(number)[:i] >= number2: 
     numdiv = str(number)[:i] 
for i in range(1, math.trunc(numdiv/number2)): 
    if number2 * (i + 1) >= numdiv: 
     print (shorter + 1) * ' ' + number * i 

numdiv在這種情況下,試圖成爲一個整數,這樣做會導致問題:

ValueError: invalid literal for int() with base 10: '' 

我該如何解決這個問題?

+1

我注意到的第一件事是你應該使用'''[0:i]'''來表示一系列索引,而不是[0,i]。不過,當我複製它時,我得到它「不是元組」而不是「不是對象」... – limasxgoesto0

+0

你不是正確地索引字符串。我不確定你想要做什麼,但索引格式是[開始:停止:步驟],現在它認爲你試圖索引一個列表,因此錯誤。 – user3014097

+0

這[教程](http://pythoncentral.io/cutting-and-slicing-strings-in-python/)應該給你一個關於如何分割字符串以及切片可以做什麼的好主意。 –

回答

1

With somestring[0, i]您試圖使用元組索引到一個字符串。

證明:

>>> class mystr(str): 
...  def __getitem__(self, x): 
...   print(x, type(x)) 
... 
>>> f = mystr('foo') 
>>> f[0, 1] 
((0, 1), <type 'tuple'>) 

試圖索引到一個字符串中使用任何東西,但整數會給你一個TypeError

如果你想從你的串片高達定位i,使用

str(number)[0:i] 

或只是

str(number)[:i] 

這不相同。

相關問題