A seaborn barplot can be used to draw the bars. The hue parameter is responsible to color each bar and create entries for an accompanying legend with the names.
To get the 'No. of Subjects' in the xtick labels, they can be set explicitly.
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
df = pd.DataFrame({'Name': ['Sai', 'Kiran', 'Karan', 'Teja'],
'Percentage': [90, 84, 26, 70],
'No. of Subjects': [4, 2, 5, 5]})
ax = sns.barplot(x='Name', y='Percentage', hue='Name', dodge=False, data=df)
ax.set_xticklabels(df['No. of Subjects'])
ax.set_xlabel('No. of Subjects')
ax.set_ylim(0, 100)
ax.legend(loc='upper left', bbox_to_anchor=(1.01, 1.05))
for i, perc in enumerate(df['Percentage']):
ax.text(i, perc, f'{perc:.0f} %\n', ha='center', va='center', size=15)
plt.tight_layout()
plt.show()