您好,这是我的代码:
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()
我试图让raw_input条件接受我放了13(因为它检测到输入在消息中有1或3)但我只是不能(请,我知道我可以在列表中创建一个范围,然后它接受我将每个数字分开,但它是我正在处理的另一个程序的代码的一部分,用户可以在其中输入他们想要的单词,如只要输入这些数字,但它就不会区分1或11。希望你能帮忙:)。
答案 0 :(得分:1)
if '12' in n or '13' in n:
print 'OK'
else:
print 'wrong'
如果在允许的集合中有更多元素,最好使用any()
进行理解:
if any(str(x) in n for x in range(1, 14)):
print 'found number from range 1-13 in this string'
答案 1 :(得分:0)
你有2个错误,首先是raw_input返回字符串,你需要把它变成一个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"
答案 2 :(得分:0)
由于OP显然想要从raw_input
中获取数字,我认为如果使用in
作为条件检查,则存在逻辑问题,例如,您想要“blah blah 9 blah”来检查9是在1-13之内,但是使用in
将使这个“blah blah 999 blah”在1到13之间传递 9 的条件,因为if "9" in n
已经返回{{ 1}}。我认为这不是OP想要的结果。
所以,我建议使用True
从re
获取第一个号码并进行检查。像这样:
raw_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"