# Strings: ordered, immutable, text representation

my_string = "Hello World"
char = my_string[0]
print(char)

substring = my_string[1:5]
print(substring)

# Concatenation of two strings
greeting = "Hello"
name = "Tom"
sentence = greeting + " " + name
print(sentence)

for i in greeting:
    print(i)

if 'e' in greeting:
    print("yes")
else:
    print("no")

my_string = '      Hello World    '
print(my_string)
my_string = my_string.strip()
print(my_string)

# Operations on a string
my_string = "Hello World"
print(my_string.upper())
print(my_string.lower())
print(my_string.startswith('H'))
print(my_string.endswith('H'))
print(my_string.find('o'))
print(my_string.count('o'))
print(my_string.replace('World', 'Universe'))

# Converting a string to a list
my_string = 'how are you doing'
my_list = my_string.split(" ")
print(my_list)
my_string = 'how,are,you,doing'
my_list = my_string.split(",")
print(my_list)

# Converting a string into a list
new_string = ' '.join(my_list)
print(new_string)

# String formatting, %, format(), f-string
var = "Tom"
my_string = "the variable is %s" % var
print(my_string)

var = 3
my_string = "the variable is %d" % var
print(my_string)

var = 3.989898
my_string = "the variable is %.2f" % var
print(my_string)
# old formatting style

# new method
var = 3.989898
var2 = 6
my_string = "the variable is {}".format(var)
print(my_string)

my_string = "the variable is {:.2f}".format(var)
print(my_string)

my_string = "the variable is {:.2f} and {}".format(var, var2)
print(my_string)

# Newest method 
my_string = f"the variable is {var} and {var2}"
print(my_string)

my_string = f"the variable is {var*2} and {var2+1}"
print(my_string)