Aug-24-2018, 05:10 PM
Hi all! First trouble: python works with version 3.7 while ptpython works with verion 3.6. How make them both work with 3.7 ?
Second trouble: I have a file made by a professionnal, still I have an error.
Second trouble: I have a file made by a professionnal, still I have an error.
#!/usr/bin/env python
# Script Name : prime_finder.py
# Author : Tony Hammack
# Created : 23 December 2015
# Last Modified : 4 February 2016
# Version : 1.5
# Classes imported
import logging
import os
import sys
from timer import Timer
# Classes created
class InvalidArgumentException(Exception): # Custom Exception
pass
# **** Constants ****
LOG_FILE = 'prime_finder.log' # Log file
MINUTES = 0.5 # user can define global duration in minutes that algorithm can use
# ***** Functions ***
# Utilities
def clear_screen():
"# Function to clear the screen"
if os.name == "posix": # Unix/Linux/MacOS/BSD/etc
return os.system('clear') # Clear the Screen
elif os.name in ("nt", "dos", "ce"): # DOS/Windows
return os.system('CLS')
def new_program():
# New Program
clear_screen()
load_program()
def reload_finder():
# reloads the program
response = input("Do you want to restart the prime finder? (yes or no): ")
if response == "yes":
new_program()
elif response == "no":
clear_screen()
sys.exit() # closes form
def load_program( t= Timer):
# Main Program
# First Logger
log_specifics_debug('START', 'Starting the Prime Finder.')
# initial variable input
try:
# User input
userString = input("Please input an integer: ")
userNumber = int(userString)
log_specifics_debug('USER INPUT', 'Input was successful.')
# Initiates Timer class object
t = Timer()
start_time = t.start()
# Prime Finder
prime_finder(userNumber, start_time)
log_specifics_debug('PRIME FINDER', 'prime_finder module completed.')
# Reload prime finder
response = input("Do you want to restart the prime finder? (yes or no): ")
if response == "yes":
log_specifics_debug('RELOADING', 'Prime Finder is reloading.')
new_program()
elif response == "no":
clear_screen()
log_specifics_debug('CLOSING', 'Prime Finder is closing.')
sys.exit()
except ValueError as err:
log_specifics_debug('USER INPUT', userString)
log_specifics_critical('USER INPUT', 'User entered a non-integer literal.')
# Restarts Prime Finder application
response = input("Do you want to restart the prime finder? (yes or no): ")
if response == "yes":
log_specifics_debug('RELOADING', 'Prime Finder is reloading.')
new_program()
elif response == "no":
clear_screen()
log_specifics_debug('CLOSING', 'Prime Finder is closing.')
sys.exit()
except KeyboardInterrupt as err:
log_specifics_debug('Closing', 'User has manually closed program.')
sys.exit()
except RuntimeError as err:
log_specifics_debug('RUNTIME ERROR', err)
# Restarts Prime Finder application
response = input("Do you want to restart the prime finder? (yes or no): ")
if response == "yes":
log_specifics_debug('RELOADING', 'Prime Finder is reloading.')
new_program()
elif response == "no":
log_specifics_debug('CLOSING', 'Prime Finder is closing.')
clear_screen()
sys.exit()
# Prime Finder Algorithm
def prime_finder(num, p_start): # prime factor algorithm
log_specifics_debug('START TIME', 'Start of algorithm: ' + str(p_start))
print("Here are your prime factors....")
mod = 2
while mod <= num:
test = compare_time(p_start)
if test:
while num % mod == 0:
num = num / mod
final_output(mod) # displays output
mod += 1 # increases modulus by one
else:
print("Time of algorithm exceeded predetermined limit of: " + str(MINUTES) + " minutes.")
break
log_endoftime(p_start)
def final_output(factors): # prints modulus out
log_specifics_debug('FACTORS', factors)
print(factors)
# Timer class objects
def start_time(): # Start Time
t = Timer()
return t.start()
def stop_time(): # Stop Time
t = Timer()
return t.stop()
def difference_time(p_start): # Difference between start and end times
stop = stop_time()
return stop - p_start
def compare_time(p_start): # Compares Time
seconds = MINUTES * 60 # User can specify seconds to limit program
while difference_time(p_start) < seconds:
return True
return False
# Loggers
def log_endoftime(p_start):
log_stop = stop_time()
log_specifics_debug('END TIME', 'End of algorithm: ' + str(log_stop))
log_specifics_debug('LENGTH TIME', 'Time of algorithm: ' + str(log_stop - p_start) + " seconds.")
def log_specifics_debug(section, message): # Logs debug information with section/message
log = logging.getLogger(section)
log.debug(message)
def log_specifics_critical(section, message): # Logs critical information with section/message
log = logging.getLogger(section)
log.critical(message)
def log_specifics_info(section, message): # Logs critical information with section/message
log = logging.getLogger(section)
log.info(message)
def purge_log():
with open(LOG_FILE, 'w') as file:
file.truncate()
# *****Ends Functions****
if __name__ == "__main__":
# set up logging to file
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
datefmt='%d-%m-%y %H:%M', # Date Format
filename=LOG_FILE, # Name of log
filemode='a') # Appends log
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# set a format which is simpler for console use
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)
# Starting program#
try:
if len(sys.argv) > 1: # Checks to see if sys.argv has input
argv = str(sys.argv[1])
# purges logs
if argv == '-p':
purge_log()
new_program()
elif argv == '--purge':
purge_log()
new_program()
else:
# Raising Custom exemption
raise InvalidArgumentException("User entered " + argv + " as invalid argument.")
else:
new_program()
except InvalidArgumentException as err:
log_specifics_debug('INVALID ARGV', err)
sys.exit()
# **** End ProgramNow the error:Error:Please input an integer: 145
Traceback (most recent call last):
File "big.py", line 225, in <module>
new_program()
File "big.py", line 42, in new_program
load_program()
File "big.py", line 69, in load_program
t = Timer()
TypeError: Timer takes at least 2 arguments

