我的目標是免除用戶在名字、中間名和姓氏中輸入的數字和字母數字。但是,如果我嘗試在任何名稱中輸入諸如 'ay123' 之類的輸入,它會將其作為字母字符,并且代碼將繼續操作,這并不意味著。我試過 d.isalpha(), isnumeric(), isalnum() 但無濟于事
import string
print('Welcome to the result checker, for SENIOR SECONDARY SCHOOLS ONLY \n')
alph= string.ascii_letters
print(nums)
def alpha(aa):
found= False
for i in alph:
if aa.find(i) > -1:
found= True
return found
while True:
a = str(input('Enter student First Name: ')).upper()
b= str(input('Enter student middle name: ')).upper()
c= str(input('Enter student Last name: ')).upper()
d= a ' ' b ' ' c
if alpha(d):
print('Welcome')
break
else:
print('Invalid entry, input alphabetic characters only!')
uj5u.com熱心網友回復:
如果在答案中找到任何字母,您的“alpha”函式將回傳 True。它基本上是說“對于字母表中的每個字母,如果在我的字串中找到那個字母,我們就有一個贏家。” 那根本不是你想要的。你想要的基本上是相反的。“對于我的字串中的每個字母,如果在字母表中找不到,則拒絕它。” 一發現被放逐者就可以回傳;您不必檢查字串的其余部分。另請注意,您必須允許有空格,因為您專門在姓名中添加了空格。
alph= string.ascii_letters ' '
def alpha(aa):
for i in aa:
if alph.find(i) < 0:
return False
return True
這也可以寫成:
def alpha(aa):
return all(alph.find(i) >= 0 for i in aa)
uj5u.com熱心網友回復:
該方法isalpha()就像你只需把你的問題,你想要做什么,但是當字串包含空格回傳False。您不需要匯入任何庫或創建自己的函式,只需isalpha()在每個字串上單獨使用函式即可。我還對您的代碼進行了一些小修正(例如print(nums))
print('Welcome to the result checker, for SENIOR SECONDARY SCHOOLS ONLY \n')
while True:
a = input('Enter student First Name: ').upper()
b = input('Enter student middle name: ').upper()
c = input('Enter student Last name: ').upper()
full_name = [a, b, c]
# map function apply isalpha() method on every item of the list
check = list(map(str.isalpha, full_name))
if False not in check:
d = ' '.join(full_name)
print(f'Welcome {d}')
break
else:
print('Invalid entry, input alphabetic characters only!')
這是一種優雅且非常 Pythonic 的方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/351970.html
