作者回复: 您好,可能由于之前演示代码的干扰,导致您运行的时候显示不正确。我把for嵌套if的代码单独贴一下,您可以对照一下自己编写的代码进行调试: zodiac_name = (u'摩羯座', u'水瓶座', u'双鱼座', u'白羊座', u'金牛座', u'双子座', u'巨蟹座', u'狮子座', u'处女座', u'天秤座', u'天蝎座', u'射手座') zodiac_days = ((1, 20), (2, 19), (3, 21), (4, 21), (5, 21), (6, 22), (7, 23), (8, 23), (9, 23), (10, 23), (11, 23), (12, 23)) # 用户输入月份和日期 int_month = int(input('请输入月份:')) int_day = int(input('请输入日期:')) for zd_num in range(len(zodiac_days)): if zodiac_days[zd_num] >= (int_month, int_day): print(zodiac_name[zd_num]) break elif int_month == 12 and int_day >23: print(zodiac_name[0]) break
作者回复: for…in用于循环可迭代对象,如 列表,字典,元组 while用于满足某一条件后循环执行
作者回复: zodiac_days是一个元组,元组是序列的一种,因此元组可以使用序列的索引、切片、加、乘等功能。这里使用的中括号就是取元组某一个元素的索引功能。中括号里的整数对应着元组的下标
作者回复: 您好,例子中的zodiac_days是元组,使用下标这种访问方式不但适用于列表,像是元组、字符串都可以使用,这三种在Python里还有个统称,被称作序列,所以你会在一些纸质书籍上看到 序列支持下标操作 的定义。所以使用下标访问没有问题。 我再额外说一下while这条语句, 当n为0时zodiac_days[n] 取得第一个元素(1, 20)也是元组,元组和元组之间是能够进行大小比较的,因此 while zodiac_days[n] < (int_month,int_day): 会变成 while (1, 20) < (3, 18) 这样的形式进行中间过程运算
作者回复: 不要着急, 这里你可以print()函数,打印出来这三个变量的值, 你会发现它的形式是 (11, 22) <= (12, 25) 这样的 这里<=左右是两个元组数据类型做比较, 它的工作过程是元组的第一个元素和另一个元组第一个元素比较,如果 11< 12再比较第二个元素的大小
作者回复: 补全是pycharm自带的功能,左侧括号之后会自动补全,不是快捷键
作者回复: 逐个位置比较,例如 (3,4) > (2,5) ,如果3>2成立就不继续比较了,返回true ;如果第一个位置相等则比较第二个位置的数字,如(2,6) > (2,5) ,第一个相等则比较第二个元素,返回true,可以在命令行执行python命令在交互模式进行相应测试
作者回复: 可以用后面学习的“异常”来解决
作者回复: 首先思路是对的,纠正两个地方的语法错误 (8, 12) 和 elis: 分别是使用了全角(中文)的括号 、 elis 应该为else 另外 zodiac_temp = () 是将zodiac_temp定义为了tuple类型,那么 zodiac_temp[i] 的用法在tuple里面就必然不支持了,所以会一直报TypeError 错误。 后面的视频中有使用for循环代替filter实现的代码,这里就不再重复答复了。
作者回复: 正确,因为有很多刚入门的同学,没有用太专业的术语