Python 为什么顺序if语句仅在满足最后一个条件时才起作用?
对于一个练习,我必须根据输入数字是否有某些整数作为因子来附加一个字符串。下面的代码似乎只有在我的输入有7作为因子时才起作用,所以对于7(expected=“Plong”)、21(expected=“PlingPlong”)是ok的。也不适用于35(预期为=“PangPlong”)Python 为什么顺序if语句仅在满足最后一个条件时才起作用?,python,numbers,Python,Numbers,对于一个练习,我必须根据输入数字是否有某些整数作为因子来附加一个字符串。下面的代码似乎只有在我的输入有7作为因子时才起作用,所以对于7(expected=“Plong”)、21(expected=“PlingPlong”)是ok的。也不适用于35(预期为=“PangPlong”) 这里有两个问题 首先,在每个if中,您都会覆盖声音,而不是附加到它,因此您会错误地处理带有多个相关因素的数字。 其次,else仅与最后一个if相关,因此如果数字不能被7整除,您将使用数字的字符串表示形式覆盖声音。解决此
这里有两个问题 首先,在每个
if
中,您都会覆盖声音,而不是附加到它,因此您会错误地处理带有多个相关因素的数字。
其次,else
仅与最后一个if
相关,因此如果数字不能被7
整除,您将使用数字的字符串表示形式覆盖声音。解决此问题的一种方法是保留一个布尔值,用于判断数字是否有“特殊”声音,并在if
语句中更新它:
def转换(数字):
特殊=错误
sound=“”
如果数字%3==0:
声音+=“卡嗒声”
特殊=真实
如果数字%5==0:
声音+=“规划”
特殊=真实
如果数字%7==0:
声音+=“扑通”
特殊=真实
如果不是特别的:
声音=str(数字)
回音
编辑:
正如Hampus Larson在评论中指出的那样,特殊
变量可以省略,而声音
可以直接检查:
def转换(数字):
sound=“”
如果数字%3==0:
声音+=“卡嗒声”
如果数字%5==0:
声音+=“规划”
如果数字%7==0:
声音+=“扑通”
如果没有声音:
声音=str(数字)
回音
试试这个:
def convert(number):
sound = ""
if number % 3 == 0:
sound += "Pling"
if number % 5 == 0:
sound += "Plang"
if number % 7 == 0:
sound += "Plong"
if sound == '':
sound = str(number)
return sound
print(convert(35)) #PlangPlong
这当然不是附加字符串的方式@H2H2。如果输入数字具有某些整数作为因子,则需要附加到变量sound。这就是你能做到的
编辑:
正如用户Hampus Larson指出的那样,声音
可以直接检查。多亏了他!。这样我们可以提高代码的性能
def convert(number):
sound = ''
if number % 3 == 0:
sound += "Pling"
if number % 5 == 0:
sound += "Plang"
if number % 7 == 0:
sound += "Plong"
if not sound:
return str(number)
return sound
在Python中附加字符串类似于这样的内容,使用+
操作符添加两个数字
str1 = "H2H2"
str2 = "2H2H"
print(str1 + str2)
# H2H22H2H
str1 += str2
print(str1)
# H2H22H2H
您认为解决问题的方法是错误的,因为else
子句只属于最后一个if
子句,并且只在if
在某一点上失败了
为了回答您的问题为什么顺序if语句只有在满足最后一个条件时才起作用我只能说您在追加字符串而不是追加字符串时犯了错误,您重新分配了变量sound
,这就是导致程序出现意外行为的原因。您的意思是声音+=…
?我是这个意思。谢谢但正如@Mureinik在下面提到的,else的第二个问题导致了错误的答案。@h2h2h2你是个初学者,对吗?:)当我们不熟悉某件事时,我们会犯一些严重的错误。而且,您应该检查它们。特殊
变量不是冗余的吗?空字符串的真实性是False
,因此如果没有声音,您应该能够执行:返回str(number)
@HampusLarsson,很好。我已经编辑了我的答案(当然还有相关的信用声明)convert(3)
返回'3'
,因为如果给定的数字不能被7
整除,你的else
声明就会被击中。这并没有按预期工作,因为@Mureinik上面提到了else问题。e、 打印(转换(3)),将输出3,但预期是“Pling”对不起,我忘了添加一些代码。Thanks@HampusLarsson为了提高认识
str1 = "H2H2"
str2 = "2H2H"
print(str1 + str2)
# H2H22H2H
str1 += str2
print(str1)
# H2H22H2H