Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使程序区分原始输入中的1-13_Python - Fatal编程技术网

Python 如何使程序区分原始输入中的1-13

Python 如何使程序区分原始输入中的1-13,python,Python,你好,这是我的代码: def function(): n1=1 n2=2 n3=3 n4=4 n5=5 n6=6 n7=7 n8=8 n9=9 n10=10 n11=11 n12=12 n13=13 n = raw_input("Number (with optional text): ") if n1 or n2 or n3 or n4 or n5 or n6 or n7 o

你好,这是我的代码:

def function():
    n1=1
    n2=2
    n3=3
    n4=4
    n5=5
    n6=6
    n7=7
    n8=8
    n9=9
    n10=10
    n11=11
    n12=12
    n13=13
    n = raw_input("Number (with optional text): ")
    if n1 or n2 or n3 or n4 or n5 or n6 or n7 or n8 or n9 in n:
        print "Not what I want"
    elif n12 or n13 in n:
        print "Dis I want"

function()
我试图使原始输入条件接受我在消息中输入13(因为它检测到输入有1或3),但我就是不能(请注意,我知道我可以在列表中设置一个范围,然后它接受我分别放置每个数字,但这是我正在开发的另一个程序的代码的一部分,在该程序中,用户可以放置他们想要的单词,只要输入这些数字,但不区分1或11等)。希望您能提供帮助:)

如果允许的集合中有更多的元素,最好使用
any()
,并加以理解:

if any(str(x) in n for x in range(1, 14)):
    print 'found number from range 1-13 in this string'

您有两个错误,首先,原始输入返回字符串,您需要将其设置为int。同样,正如@karthikr指出的,如果有一点错误,您的逻辑也会出错

n = raw_input("Number (with optional text): ")
k = int(n)  
if k in [n1, n2, n3]:
    print "Not what I want"
elif k in [n12, n13]:
    print "Dis I want"

由于OP显然想从
原始输入中获取数字,我认为如果在
中使用
作为条件检查存在逻辑问题,例如,您希望“blah blah 9 blah”检查9是否在1-13之间,但在
中使用
将使这成为“blah blah 999 blah”如果n
中的“9”已返回
True
,则在1-13内将9的条件传递为
。我不认为这是OP想要的结果

因此,我建议使用
re
raw\u input
中取出第一个数字并进行检查。大概是这样的:

import re


def check_number_ok():
    n1, n2, n3, ... = 1, 2, 3, ... # you can assign n1 to n13 like this too
    n = raw_input("Number (with optional text): ")
    check_number = re.compile('\d+')
    check_result = check_number.search(n)
    if check_result is not None:
        first_number = int(check_result.group())
        if first_number == n1:
            # do something here
        elif first_number == n2:
            # do another thing
        # ... check if any others match
        else:
            print "Not what I want"
            return
            # do exit thing here so below code will not run
        # if code runs here which means it passes the check
        print "Dis I want"
    else:
        print "Please at least enter something with a number"
用法:

check_number_ok()
Number (with optional text): hello 2 world
Dis I want

check_number_ok()
Number (with optional text): the cat is out 111
Not what I want

+1.但作为一个简要说明:在python3.x中,
range(1337)
实际上甚至比
set(range(1337))
更好,因为它有效地执行了
0实际上两个set python3 range在这里都没有什么意义,因为OP在输入中搜索,而不是相反。我刚刚意识到:)事实是我需要输入一个字符串,因为我希望用户说例如:blabla13bla;检测13,而不是1或3。谢谢你的时间我认为这里有一个合乎逻辑的问题,从你在其他答案中回答的评论来看,很明显你希望这个“废话9废话”检查9在1-13之内,但是在
中使用
in将使这个“废话999废话”在1-13之内通过9、99和999的条件,因为
如果n中的“9”已经返回True。
check_number_ok()
Number (with optional text): hello 2 world
Dis I want

check_number_ok()
Number (with optional text): the cat is out 111
Not what I want