Python(if/else)额外字符?

2024-09-29 17:21:38 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我正在做作业,但我似乎不知道如何在常规语句中添加“额外”字符

我想让这段代码说明lname只能由字母和" "或/和"-"符号组成,不能以" "开头。我怎样才能做到这一点?我甚至不知道该搜索或尝试什么。难道没有某种内置的“包含”功能吗?我快绝望了

def perenimi2():
    global lname
    lname = perenimi.get()

    if lname.isalpha():
            textVar.set("")
            nd2 = {"Perenimi": str(lname)}
            uusklient.update(nd2)
            post2()
            
    else:
        textVar.set ("Sisestage korrektne perekonnanimi!")

我的意思是,我怎样才能做出IF语句,它必须包含字母,也可能包含“-”或/和空格。我想使fname仅为字母和“-”或/和空格。(这适用于也不能以空格开头的名称字段)

如果以前有人问过这个问题,我很抱歉,但我还没有找到解决方案

----使用张贴答案后的代码----
通过发布的答案,我发现了一个新问题,它现在允许输入或条目为空,而不能为空

我把所有的东西都翻译成英语

import string


###FirstName

def firstname1():
    global fname
    allowed = " -"
    cantStart = " "
    fname = firstname.get()
    
    if (set(fname) <= set(allowed + string.ascii_letters) and not fname.startswith(cantStart)):
        textVar.set("")
        familyname2()
    
    elif fname == "":
        textVar.set("Insert correct name!")

        
    else:
        textVar.set("Insert correct name!")
        
###FamilyName
def familyname2():
    global lname
    lname = familyname2.get()
    allowed = " -"
    cantStart = " "
    empty = ""
    
    if (set(lname) <= set(allowed + string.ascii_letters) and not lname.startswith(cantStart)):
        textVar.set("")
        post2()
        
    elif lname == "":
        textVar.set("Insert correct family name!")

    else:
        textVar.set("Insert correct family name!")


firstname1()

Tags: namegetifdef字母globalfnameelse
1条回答
网友
1楼 · 发布于 2024-09-29 17:21:38
import string

ALLOWED = " -"
CANT_START = " "

if (set(lname) <= set(ALLOWED + string.ascii_letters) 
        and not lname.startswith(CANT_START)
        and lname):

Noelif分支(即从代码中删除它)


解释:

string.ascii_letters"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

set(lname)lname中所有字符的集合,e。G如果lname == "abba",那么set(lname)将是"ab"

两个集合之间的<=运算意味着“是的子集”,即如果左集合中的所有元素也存在于右集合中

lname仅适用于非空字符串(您也可以使用lname != "",但仅使用lname更适合于python)

if分支中的长表达式用括号括起来,仅用于将其自由拆分为更多行的可能性,,即不需要用连续符号(\结束每一个非完整行。否则,它必须采用如下形式:

if set(lname) <= set(ALLOWED + string.ascii_letters) \
       and not lname.startswith(CANT_START)          \
       and lname:

(或仅用一行很长的文字完整书写)

相关问题 更多 >

    热门问题