代码之家  ›  专栏  ›  技术社区  ›  Hiddenguy

while循环中python3.x和python2.x的区别

  •  0
  • Hiddenguy  · 技术社区  · 7 年前

    我有一段代码,是我几周前写的。最初我是为Python2.7编写的,它运行得非常好,但不久前我决定放弃它,转而使用Python3.7。有人能解释一下为什么会这样吗 while

    在Python2.7中,这段代码允许我在数据文件之间浏览,代码中的那些业余技巧允许我处理诸如60分钟后更改小时或24小时后更改日期之类的障碍。仍然不知道如何将其转换为python3。

    # Input variables
    h = "Arctic"
    u = 'Denver'
    p = 'Patagonia'
    
    Station = input('Enter a station name (Arctic = h, Denver = u, Patagonia = p): ')
    Date = input('Enter date time (yyyymmdd): ')
    Date_end = input('Enter end date time (yyyymmdd): ')
    Start_time_hours = int(input('Enter start time (hh): '))
    Start_time_minutes = int(input('Enter start time (mm): '))
    End_time_hours = int(input('Enter end time (hh): '))
    End_time_minutes = int(input('Enter end time (mm): '))
    Save_Print_SavPrin = input('Press s = Save, p = Plot: ')
    
    
    while Start_time_hours == Start_time_hours and Start_time_minutes == Start_time_minutes and Date == Date:
        Start_time_hours += (Start_time_minutes / 60)
        Start_time_minutes %= 60
        str(Start_time_minutes)
        str(Start_time_hours)
        str(End_time_minutes)
        str(End_time_hours)
        Start_time_hours_format = '{:02}'.format(Start_time_hours)
        Start_time_minutes_format = '{:02}'.format(Start_time_minutes)
        End_time_hours_format = '{:02}'.format(End_time_hours)
        End_time_minutes_format = '{:02}'.format(End_time_minutes)
        int(Start_time_minutes)
        Start_time_minutes += 5
        if Save_Print_SavPrin == "p":
            print("Showing figures...")
            print ("Succesful!")
            if Start_time_hours_format == End_time_hours_format and Start_time_minutes_format == End_time_minutes_format and Date == Date_end:
                print (Start_time_hours_format, Start_time_minutes_format, End_time_hours_format, End_time_minutes_format)
                break
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Jean-François Fabre    7 年前

    首先,你的循环条件是一个无限循环,因为你把变量和。。。他们自己。所以你可以用 while True:

    现在有问题的代码是:

    Start_time_hours += (Start_time_minutes / 60)
    

    在Python3中, / 60 执行浮点除法,即使在整数操作数之间也是如此。结果是现在 Start_time_hours 是一个浮点数,永远不能等于 End_time_hours ,这是一个整数( if Start_time_hours_format == End_time_hours_format 测试总是失败的,特别是因为您将两者都转换为字符串)。

    修正(两种版本都适用)是强制整数除法:

    Start_time_hours += (Start_time_minutes // 60)
    

    一边,做 str(something) 一个人站在一条线上是不会扭转这种局面的 something 某物 . 你可以删除所有这些语句,因为它们无论如何都是无用的。