【问题标题】:How to import re and formatting code如何导入重新和格式化代码
【发布时间】:2015-03-17 11:49:00
【问题描述】:

我正在尝试导入 re 并在我的原始代码中设置车牌格式,但是我有代码但不知道放在哪里。我希望这在我的编码中很清楚。

import re
    number_plate = re.match('\d{2}[A-Z]{2}\d{3}','12MNB36'):

上面的代码是我想输入到下面显示的实际代码中的内容。

over_limit = []
file=open("newfile.txt", "w")

while True:
    speed = float()
    distance = 10
    time =float(raw_input('enter time'))
    speed = distance/time
    number_plate = raw_input('enter number plate')
    print speed


if speed>31.2928:
    #70 mph converted into m/s
    over_limit.append(number_plate)
    print over_limit
    file.write(number_plate)


else:
    print 'ok'
file.close()

【问题讨论】:

  • 您的正则表达式中的字母和数字数量错误。它应该是2个数字,3个字母,2个数字。 number_plate = re.search('\d{2}[A-Z]{3}\d{2}','12MNB36')
  • 我的任务是按照上面所示的格式,2个字母,2个数字,3个字母。
  • 那么您提供了一个错误的车牌示例,因为它与您的正则表达式不匹配。

标签: python import


【解决方案1】:

我可能会这样写你想要做的事情:

import re

PLATE_PATTERN = r'\d{2}[A-Z]{2}\d{3}'

with open("newfile.txt", "w") as f:
    over_limit = []
    while True:
        distance = 10
        print
        time  = raw_input('Enter time: ')
        if time.lower() == 'x':
            print("Goodbye.")
            break
        speed = distance / float(time)
        print("Speed: %s" % speed)

        if speed>31.2928:
            #70 mph converted into m/s
            print('Over Limit!')
            while True:
                number_plate = raw_input('Enter number plate: ')
                if re.match(PLATE_PATTERN, number_plate):
                    over_limit.append(number_plate)
                    f.write(number_plate)
                    print("Plate Recorded.")
                    break
                else:
                    print("error: '%s' didn't match regex '%s'" % (number_plate, PLATE_PATTERN))

        else:
            print('Speed OK')

在行动:

进入时间:1 速度:10.0 速度还行 输入时间:0.2 速度:50.0 超限! 输入车牌号:ABC123 错误:“ABC123”与正则表达式“\d{2}[A-Z]{2}\d{3}”不匹配 输入车牌号:12AB345 板记录。 输入时间:x 再见。

有很多变化,比如使用 with 块来处理文件句柄和输出格式等小东西,但大部分变化归结为程序流程。

除了if/else 语句之外,代码还使用了有意的无限循环while True,当满足特定条件时,该循环将被“打破”(使用break)。这类似于其他语言中的do/while 构造。

这个想法是用户输入一个时间,你只关心你计算的速度是否超过了速度限制。

如果没有,你再问一次。

确实如此,只有这样你才关心车牌号。所以当你问它的时候。您强制用户输入有效的车牌——无效的车牌(正则表达式匹配失败的车牌)会显示错误,并且程序会指示用户重试。

一旦用户输入了匹配的车牌号,它就会被附加到over_limit 列表中(顺便说一句,您不需要对它做任何事情)并写入文件中。注意文件是以'w'模式打开的,而不是a模式,所以每次运行程序,输出文件都会“清空”。

要优雅地退出,当您被要求一段时间时,您可以输入“x”,程序会说“再见”并终止。

请注意,自从我开始写作以来,从您的 cmets 看来,您似乎需要更新 PLATE_PATTERN 表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 2020-04-09
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多