+ 2
Can some please help me identify where the error is?
I am busy with basic python exercises here. I keep getting a TypeError: 'type' object is not subscriptable message. s = ("Enter a string: ") print("Original String is", s) for i in range(0, len(s)-1, 2): print("Printing only even index chars") print("index[",i,"]", str[i] ) 👆 That is my own program. _________________________________________________ 👇 This is the solution from some website I got the exercise from. def printEveIndexChar(str): for i in range(0, len(str)-1, 2): print("index[",i,"]", str[i] ) inputStr = input("Enter String ") print("Orginal String is ", inputStr) print("Printing only even index chars") printEveIndexChar(inputStr)
4 Antworten
+ 1
So let's start by analyzing the error here: 'type' object is not subscriptable.
This may sound a little vague so we'll dissect it:
'type' object: any built-in type really, so: int, float, str, list, tuple, ...
subscriptable: a subscriptable is something you access an item of; a container, like so: list_a[1], some_tuple[1:3]
The a[i] notation is called subscripting
So, what must've happened is that you tried to access an item of a type, which doesn't make sense. And you did: str[i] on line 6. Also, your string is originally named s, so you might want to write s[i] on line 6, instead.
A rule of thumb is to never name your variables the same as built-ins like: str, float, int, input, max, min, sum, iter, next, etc. Because then you'll lose the reference to that built-in and you can't use it in later code. Huge problem if other people import your code into their own.
You can see a list of such names by doing:
import builtins
print(dir(builtins))
Have fun pythoning!
+ 1
P.S. have a look at f-strings:
when you prepend a literal string (not a variable name) with an unquoted f, you get an f-string. They help you "format" your code properly.
Say you wanna print a variable's content inside a string. One way is to print('Hello, I\'m ' + name + '. Nice to meet you.'), or print('Hello, I\'m', name, '. Nice to meet you.').
But you can also put your variable inside { } in an f-string like this: print(f'Hello, my name is {name}. Nice to meet you.'). That saves you and your readers some undeserved headache.
Python supports expressions inside { } so you can do: print(f'my favourite list is {[i**2 for i in range(10)]}'). No necessity to print it by the way. You can hold it in a variable:
h = 195 # int
w = '83' # str
Me = f'height: {h}cm, weight: {w}kg'
# Me: 'height: 195cm, weight: 83kg'
+ 1
f-strings (cont'd)
Now, format specifiers! I didn't really find a good resource for this online so here's how far trial and error gets you:
>>> pi = 3.141
>>> f'{pi: ^8}' # center leaning-left of total length 8
' 3.141 '
>>> f'{pi: <8}' # align left
'3.141 '
>>> f'{pi: >8}' # align right
' 3.141'
>>> f'{pi:x^15}' # specify fill character
'xxxxx3.141xxxxx'
>>> f'{pi:.2f}' # truncate float
'3.14'
>>> f'{pi:?>20.1f}' # all together
'?????????????????3.1'
+ 1
Zuke Thanks. 🙏 That was helpful. I got the code to run. Stay blessed