【问题标题】:Given set of numbers in a string in pythonpython中给定字符串中的一组数字
【发布时间】:2021-12-06 08:50:40
【问题描述】:

我想检查字符串中是否存在一组数字

这是我的代码:

def check_no(string):
    string = string.lower()
    no = set(c)

    s = set()
    for i in string:
        if i in no:
            s.add(i)
        else:
            pass

    if len(s) == len(no):
        return("Valid")
    else:
        return("Not Valid")

c = input()
print(check_no(c))

如果字符串中存在给定的一组数字,则打印Valid,如果不存在,则打印Not valid

当输入为123 且字符串为I have 12 car and 3 bikes 时,程序运行良好,则输出有效

但是当我将输入作为254 和字符串作为i hav25555number 时,输出作为valid,但实际输出应该是Not valid,因为字符串中不存在4

任何人都可以帮助如何在提供的代码中解决它

【问题讨论】:

  • 您的代码基本上是获取字符串中的每个字符,并将它们一个接一个地添加到一组新字符中。你检查这两组是否有相同的基数,并确保你会一直得到 VALID 回报,似乎。
  • @HomayounHamedmoghadam-Rafati 不,它正在将 string 转换为小写。如果字符串包含一个not 以小写字母形式出现的大写字母,那么它将not 返回有效,因为该字符的小写版本不会添加到 s .
  • 谢谢@Tom,明白了。

标签: python set


【解决方案1】:

我想检查所有字符是否匹配然后使用all

def check_no(text, check):
    valid =  all(character in text for character in check)
    if valid:
        return("Valid")
    else:
        return("Not Valid")

check = '254'
text = 'i hav25555number'
print(check_no(text, check))

单行版本

def check_no(text, check):
    return 'Valid' if all(character in text for character in check) else 'Not Valid'

【讨论】:

  • 这里的所有函数是做什么的?
  • 根据我在答案中链接的文档,它确实“如果可迭代的所有元素都为真(或者如果可迭代为空),则返回 True”。在这种情况下,iterable 是一个生成器,它为check 中的每个字符提供TrueFalse 的序列(取决于该字符是否包含在text 中)。因此,如果所有检查都为真,所有检查都会返回True
  • 只是为了好玩:return f"{'Not '[all(character in text for character in check)*4:]}Valid"
【解决方案2】:

您的函数大部分是正确的,但可能是因为您(糟糕的)变量名称选择,stringc 变量在环境中混淆了。

解决方案是将参数显式添加到函数定义中(同时避免使用 stringc 之类的名称,因为它们可能是预定义的 Python 关键字):

teststring = "254"
testc = "i hav25555number"

def check_no(mystring, myc):
    string = mystring.lower()
    no = set(c)
    print("string is",string)
    s = set()
    for i in string:
        
        if str(i) in no:
#            print(i, " in ", no)
            s.add(i)
        else:
            pass
#        print("s is",s)
#        print("no is",no)
    if len(s) == len(no):
        return("Valid")
    else:
        return("Not Valid")

print(check_no(teststring,testc))

给予:

print(check_no(teststring,testc))
string is 254
Not Valid

如前所述,您可以使用all 使您的代码更优雅,尽管您的实现也没有任何问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2019-11-04
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多