在python中编写字符串比较函数

时间:2015-12-29 10:32:03

标签: python python-2.7

我试着编写一个获得2个参数的函数(实际上是2个字符串)并比较它们(忽略大小写的差异)。例如:

$nmbr="55113741659856";
preg_replace("/^(\d{5})(\d{4})/","$1<b>$2</b>",$nmbr);

嗯,我尝试了一些东西,但它似乎非常愚蠢和糟糕的设计功能,无论如何都无效。我想知道。我相信我需要使用一些内置的cmr_func('House', 'HouSe') true cmr_func('Chair123', 'CHAIr123') true cmr_func('Mandy123', 'Mandy1234') False. 函数,但我不确定它们如何帮助我。

我考虑过使用str函数和一些循环。但我不知道应该在什么样的对象上应用循环。

in

欢迎任何提示或想法。谢谢:))

4 个答案:

答案 0 :(得分:5)

您可以将两个字符串转换为小写字母并比较这些结果:

    <?php
/**
 * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
 */

/* @var $installer \Magento\Setup\Module\SetupModule */

namespace Magentostudy\News\Setup;

use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;

$installer = $this;
$installer->startSetup();

/**
 * Creating table magentostudy_news
 */
$table = $installer->getConnection()->newTable(
    $installer->getTable('magentostudy_news')
)->addColumn(
    'news_id',
    \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
    null,
    ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
    'Entity Id'
)->addColumn(
    'title',
    \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
    255,
    ['nullable' => true],
    'News Title'
)->addColumn(
    'author',
    \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
    255,
    ['nullable' => true,'default' => null],
    'Author'
)->addColumn(
    'content',
    \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
    '2M',
    ['nullable' => true,'default' => null],
    'Content'
)->addColumn(
    'image',
    \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
    null,
    ['nullable' => true,'default' => null],
    'News image media path'
)->addColumn(
    'created_at',
    \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
    null,
    ['nullable' => false],
    'Created At'
)->addColumn(
    'published_at',
    \Magento\Framework\DB\Ddl\Table::TYPE_DATE,
    null,
    ['nullable' => true,'default' => null],
    'World publish date'
)->addIndex(
    $installer->getIdxName(
        'magentostudy_news',
        ['published_at'],
        \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_INDEX
    ),
    ['published_at'],
    ['type' => \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_INDEX]
)->setComment(
    'News item'
);
$installer->getConnection()->createTable($table);
$installer->endSetup();

这背后的想法是正常化。基本上,您希望获取任何输入字符串,并将其规范化,使得所有其他被视为相等的字符串生成相同的规范化字符串。然后,您只需比较规范化的字符串是否相等。

您可能考虑的其他操作是剥离空格(使用def str_comp (a, b): return a.lower() == b.lower() ),甚至更复杂的操作,例如将变音符号转换为双字母组合(例如str.strip()ä)。

您的解决方案的问题在于您似乎假设迭代字符串将允许您单独修改字符。但字符串是不可变的,因此您无法在不创建新字符串的情况下修改现有字符串。因此,当您使用ae迭代字符串时,每个字符都会获得许多单独的独立字符串,这些字符串与原始字符串for i in a无关。因此,修改a不会影响i

同样,只调用str.lower()也不会修改字符串(因为它是不可变的),所以相反,函数将返回一个新字符串,所有字母都转换为小写字母。

最后,您不应该返回字符串“True”或“False”。 Python有布尔常量aTrue,应该使用它。如果您使用它们,则无需执行以下操作:

False

由于if condition: return True else: return False 已被解释为布尔值,因此您可以直接返回条件以获得相同的结果:

condition

答案 1 :(得分:3)

首先,您不需要迭代String以使所有字符小写。 你可以:

a.lower()
b.lower()

或者你可以一起完成:

def str_comp(a,b):
    return a.lower() == b.lower()

不要忘记你也会返回一个布尔值的True或False,而不是返回一个String(在这种情况下是字符串“True”或“False”)

如果要返回String,则函数会有所不同:

def str_comp(a,b):
    if a.lower() == b.lower()
        return "True"
    return "False"

答案 2 :(得分:3)

函数str.lower()实际上以稍微不同的方式工作:

  1. 这不是就地修改。致电a.lower()会返回a的副本,其中只有小写字母,并且不会更改a本身。
  2. str.lower()可以在整个字符串上调用,而不仅仅是字符,因此for i in a循环不是必需的。
  3. 因此,您可以简化以下功能:

    def str_comp(a, b):
        if a.lower() == b.lower():
            print 'true'
        else:
            print 'false'
    

答案 3 :(得分:1)

def are_strings_equal(string_1, string_2):
    return string_1.lower() == string_2.lower()