所以这就是我想要做的事情。我在计算机上的一个特殊目录中创建了很多文件夹来隐藏内容。我有4个级别的文件夹,每个文件夹的文件夹编号为1 - 4。
示例:
1>1>1>1
1>1>1>2
...
1>2>1>1
...
4>1>1>1
...
4>4>4>4
我写了一个python程序来询问一个引脚,然后打开与该引脚对应的文件目录。 [例如,#4322引脚将打开4> 3> 2> 2]。我遇到的唯一问题是我无法将输入限制为仅限数字1 - 4,当我输入超出此范围的数字时,Internet Explorer将被打开(UGH!IE)。
这里是代码......(Python 2.7.6)
pin=str(raw_input("What is your 4-digit pin number? "))
intpin=int(pin)
#==============##==============#
pin1=pin[0:1]
pin2=pin[1:2]
pin3=pin[2:3]
pin4=pin[3:4]
#==============##==============#
ipin1=int(pin1)
ipin2=int(pin2)
ipin3=int(pin3)
ipin4=int(pin4)
#==============##==============#
print("")
print pin1
print pin2
print("")
path=("D:/Documents/Personal/"+pin1+"/"+pin2+"/"+pin3+"/"+pin4)
import webbrowser as wb
wb.open(path)
#==============##==============#
print("Thank You!")
print("Your window has opened, now please close this one...")
答案 0 :(得分:1)
您可以测试输入以确保所有数字都是数字1-4:
bol = False
while bol == False:
pin=str(raw_input("What is your 4-digit pin number? "))
for digit in pin:
if int(digit) in [1,2,3,4]:
bol = True
else:
print "invalid pin"
bol = False
break
这个,添加到代码的开头,应该可行。你的代码肯定会更简洁,但这不是我纠正你的地方。
答案 1 :(得分:1)
你可以使用正则表达式。正则表达始终是一个好朋友。
import re
if not re.match("^([1-4])([1-4])([1-4])([1-4])$", pin):
print "Well that's not your pin, is it?"
import sys
sys.exit()
答案 2 :(得分:1)
首先,raw_input
总是输出一个字符串,无论你输入一个数字。您无需执行str(raw_input...
。证明如下:
>>> d = raw_input("What is your 4-digit number? ")
What is your 4-digit number? 5
>>> print type(d)
<type 'str'>
其次,接受的答案不能保护您免受超过4位数的输入。即使是12341234
的输入也会被接受,因为它无法检查传入的字符串的长度。
这里的一个解决方法是不检查字符串,而是检查整数等价物。这里你想要的范围只是[1111, 4444]
。此时,可以使用assert
,这样当您输入低于或高于该值的任何内容时,您可以引发断言错误。但是,有一个失败的原因是它可以传递类似1111.4
的东西,它仍然满足包含检查(尽管由于ValueError导致转换失败)。
考虑到上述情况,这里是您的代码的另一种选择。
def is_valid(strnum):
# Returns false when inputs like 1.2 are given.
try:
intnum = int(strnum)
except ValueError, e:
return False
# Check the integer equivalent if it's within the range.
if 1111 <= intnum <= 4444:
return True
else: return False
strnum = raw_input("What is your 4-digit PIN?\n>> ")
# print is_valid(strnum)
if is_valid:
# Your code here...
一些测试如下:
# On decimal/float-type inputs.
>>>
What is your 4-digit PIN?
>> 1.2
False
>>>
# On below or above the range wanted.
>>>
What is your 4-digit PIN?
>> 5555
False
>>>
What is your 4-digit PIN?
>> 1110
False
>>>
What is your 4-digit PIN?
>> 1234
True
>>>
希望这有帮助。