为何下列代码是正确的,但是遍历字典的时候为何返回值不是全部?是哪里出问题了?

以下代码段必须使用代码控件:

favorite_languages ={
    'jen':['python','ruby'],
    'sarah':['c'],
    'edward':['ruby','go'],
    'phil':['python','haskell'],
    }
for name,languages in favorite_languages.items():   
    if len(languages) == 1:
         print("\n" + name.title() + "'s favorite languages is:")
         for language in languages:
               print('\t' + language.title())      
else:
     print("\n" + name.title() + "'s favorite languages are:")
     for language in languages:
          print('\t' + language.title())      

返回值:
Sarah's favorite languages is:
C

Phil's favorite languages are:
Python
Haskell

试试加个引索?

这个很简单呀,不需要加条件判断:

favorite_languages ={
    'jen':['python','ruby'],
    'sarah':['c'],
    'edward':['ruby','go'],
    'phil':['python','haskell'],
    }
for name,languages in favorite_languages.items():   
     print("\n" + name.title() + "'s favorite languages is:")
     for language in languages:
           print('\t' + language.title())

而且你的源码中缩进貌似错误。

for......else......的执行顺序为:
当迭代对象完成所有迭代后且此时的迭代对象为空时,如果存在else子句则执行else子句,没有则继续执行后续代码;如果迭代对象因为某种原因(如带有break关键字)提前退出迭代,则else子句不会被执行,程序将会直接跳过else子句继续执行后续代码。
你的代码执行完for之后,name, languages因为是全局变量,所有记录的值是for的最后一个次。

favorite_languages ={
    'jen':['python','ruby'],
    'sarah':['c'],
    'edward':['ruby','go'],
    'phil':['python','haskell'],
    }
for name,languages in favorite_languages.items():   
    if len(languages) == 1:
         print("\n" + name.title() + "'s favorite languages is:")
         for language in languages:
               print('\t' + language.title())      
    else:
        print("\n" + name.title() + "'s favorite languages are:")
        for language in languages:
            print('\t' + language.title())