我试图创建一个返回' true'如果输入的字符串中没有数字并且“假”'如果它中有任何数字
前:
'俄亥俄州' = true,' agent 007' = false
到目前为止,我已经尝试了
numbers = '0123456789'
Lowercase = 'abcdefghijklmnopqrstuvwxyz'
Uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def alphabet_only(a_string):
if a_string[:] not in numbers:
print('true')
else:
print('false')
问题是我无法弄清楚如何在字符串中单独识别单个数字字符以将其标记为false。
到目前为止它将返回
6 =假(好)
54 =真(坏)
pie = true(好)
pie18 = true(不好)
答案 0 :(得分:8)
使用标准库中的isalpha()
>>> test='test1'
>>> test.isalpha()
>>> False
答案 1 :(得分:3)
您是否考虑过使用正则表达式?
import re
def has_no_numbers(string):
return re.search('[0-9]', string) is None
答案 2 :(得分:3)
为了测试字符串是否包含数字,您有各种选项
set(string.digits).intersection(st)) < 9
len(st.translate(None, string.digits)) < len(st)
但是上述所有内容都是一种矫枉过正,因为你只需要确保其中一个字符是一个数字。哪个数字或出现次数无关紧要。在这种情况下使用str.isdigit检查并使用any
短路布尔评估应该是正确的方法。
>>> def has_numbers(st):
return any(e.isdigit() for e in st)
>>> has_numbers('agent 007')
True
>>> has_numbers('agent')
False
答案 3 :(得分:1)
使用set-intersection:
digits = set("0123456789")
def alphabet_only(a_string):
if set(a_string) & digits:
print ("false")
else:
print ("true")
答案 4 :(得分:0)
我认为你可以这样做:
import string
def alphabet_only(a_string):
if all(v not in string.digits for v in a_string):
print('true')
else:
print('false')
alphabet_only("6") # false
alphabet_only("54") # false
alphabet_only("pie") # true
alphabet_only("pie18") # false
alphabet_only("Ohio") # true
alphabet_only("agent 007") # false
答案 5 :(得分:0)
实际上比以前提出的方法更简单:
如果你这样做:
list(string123)
你会得到这样的东西
['s','t','r','i','n','g','1','2','3']
现在您需要做的就是设置一个简单的for循环来检查每个条目(未测试):
some_list = list(string123)
for i in range(len(some_list)):
if some_list[i] == 1 or some_list[i] == 2 or ..... or some_list[i] == 9:
print 'False'
else:
print 'True'
或另一个用户指出,if条件可以更改为以下内容:
0 <= some_list[i] <= 9:
从而使代码更紧凑。
以下是代码的漂亮版本:
for c in 'string123':
0 <= c <= 9:
print 'False'
else:
print 'True'