【问题标题】:Don't understand this timed while loop attribute error不明白这个定时while循环属性错误
【发布时间】:2020-04-09 06:59:40
【问题描述】:

所以我一直在尝试制作一个运行 10 分钟的 while 循环。但是在 while 循环中不断出错。上面写着'str' object has no attribute 'time'

我发现,如果我删除其中带有 now.strftime() 的行,代码就会运行,但我不知道为什么它在没有这些行的情况下运行或如何修复它。

我也尝试过使用datetime 模块而不是导入time 模块,但这也失败了。

import math
from datetime import datetime
import time


test_num = 1
largest_loop = 0
delay = 60 * 10
end_time = time.time() + delay


def even_number(value):
    if value == 2:
        return True


def divide_five(value):
    if value == 5:
        return True


def is_square(value):
    if math.sqrt(value).is_integer():
        return False


def multiple_of(value):
    if value == 2:
        return True


def is_happy():
    global check
    if check == 1:
        return True


while time.time() <= end_time:
    test_num += 1
    check = test_num
    now = datetime.now()
    loop_counter = 0
    record_loop = 6
    date = now.strftime("%m/%d/%Y")
    time = now.strftime("%H:%M:%S")
    if even_number(test_num) == True:
        if divide_five(test_num) == True:
            if is_square(test_num) == True:                
                for _ in range(record_loop + 4):
                    loop_counter += 1                            
                    if is_happy() == True:
                        if multiple_of(test_num) == True:
                            #print(test_num)
                            record_loop = loop_counter
                            break
                        else:
                            pass
                else:
                    pass
            else:
                pass
        else:
            pass        
    else:
        pass

【问题讨论】:

  • time = now.strftime("%H:%M:%S") 你正在用你的变量名隐藏time 模块

标签: python python-3.x datetime time while-loop


【解决方案1】:

我认为问题出在这里:

time = now.strftime("%H:%M:%S")

因此,您将时间转换为字符串变量。以不同的方式命名此变量!

除此之外,“全油门”跑10分钟也不少!考虑在 while 循环结束时引入“睡眠”时间(只是建议)

【讨论】:

    【解决方案2】:

    正如@CoryKramer 指出的那样,您命名了一个变量time,这也是您要导入的模块的名称。我真正所做的只是将time 变量更改为currTime 之类的东西。试试下面的代码(为我运行):

    import math
    from datetime import datetime
    import time
    
    
    test_num = 1
    largest_loop = 0
    delay = 60 * 10
    end_time = time.time() + delay
    
    
    def even_number(value):
        if value == 2:
            return True
    
    
    def divide_five(value):
        if value == 5:
            return True
    
    
    def is_square(value):
        if math.sqrt(value).is_integer():
            return False
    
    
    def multiple_of(value):
        if value == 2:
            return True
    
    
    def is_happy():
        global check
        if check == 1:
            return True
    
    
    while time.time() <= end_time:
        test_num += 1
        check = test_num
        now = datetime.now()
        loop_counter = 0
        record_loop = 6
        date = now.strftime("%m/%d/%Y")
        currTime = now.strftime("%H:%M:%S")
        if even_number(test_num) == True:
            if divide_five(test_num) == True:
                if is_square(test_num) == True:                
                    for _ in range(record_loop + 4):
                        loop_counter += 1                            
                        if is_happy() == True:
                            if multiple_of(test_num) == True:
                                #print(test_num)
                                record_loop = loop_counter
                                break
                            else:
                                pass
                    else:
                        pass
                else:
                    pass
            else:
                pass        
        else:
            pass
    

    此外,请考虑阅读以下内容:

    【讨论】:

      【解决方案3】:

      当你导入时间库时,不要在你的 while 循环时间内命名你的变量:

      time = now.strftime("%H:%M:%S")
      

      在您的 while 循环中,您想使用时间库的时间函数,但是一旦您运行 while 循环,它就会尝试在您在 while 循环中定义的字符串时间上使用 time()。

      【讨论】:

        猜你喜欢
        • 2018-08-16
        • 1970-01-01
        • 1970-01-01
        • 2022-12-10
        • 1970-01-01
        • 2016-10-27
        • 2015-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多