作业,Python 3:从函数内部更改变量类型

时间:2018-07-23 05:00:25

标签: python python-3.x

对于分配的一部分,我需要将一个函数的变量作为字符串返回。然后,我需要将这些变量放入另一个函数中,最后将那些相同的变量作为整数返回。我希望这不太模糊。看起来似乎很容易就能自己找到,但是搜索已经花了大约一个小时。

startHourstartMinute是我要转换的变量。

以下是相关功能:

hoursList = []
minutesList = []
listSize = 0

def createList(listSize): #WORKING
    while listSize < 24:
        hoursList.append(listSize)
        listSize += 1
    while listSize < 84:
        minutesList.append(listSize - 24)
        listSize += 1

createList(listSize)

def collectUserInputTime(): #WORKING
    startHour, startMinute = input("Enter the time the call starts in 24-hour rotation:\n").split(":")
    return startHour, startMinute

def validateUserInputTime(startHour, startMinute): #NEED TO CHANGE STRING TO INT
    if int(startHour) in hoursList and int(startMinute) in minutesList:
        #print("PASS")
        return True, int(startHour), int(startMinute)
    else:
        print("FAIL")
        return False

startHour, startMinute = collectUserInputTime()
validateUserInputTime(startHour, startMinute)

我也尝试过:

return startHours = int(startHour), startMinute = int(startMinute)

我应该如何进行?谢谢。

3 个答案:

答案 0 :(得分:1)

您的代码正确地从validateUserInputTime返回整数值:

return True, int(startHour), int(startMinute)

但是当您调用函数时,您将忽略这些返回值:

validateUserInputTime(startHour, startMinute)

...所以它们是正确的并不重要;你对他们什么都没做。

如果您随后尝试使用print(type(startHour)),它仍将是str,因为它仍然是一个始终具有相同值的名称。

如果要将这些返回值分配给变量,则需要一个赋值语句:

success, startHour, startMinute = validateUserInputTime(startHour, startMinute)

现在,print(type(startHour))将显示int


但是,这是一个非常奇怪的函数接口。如果成功,则返回True加两个值;否则返回0。如果失败,则返回False,外加其他任何内容。因此,对于无效时间,该分配将引发TypeError: 'bool' object is not iterable

即使在失败的情况下,您也可以通过返回三个值来解决此问题:

return False, int(startHour), int(startMinute)

或者,也许更简单一些,只需使用一个return

success = int(startHour) in hoursList and int(startMinute) in minutesList
if not success:
    print("FAIL")
return success, int(startHour), int(startMinute)

答案 1 :(得分:0)

我自己不能尝试,因为不清楚什么分钟列表和小时列表,所以我不知道该功能有什么问题,但是在第二部分中您说了

return startHours = int(startHour), startMinute = int(startMinute)

您未输入double等于,这将返回None,也将其返回为布尔值,

return startHours == int(startHour), startMinute == int(startMinute)

编辑:据我所知,唯一的问题是您必须打印PASS或打印validateUserInputTime

答案 2 :(得分:0)

它正在转换,只是您无法确定函数validateUserInputTime()正在以整数格式返回值,只是您没有使用print语句显示它

使用此代码:

hoursList = []
minutesList = []
listSize = 0

def createList(listSize): #WORKING
    while listSize < 24:
        hoursList.append(listSize)
        listSize += 1
    while listSize < 84:
        minutesList.append(listSize - 24)
        listSize += 1

createList(listSize)

def collectUserInputTime(): #WORKING
    startHour, startMinute = input("Enter the time the call starts in 24-hour rotation:\n").split(":")
    return startHour, startMinute

def validateUserInputTime(startHour, startMinute):
    if int(startHour) in hoursList and int(startMinute) in minutesList:
        #print("PASS")
        return True, int(startHour), int(startMinute)
    else:
        print("FAIL")
        return False

startHour, startMinute = collectUserInputTime()
print(validateUserInputTime(startHour, startMinute))