【问题标题】:Difference between Python 3.x and Python 2.x in while loopPython 3.x 和 Python 2.x 在 while 循环中的区别
【发布时间】:2019-03-06 22:26:08
【问题描述】:

我有这段代码,它是我几周前写的。最初我是为 Python 2.7 编写的,它工作得很好,但我不久前决定放弃它,转向 Python 3.7。谁能解释一下为什么这个while 循环是无限的并且不想满足这些条件?

在 Python 2.7 中,此代码允许我在我的数据文件之间浏览,而我代码中的那些业余技巧允许我处理诸如在 60 分钟后更改小时或在 24 小时后更改日期等问题。仍然不知道如何将其转换为 Python 3。

# 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

【问题讨论】:

  • Start_time_hours += (Start_time_minutes / 60) 应重写为 Start_time_hours += (Start_time_minutes // 60) 以跟上整数除法。
  • str(Start_time_minutes) 单独没有任何用处。 int(Start_time_minutes) 也没有
  • while Start_time_hours == Start_time_hours and Start_time_minutes == Start_time_minutes and Date == Date: 始终为真。您正在将变量与自己进行比较....
  • 问题可能是这里的浮点除法Start_time_hours += (Start_time_minutes / 60) 它将表示更改为字符串,并且从不调用中断。但是您的代码需要大量简化。
  • @Jean-FrançoisFabre 是的,我知道,但老实说,这是我唯一能想到的,也许你有更好的想法来改变这种情况,我会很高兴 :)

标签: python-3.x python-2.7 while-loop


【解决方案1】:

首先,您的循环条件是一个无限循环,因为您将变量与...本身进行比较。所以你可以替换为while True:(对两个python版本都有效)

现在有问题的代码是这样的:

Start_time_hours += (Start_time_minutes / 60)

在 python 3 中,/ 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 转换为字符串,除非您将其分配回something。您可以删除所有这些语句,因为它们无论如何都没用。

【讨论】:

    猜你喜欢
    • 2013-10-02
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多