因此,我收到了一个输入6位数字的任务,我想在列表中进行长度验证,因为我已经完成了数字验证。出于某种原因,即使我输入了六个数字,它也会打印出来("只有六位数!请再试一次"(。不管怎样,这是我的代码(请原谅我刚开始学习python以来的代码构造(
while True:
numbers = input("Enter 6 digits: ")
if numbers.isalpha():
print("Invalid Input!", numbers ," is not a number!")
else:
NumberList = numbers.split()
if len(NumberList) == 6:
print("user list is ", NumberList)
break
else:
print ("6 digits only! Please try again")
split
函数在空白处进行拆分。
因此,您的字符串不会被拆分为列表(您只获得一个包含一个元素的列表,即您的字符串(。
print("123456".split())
['123456']
在这种情况下,要拆分字符串,必须使用:NumberList = list(numbers)
。
list("123456")
['1', '2', '3', '4', '5', '6']
输入肯定会给您一个字符串,因此您可以使用split函数,但默认情况下需要空格。
所以splitting this string
会产生['splitting,'this','string']
,但类似123456
的东西会产生['123456']
,所以长度总是一。
解决这个问题的方法是将字符串转换为列表:
更换
NumberList = numbers.split()
带有
NumberList = list(numbers)
这应该会产生['1','2','3','4','5','6']
,因此应该会给您一个合适的长度。
不指定参数的string.split()
方法将通过在任何空白处拆分原始字符串来创建子字符串列表。如果您的输入是,比如123456
,那么numbers.split()
将产生["123456"]
,因为输入字符串没有任何空格。在这种情况下,len(NumberList)
是1,这就是它未通过验证的原因。
您可以直接检查len(numbers) == 6
。
如果你想把"123456"
变成["1", "2", "3", "4", "5", "6"]
(因为这似乎是你想要打印的(,你可以使用list(numbers)
while True:
numbers = input("Enter 6 digits: ")
if numbers.isalpha():
print("Invalid Input!", numbers ," is not a number!")
else:
NumberList = len(numbers)
if NumberList == 6:
print("user list is", NumberList)
break
else:
print ("6 digits only! Please try again")
我假设您的输入类似于"123456";,首先,只有当字符串的所有元素都是字母时,您的检查str.isalpha()
才会返回true,这意味着";123asd";会被认为是False,因此对您的程序有效,这是一个错误,其次str.split()
只会根据分隔符字符来分隔字符串,默认值是空格,如果您的行是";123456";,split的结果将只是一个包含完整字符串的元素的列表,因为该行中没有空格。
while True:
numbers = input("Enter 6 digits: ")
if sum([n.isalpha() for n in numbers]):
print("Invalid Input!", numbers ," is not a number!")
else:
NumberList = list(numbers)
if len(NumberList) == 6:
print("user list is ", NumberList)
break
else:
print("6 digits only! Please try again")
此外,不需要将字符串拆分为列表,如果您只需要检查其长度,则可以使用len(numbers)
while True:
num = input("Enter a Number: ")
try:
numbers = [int(i) for i in num]
if len(numbers) == 6:
print('valid')
numbers = numbers[:5]
print(numbers)
else:
print('invalid')
except ValueError:
print('only numbers')
如果只需要数字,则数字验证不正确。我试着先输入数字,然后输入字母,然后我就通过了