我是一個初學者 python 用戶,我被一個時間計算器程式困住了,我試圖創建它作為在線認證的一部分。該程式將以 AM/PM 格式計算從初始時間和正確的作業日添加的時間。這部分我一直有問題,因為我不知道的原因,函式在找到新的作業日后重新啟動,從變數作業日分配整數“2”,然后中斷。
這是代碼片段:
day_names = [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday",
]
def weekday_calculator( weekday, day_count, new_hour, new_minute,): # this function calculates the right weekday for the new time
> print(f"starting weekday:{weekday}")
> weekday = weekday.lower()
> starting_day_index = day_names.index(weekday)
> print(f"This is the starting day of the week's index: {starting_day_index}")
> print(f"This is the day count {day_count}")
> weekday_calculate = starting_day_index day_count
> if weekday_calculate <= 6:
>> new_weekday = day_names[weekday_calculate] # to be fixed
>> print(f"This is the new weekday {new_weekday}")
>> result_printer(new_hour, new_minute, new_am_pm, day_count, new_weekday)
> elif weekday_calculate > 6:
>> print("let's adjust the weekday")
>> adjust_weekday(define_weekday)
weekday_calculator(weekday = "tuesday", daycount = 1) #this is only the data relevant to this snippet
這是預期的輸出:
Let's calculate the weekday
starting weekday:tuesday
This is the starting day of the week's index: 1
This is the day count 1
This is the new weekday Wednesday
(proceeds to the next function)
這就是一直在發生的事情
Let's calculate the weekday
starting weekday:tuesday
This is the starting day of the week's index: 1
This is the day count 1
This is the new weekday wednesday
tuesday
starting weekday:2
Traceback (most recent call last) line 52, in weekday_calculator
weekday = weekday.lower()
AttributeError: 'int' object has no attribute 'lower' # of course that is because you cannot change an integer to lower
有誰知道如何解決這個問題?我不知道作業日的值“2”從何而來,也不知道為什么函式會重復自身而不是在 if 陳述句末尾直接跳轉到下一個函式。我試圖更改函式的結構和變數名,以便程式不會混淆作業日和新作業日,但無濟于事。
正如您正確要求的那樣,我已經編輯了帖子并添加了其余代碼:
day_names = [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday",
]
timeday_am = ["PM", "AM"] * 100
timeday_pm = ["AM", "PM"] * 100
weekday = 0
def result_printer(new_hour, new_minute, new_am_pm, day_count, weekday):
new_time = [new_hour, new_minute]
for number in new_time:
if number < 10:
return f"0{number}"
if day_count != 0:
if day_count == 1:
day = "(next day)"
else:
day = f"({day_count} days later)"
print(f"{new_time[0]}:{new_time[1]} {new_am_pm}, {weekday} {day}")
def adjust_weekday(
define_weekday,
): # this is to adjust the weekday index if it is more than 6
adjusted_weekday = day_names[define_weekday % len(day_names)]
print((adjusted_weekday))
def weekday_calculator(
weekday, day_count, new_hour, new_minute, new_am_pm
): # this function calculates the right weekday for the new time
print(f"starting weekday:{weekday}")
weekday = weekday.lower()
starting_day_index = day_names.index(weekday)
print(f"This is the starting day of the week's index: {starting_day_index}")
print(f"This is the day count {day_count}")
weekday_calculate = starting_day_index day_count
if weekday_calculate <= 6:
new_weekday = day_names[weekday_calculate] # to be fixed
print(f"This is the new weekday {new_weekday}")
result_printer(new_hour, new_minute, new_am_pm, day_count, new_weekday)
elif weekday_calculate > 6:
print("let's adjust the weekday")
adjust_weekday(define_weekday)
def day_calculator(
new_hour, new_minute, new_am_pm, am_pm, weekday, day_count
): # this function calculates the right AM PM of the new hour, and the number of days between times (if applicable)
day_count = day_count
if new_am_pm == "AM":
new_am_pm = timeday_am[am_pm]
print(f"This is the new time of the day list {new_am_pm}")
day_new = timeday_am[:am_pm]
print(f"this is the new day {day_new}")
day_count = day_new.count(
"AM"
) # this is to count how many days have passed from the starting day
print(f"this is the day count {day_count}")
elif new_am_pm == "PM":
new_am_pm_day = timeday_pm[am_pm]
print(f"This is the new time of the day {new_am_pm}")
day_new = timeday_pm[:am_pm]
print(f"this is how it is calculated {day_new}")
day_count = day_new.count("AM")
print(f"this is the day count {day_count}")
if weekday is not None:
print(weekday)
print("Let's calculate the weekday")
weekday_calculator(weekday, day_count, new_hour, new_minute, new_am_pm)
result_printer(new_hour, new_minute, new_am_pm, day_count, weekday)
def time_calculator(init_time: str, add_time: str, weekday: str):
day_count = 0
new_am_pm = init_time.split(" ")[1]
init_hour = int(init_time.split(":")[0])
init_minute = init_time.split(":")[1]
init_minute = int(
init_minute.split(" ")[0]
) # this is to avoid to include AM/PM in the string #this results in problem when python cannot convert string to integer because of formatting ex 00:
add_hour = int(add_time.split(":")[0])
add_minute = int(add_time.split(":")[1])
print(
f"1. This is the hour to be added: {init_hour} and this is the minute: {init_minute}"
) # @ control string
new_minute = init_minute add_minute
new_hour = init_hour add_hour
if new_minute >= 60:
new_minute -= 60
new_hour = new_hour 1
# calculate am or pm
am_pm = (
new_hour // 12
) # this starts the process to calculate the right time of the day and day of the week, floor division rounds the number down
print(f"This is {am_pm} am pm coefficent") # @control string
print(type(am_pm))
# adapt new hour to hour format 0-12
if new_hour > 12:
new_hour = new_hour - (am_pm * 12)
print(
f"This is the new hour: {new_hour} and this is the new minute: {new_minute}"
) # @ control string
if am_pm < 1:
new_am_pm = new_am_pm
else:
day_calculator(new_hour, new_minute, new_am_pm, am_pm, weekday, day_count)
if weekday is not None:
weekday_calculator(new_hour, new_minute, new_am_pm, weekday, day_count)
result_printer(new_hour, new_minute, new_am_pm, day_count, weekday)
time_calculator("3:10 PM", "23:20", "tuesday")
uj5u.com熱心網友回復:
當我運行你的代碼洗掉 result_printer 和 adjust_weekday 呼叫時,因為我在你發送的代碼中沒有它,我的輸出是
starting weekday:tuesday
This is the starting day of the week's index: 1
This is the day count 1
This is the new weekday wednesday
我相信問題出在其他函式 result_printer 和 adjust_weekday,它們回傳的是索引而不是 str 值。
也許發送這兩個功能代碼來幫助我們找到問題
編輯:所以這是你的問題:在 time_calculator() 中,你呼叫 weekday_calculator(new_hour, new_minute, new_am_pm, weekday, day_count) 但是 weekday_calculator 是用引數定義的weekday, day_count, new_hour, new_minute, new_am_pm
,你不能使用引數,所以在其他順序中,你應該指定你的引數命名為
weekday_calculator(new_hour=new_hour, new_minute=new_minute, new_am_pm=new_am_pm, weekday=weekday, day_count=day_count)
或按與定義相同的順序使用引數:weekday_calculator(weekday, day_count, new_hour, new_minute, new_am_pm)
uj5u.com熱心網友回復:
你的問題在這里:starting weekday:2
應該是字串,而不是整數。
uj5u.com熱心網友回復:
問題出在你的time_calculator
功能上。在最后幾行中,您首先呼叫 day_calculator(new_hour, new_minute, new_am_pm, am_pm, weekday, day_count)
它,然后呼叫它weekday_calculator
(這很好)。但是,在接下來的兩行中,您還呼叫weekday_calculator
了完全錯誤的引數。
您的函式將引數定義為weekday, day_count, new_hour, new_minute, new_am_pm
.
但是看看對函式的呼叫,你傳遞了new_hour, new_minute, new_am_pm, weekday, day_count
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/537583.html
上一篇:如何創建包含函式的無序映射?