if语句中split()变量赋值的理解

时间:2021-01-26 05:27:51

标签: python python-3.x

到目前为止,只要我的第一个元素是单字母输入,我的代码就可以完美运行,但是当我向第一个元素输入多个字母时,值没有分配给变量

我只是想理解为什么当第一个元素是双字母或多个字母时代码没有赋值?

代码:

date=input("Enter the date: ")
if date.find('-')==True:
    dd,mm,yy=date.split('-')
elif date.find('/')==True:
    dd,mm,yy=date.split('/')
else:
    print('Incorrect Input',date)
print(dd,mm,yy)

输出案例 1:

Enter the date: 0-0-0
0 0 0

输出案例 2:

Enter the date: s/ss/ssss
s ss ssss

输出案例 3:

Enter the date: 10-10-10
Incorrect Input 10-10-10
Traceback (most recent call last):
  File "C:\**\**\**\**\**", line 8, in <module>
    print(dd,mm,yy)
NameError: name 'dd' is not defined

输出案例 4:

Enter the date: ss/sss/ss
Incorrect Input ss/sss/ss
Traceback (most recent call last):
  File "C:\**\**\**\**\**", line 8, in <module>
    print(dd,mm,yy)
NameError: name 'dd' is not defined

2 个答案:

答案 0 :(得分:1)

find() 不返回 TrueFalseit's an offset

<块引用>

返回在切片 s[start:end] 中找到子字符串 sub 的字符串中的最低索引。可选参数 startend 被解释为切片符号。如果未找到 sub,则返回 -1

因此,您的代码变为:

date=input("Enter the date: ")
if date.find('-') != -1:
    dd,mm,yy=date.split('-')
elif date.find('/') != -1:
    dd,mm,yy=date.split('/')
else:
    print('Incorrect Input',date)
print(dd,mm,yy)

答案 1 :(得分:1)

str.find() 返回在字符串中找到子字符串的索引,否则返回 -1。它不返回 TrueFalse

当第一个分隔符(-/)前有一个数字时,str.find() 返回 1。在 Python 中,1 也恰好等于 True

>>> True
True
>>> int(True)
1
>>> True == 1
True

这就是为什么在 -/ 之前有一个字符时它起作用的原因。

在任何其他情况下,如果未找到子字符串,find() 将返回 -1。或更大的数字,例如2 都不等于 True

>>> 2 == True
False
>>> -1 == True
False

通过测试 find() 是否返回 -1 来修复您的代码:

if date.find('-') == -1:
    dd, mm, yy = date.split('-')