Python,检查字符串是否只包含1&0和7

时间:2016-06-01 20:57:02

标签: python loops

我试图编写一个函数来检查给定的字符串是否为二进制。我使用while循环逐个浏览字符串中的字符。如果所有这些都是0或1,它将返回True,如果没有 - 打破循环并返回False。 我刚刚编写了这一小部分代码,但它并没有运行。为什么呢?

def fnIsBin(string):
    count = 0
    while count < len(string):
        character = string[count]
        if character == '0' or character == '1':
            print (count, character[count], "OK")
            count = count+1
            continue
        else:
            print (count, character[count], "ERROR")
            return False
            break

编辑:
我也尝试过使用&#39; set&#39;避免循环迭代,但我不知道如何设置(字符串)&#34;工作。我得到错误,我不能将其视为列表。那么如何将元素与0&amp; 1?

def fnIsBin(string):
charactersList = set(string)
if len(charactersList) > 2:
    return False
else:
    if (charactersList[0] == '0' or charactersList[0] == '1') and (charactersList[1] == '0' or charactersList[1] == '1'): #there i made error, how to deal with it?
        return True
    else:
        return False

5 个答案:

答案 0 :(得分:3)

您的功能失败,因为您实际上从未返回True。这意味着如果字符串实际上是二进制的,那么在任何布尔检查中,你都会返回None,Python认为它是False

只需在功能的末尾添加return True

正如@Barmar在评论中提到的那样,您还会打印character[count]而不是string[count]的值,这会导致IndexError

检查字符串是否为二进制的更简单方法是:

test_string = '010101'
all_binary = all(c in '01' for c in test_string)

答案 1 :(得分:1)

您可以使用int对象并为其提供基础。如果传递的对象不包含二进制表示,它将失败。回想一下,二进制字符串是基数2。

def fnIsBin(string):
    try:
        binary_repr = int(string, 2)
    except ValueError as err
        print("error: {0}".format(err))
        return False
    return True

答案 2 :(得分:0)

这是你可以重写函数和维护类似结构的方法之一(循环遍历每个字符):

def fnIsBin(string):
    for character in string:
        if not character in '01':
            return False
    return True

您也可以使用正则表达式:

import re
def fnIsBin(string):
    return re.match(r'^[10]+$', '01') is not None

答案 3 :(得分:0)

您为OK0的每个字符打印1,即使后来的字符可能不存在。你需要等到循环结束才能知道它真的没问题。

def fnIsBin(string):
    for character in string:
        if character != '0' and character != '1':
            print (character, "ERROR")
            return False
    print "OK"
    return True

break之后不需要return False - 从函数返回会自动退出循环。

答案 4 :(得分:0)

有很多方法可以做到这一点:

集:

fnInBin(s):
    return set(s).issubset({'0', '1'}) and bool(s)

正则表达式:

fnInBin(s):
    return bool(re.fullmatch('[01]+', s))

整数转换:

fnIsBin(s):
    try:
       int(s, 2)
       return True
    except ValueError:
       return False

但是最后一个会从输入中删除空格。

fnIsBin('\n 1   ') == True