Похоже, что он производит то, что вы хотите.Вы должны переместить и i, и индекс вне цикла.
list_1=["a", "b", "c", "d", "e", "f", "g"]
i = 0
index = 6
while True:
a = input("Enter:")
if a == "apple":
a = 0
if i < 31:
index = (index + 1) % 7
d = list_1[index]
print( "day" ,i, d )
start = input("Start: ")
current = input("Current: ")
i = i + 1
a = a + 1
Вот что делает опубликованный вами цикл
while(true) #like saying while true is a true statement or while true==true
get user input
if input == 'apple'
then set a=0, i=0, index=6
if i < 31 #which it can't be because we just set it to 0
Do some arithmetic on index #which will always start as 6 because we just assigned it
...
increase i and a by 1 #They will be equal to 1 now
Now go through the loop again
get input
if input=='apple'
set a=0, i=0, and index=6 again
check i<31 #can't be, we just set it to 0
do arithmetic on index #which is equal to 6 again because we just set it.
...
increase a and i by 1
And your loop does this over and over
Но если вы сначала назначите i и индекс вне цикла, тогда мы только установим их равными 0 и 6 один раз.