简体   繁体   中英

Don't understand this timed while loop attribute error

So I have been trying to make a while loop that will run for 10 minutes. But is keeps erroring out on the line with the while loop. It says 'str' object has no attribute 'time' .

I have discovered that if i remove the lines with now.strftime() in them that the code runs but I don't know why it runs without those lines or how to fix it.

I did also try to do something using the datetime module instead of importing the time module but this also fails.

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

dont name your variable in your while loop time when you import the time library:

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

in your while loop you want to use the time function of the time library but as soon as you run the while loop once it will try to use time() on the string time you defined in the while loop.

As @CoryKramer pointed out, you named a variable time , which is also the name of the module you are importing. All I really did was change the time variable to something like currTime . Try the code below (runs for me):

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

Additionally, consider reading up on:

I think the problem is here:

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

Thus, you converted time into a string variable. Name this variable in a different way!

Apart from this, running for 10 minutes at "full throttle" is a lot! Consider to introduce a "sleep" time at the end of the while loop (just suggesting)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM