当且仅当输入的是字母数字(仅包含字母或数字)而不使用方法或导入时,使函数返回 True 的好方法是什么?
到目前为止,在类里面,我们只介绍了bools
、while
循环和if
语句,并且只允许使用我们的内容学习了。
这是我得到的
def alphanumeric(s):
i = 0
while i < len(s):
if s[i] == 1 or s[i] == 2 or s[i] == 3.....:
i = i + 1
return True
else:
return False
有没有不使用方法或导入的更简洁的方法? 我所拥有的不起作用,无论我输入什么都返回 False。
已解决。感谢所有提供帮助的人!
最佳答案
您误解了==
和or
的工作原理。您需要分别测试每个字符:
if s[i] == 1 or s[i] == 2 or s[i] == 3 ...:
或使用 in
测试:
if s[i] in (1, 2, 3, 4, ...):
除非你在这里测试字符,而不是整数,所以要么把你的字符变成一个整数,要么测试数字:
if int(s[i]) in (1, 2, 3, 4, ...):
或
if s[i] in '1234567890':
后者之所以有效,是因为字符串也是序列;测试一个字符是否在字符串 '1234567890'
中也是一种有效的成员资格测试。
因为字符串是序列,你也可以直接循环遍历它们:
for char in s:
if char in '1234567890':
无需使用 while
循环和计数器。
这仍然只测试数字;要同时测试字母,您可以执行以下两项操作之一:
使用
string
模块,它有ascii_letters
和digits
属性:import string for char in s: if char in string.ascii_letters + string.digits:
或者测试字符是否在两个已知字符之间:
if 'a' <= char <= 'z' or 'A' <= char <= 'Z' or '0' <= char <= '9':
这是可行的,因为字符串是可比较和可排序的;它们根据它们在 ASCII 码表中的位置变小或变大。
您的下一个问题是您返回 True
太早了;您为第一场比赛执行此操作,但您需要测试所有 字符。如果您没有发现任何遗漏,则只返回 True
:
for char in s:
if char not in string.ascii_letters + string.digits:
return False
return True
现在我们测试所有字符,为第一个不是字母数字的字符返回 False
,但只有当循环完成时,我们才返回 True
。
关于python - 如果是字母数字则返回 True(不允许方法或导入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16994328/