• Jarvis
    2019-01-12
    05:52 的解释有点误导,不是没有匹配成功的也进行了输出,是输出了所有符合 if 条件的星座,即日期 >= 输入日期
    
     8
  • 心照不宣
    2019-06-12

    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))

    #(month, day)=(7, 14)
    month=int(input( '请输入你出生的月份'))
    day=int(input( '请输入你出生的日期'))



    n=0
    while (month, day) > zodiac_days[n]:
        n=n+1
        if (month,day) < zodiac_days[n]:
            print ('你的星座是%s' %(zodiac_name[n]))
            break

    python zodiac.py
    请输入你出生的月份7
    请输入你出生的日期14
    你的星座是巨蟹座
    展开
    
     1
  • 关关
    2018-09-28
    想问一下while和for的区别?

    作者回复: for…in用于循环可迭代对象,如 列表,字典,元组
    while用于满足某一条件后循环执行

    
     1
  • Andy
    2019-12-29
    老师您好,您在 input("请输入月份:")前面加int的时候,括号是怎么自动补全的,快捷键是什么?谢谢!

    作者回复: 补全是pycharm自带的功能,左侧括号之后会自动补全,不是快捷键

    
    
  • Geek_eb6c14
    2019-12-19
    视频代码中有句代码不是很理解:
    int_month = int(input("请输入月份:"))
    int_day = int(input("请输入日期:"))
    for zd_num in range(len(zodiac_days)):
        print(zodiac_days[zd_num])
        print(zd_num)
         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
    就是if zodiac_days[zd_num] >= (int_month, int_day):这个怎么比较呢?
    比如我输入月份是3,日期是6,zodiac_days[zd_num]也就是第二个即(3, 21),那(3, 21)>=(3, 6)这是怎么比较的呢?
    展开

    作者回复: 逐个位置比较,例如 (3,4) > (2,5) ,如果3>2成立就不继续比较了,返回true ;如果第一个位置相等则比较第二个位置的数字,如(2,6) > (2,5) ,第一个相等则比较第二个元素,返回true,可以在命令行执行python命令在交互模式进行相应测试

    
    
  • 爱吃鱼的猫
    2019-04-20
    感觉老师忽略了一个实际场景,客户输入的月份如果大于12,日期大于31.这个没有让用户重新输入的动作,我查了下 python没有goto或者goback类似的用法,请老师解惑,谢谢!

    作者回复: 可以用后面学习的“异常”来解决

    
    
  • Stone
    2019-03-31
    怎么用for循环实现类似filter的功能呢?下面这样的代码语法一致报错。。。

    zodiac = [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_day) = (8, 12)
    i=0
    zodiac_temp = ()
    for num in range(len(zodiac_days)):
        if zodiac_days[num] <= (int_month, int_day):
            zodiac_temp[i] = zodiac_days[num]
            i = i + 1
        elis:
            break
    zodiac_len = len(list(zodiac_temp))
    print (zodiac[zodiac_len])
    展开

    作者回复: 首先思路是对的,纠正两个地方的语法错误
    (8, 12) 和 elis:
     分别是使用了全角(中文)的括号 、 elis 应该为else

    另外 zodiac_temp = () 是将zodiac_temp定义为了tuple类型,那么 zodiac_temp[i] 的用法在tuple里面就必然不支持了,所以会一直报TypeError 错误。
    后面的视频中有使用for循环代替filter实现的代码,这里就不再重复答复了。

    
    
  • 肖平亮 Sean
    2019-03-17
    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


    请问上面 print(zodiac_name[zd_num]) 这里可不可以说是:通过列表的下标偏移量来访问元组的的内容?
    展开

    作者回复: 正确,因为有很多刚入门的同学,没有用太专业的术语

    
    
  • 肖平亮 Sean
    2019-02-23
    不知道老师注意到没有,星座那个测试,不管是用第一个方法还是后边用if,都是输出2个星座:金牛座和双子座

    作者回复: 您好,可能由于之前演示代码的干扰,导致您运行的时候显示不正确。我把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

    
    
  • 木由
    2019-02-16
    老师请问下我在代码的基础上嵌套了个判断输入的月日是否在范围的判断,然后发现当输入月日为11月20往后的时候,无法正常产生结果,感觉是循环和判断可能什么地方冲突了,但是我看了下没看出来,能帮忙检查下么?代码如下,感谢。
    ------------------------------------------------------------------------------------------
    # 根据输入月日判断所属星座

    zodiac_name = (u'摩羯座', u'水瓶座', u'双鱼座', u'白羊座', u'金牛座', u'双子座',
                   u'巨蟹座', u'狮子座', u'处女座', u'天秤座', u'天蝎座', u'射手座')
    # Unicode功能

    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("请输入日:"))

    # Filter功能
    # zodiac_day = filter(lambda x: x <=(int_month, int_day), zodiac_days) # 筛选出日期小于输入日期的星座日期
    # zodiac_len = len(list(zodiac_day)) % 12
    # print(zodiac_name[zodiac_len])

    # 用for...if...嵌套实现以上Filter功能
    for zd_num in range(len(zodiac_days)):
        month = int(input("请输入月份:"))
        day = int(input("请输入日:"))
        if month in range(1, 13) and day in range(1, 32):
            if zodiac_days[zd_num] >= (month, day):
                print(zodiac_name[zd_num])
                break
            elif month == 12 and day > 23:
                print(zodiac_name[0])
                break
            else:
                print("Error happened")
                continue
        else:
            print("Please check input range.")
    展开

    作者回复: 问题出在“elif month == 12 and day > 23:”这条语句,当你输入 12月1日 ~12月20日时,既不满足 上面的if语句,也不满足elif语句,就运行到了else语句这里了。建议尝试修改 if zodiac_days[zd_num] >= (month, day): 将12月1日 ~12月20日的输入包括到这条判断语句里。

    
    
  • 没时间了ngu
    2019-01-18
    老师新手问下: python里 if后面 不支持&& 这些 只能用and 或者 or吗
    如果判断 month <1 or month > 12 怎么写?
     !(1< month < 12) 这种写法也不对。 搜了一下没搜到,求指教。

    作者回复: 是的,要用and 和 or 这种方式

    
    
  • 彩色的沙漠
    2019-01-13
    老师录入的星座日期有误,
    例如:摩羯座12.22-1.19,老师录入的是(1,20)那判断条件就不应该是<= 而是 <
    白羊座3.21-4.19 老师录入的数据是(4.21) 毫无章法的数据?
    天平座9.23-10.23 老师录入的数据(10,23) 那判断条件应该是<= 成立
    射手座11.23-12.21 老师录入(12,23)摩羯座的判断条件不正确
    可能我们找的数据不一样,我看的是百度百科的星座日期数据,总之根据自己定义的元组数据是否包含边界设置判断条件
    根据百度百科星座日期的代码如下:
    zodiac_name = (u'摩羯座', u'水瓶座', u'双鱼座', u'白羊座', u'金牛座', u'双子座',
                   u'巨蟹座', u'狮子座', u'处女座', u'天秤座', u'天蝎座', u'射手座')
    zodiac_days = ((1, 20), (2, 19), (3, 21), (4, 20), (5, 21), (6, 22),
                   (7, 23), (8, 23), (9, 23), (10, 24), (11, 23), (12, 22))

    #用户输入月份和日期
    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 > 21:
            print(zodiac_name[0])
            break

    n = 0
    while zodiac_days[n] <= (int_month, int_day):
        if int_month == 12 and int_day > 21:
            break
        n = n+1

    print(zodiac_name[n])
    展开

    作者回复: 关于星座日期方面我的数据也不专业,主要想借用这个例子给大家讲解for if的使用,而星座生肖刚好是大家所熟知的需要循环和判断的例子,如果日期有出入还请大家谅解。

    
    
  • 翔子
    2018-11-04
    老师你好:输入10月24及之后的日期,程序都会报错,请问是怎么回事?

    请输入月份:10
    请输入日期:24
    Traceback (most recent call last):
      File "C:/Users/chenx/PycharmProjects/untitled/zodiac_V2.py", line 10, in <module>
        if zodiac_days[zd_num] >= (int_month,int_day):
    TypeError: '>=' not supported between instances of 'float' and 'tuple'

    Process finished with exit code 1
    展开

    作者回复: 注意看倒数第二行的错误提示,这个错误是由于>=两端的类型不同,所以不被支持。试试能否将>=两端调整为同一类型呢?

    
    
  • LSY
    2018-10-28
    使用for 语句输出1-100之间的偶数:
    num = 0
    For num in range (0,99):
        Num +=2
        Print(num)

    运行后会把0-99之间的数字都打印出来,请问错在哪里?
    展开

    作者回复: 问题在于没有正确理解 for...in...结构的循环过程,在上面代码中 num 在每次循环,会为num进行赋值,我们把代码改的再精简一些:
    num = 0
    for num in [10,20,30]:
        num += 2
        print(num)
    输出结果是12,22,32。num在for循环中第一次取得10,在第一遍循环之后输出12,注意,这时候num会在第二遍循环的开始,取得列表的第二个元素20,覆盖了已有的12,因此输出是22,正确理解这个过程,那么输出1-100之间的偶数就应该能够解决了

    
    
  • 花颜
    2018-10-23
    为什么没有匹配成功也会输出,不是if = true,才会走下面的print代码么,如果等于false,应该会跳出这个if块,走下一个for循环么,没懂

    作者回复: 要看好print()是在if else结构里面还是外面,可以自己敲一遍代码加强理解。

    
    
  • Gyan
    2018-10-03
    老师好,请问怎样可以快速多行的注释啊?

    作者回复: 不同的IDE有不同的快捷键,如PyCharm可以用鼠标选中要注释的多行,使用ctrl+/快捷键进行注释。再次使用ctrl+/可以取消注释

    
    
  • Geek_e3918d
    2018-09-20
    同样的代码,为什么会报错呢,求解
    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])

    C:\Users\Mtime\AppData\Local\Programs\Python\Python36\python3.exe E:/test/11111.py
      File "E:/test/11111.py", line 8
        for zd_num in range(len(zodiac_days)):
                                             ^
    SyntaxError: invalid syntax

    Process finished with exit code 1
    展开

    作者回复: 请检查一下for语句前面是否有空格
    括号、引号、逗号是否中文全角,都会引发语法错误

    
    
  • 刘先生ㄥO
    2018-09-12

    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)) # 元组嵌套
    (month, day) = (2, 28)
    zodiac_day = filter(lambda x: x<=(month, day), zodiac_days)
    print(list(zodiac_day)) # 这里加list和不加打印的结果不一样,是不是改变了结构。但是不是元组不可改变吗?
    zodiac_len = len(list(zodiac_day)) % 12
    print(zodiac_len)
    print(zodiac_name[zodiac_len])


    这个程序的打印元组请教一下:这里加list和不加打印的结果不一样,是不是改变了数据结构。但是元组的数据结构不是不可改变吗?
    展开

    作者回复: zodiac_day在这里不是元组结构,它是filter函数返回的对象,这个对象有一个特征叫做可迭代性,可迭代的filter对象有个特征是里面的内容只能读取一次,在这段代码中,通过list读取了zodiac_day的内容之后,再次读取里面的内容就是空的了,因此两次结果不一样

    
    
  • Ross
    2018-06-11
    请问 if zodiac_days[zd_num] 这里为什么要用中括号?

    作者回复: zodiac_days是一个元组,元组是序列的一种,因此元组可以使用序列的索引、切片、加、乘等功能。这里使用的中括号就是取元组某一个元素的索引功能。中括号里的整数对应着元组的下标

    
    
我们在线,来聊聊吧