首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对if语句中split()变量分配的理解

对if语句中split()变量分配的理解
EN

Stack Overflow用户
提问于 2021-01-26 05:27:51
回答 2查看 44关注 0票数 0

到目前为止,只要我的第一个元素是单字母输入,但是当我向第一个元素输入多个字母时,值就不会分配给一个变量,我的代码就能很好地工作。

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

代码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
Enter the date: 0-0-0
0 0 0

产出案例2:

代码语言:javascript
复制
Enter the date: s/ss/ssss
s ss ssss

产出案例3:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-26 05:39:33

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

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

代码语言:javascript
复制
>>> True
True
>>> int(True)
1
>>> True == 1
True

这就是为什么在-/之前只有一个字符才能工作的原因。

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

代码语言:javascript
复制
>>> 2 == True
False
>>> -1 == True
False

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

代码语言:javascript
复制
if date.find('-') == -1:
    dd, mm, yy = date.split('-')
票数 1
EN

Stack Overflow用户

发布于 2021-01-26 05:34:01

find()不返回TrueFalse这是一种抵消

返回字符串中的最低索引,其中在片s[start:end]中找到子字符串子。可选参数开始和结束被解释为片表示法。如果找不到sub,则返回-1

因此,您的代码变成:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65896303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档