如何将用户输入的值放入数组?

时间:2015-04-20 18:43:42

标签: python python-2.7

我正在尝试将用户命名的值放入一个稍后要使用的数组中。但是,到目前为止,我的代码无限循环......这就是我得到的:

def dates():
    dates = []
    user_input = raw_input("Please put folder with format yy.mm.dd: ")
    while user_input != 'end':
        if user_input == '%y.%m.%d':
            dates.append(user_input)
        else:
            print "Please out folder in form yy.mm.dd or write 'end'"
    print dates    

新功能:

def date():
    dates = []
    user_input =raw_input("Please put folder with format yy.mm.dd: ")
    pattern = re.compile('\d{2}.\d{2}.\d{2}')
    if pattern.match(user_input):
        dates.append(user_input)
    elif user_input == 'end':
        print 'Dates:'
    else:
        print "Use yy.mm.dd format or write 'end'"

    return dates

2 个答案:

答案 0 :(得分:2)

您的代码中存在两个问题,第一个问题:

user_input = raw_input("Please put folder with format yy.mm.dd: ")

此输入仅评估一次,因此要么进入无限循环,要么只添加一个字符串列表。

此外,

user_input == '%y.%m.%d'

此比较检查字符串相等性,而不是模式匹配。您有两个选项,首先使用正则表达式检查输入字符串的有效性:

pattern = re.compile('\d{2}.\d{2}.\d{2}')
if pattern.match(user_input):
    pass # handle valid input
else:
    pass # handle invalid input

此选项有一个缺点,因为您可以通过00>12一个月,类似于大于31等的那一天。

对我来说,首选的方法是使用EAFP方法并尝试创建datetime.date对象。

year, month, day = user_input.split('.')
try:
    date = datetime.date(int(year), int(month), int(day))
except ValueError:
    pass # handle invalid input
else:
    pass # handle valid input

答案 1 :(得分:1)

这是因为您从未在<{1}}循环中请求用户输入 。因此,它会不断评估您的第一个while,并且您的用户永远不会有机会输入user_input并突破循环。在'end'循环中放置另一个raw_input来电,而不是while字符串,以便实际重新评估用户输入。这将确保如果格式正确,您的用户也将被提示进行其他输入。

另外,由于你有一个else函数,如果这是函数的结尾,你应该dates()你的结果,而不是return

最后,因为你的条件语句当前是唯一有效的匹配,你将拥有的是文字字符串。您需要使用正则表达式或实际模式匹配才能匹配有效输入。