Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么顺序if语句仅在满足最后一个条件时才起作用?_Python_Numbers - Fatal编程技术网

Python 为什么顺序if语句仅在满足最后一个条件时才起作用?

Python 为什么顺序if语句仅在满足最后一个条件时才起作用?,python,numbers,Python,Numbers,对于一个练习,我必须根据输入数字是否有某些整数作为因子来附加一个字符串。下面的代码似乎只有在我的输入有7作为因子时才起作用,所以对于7(expected=“Plong”)、21(expected=“PlingPlong”)是ok的。也不适用于35(预期为=“PangPlong”) 这里有两个问题 首先,在每个if中,您都会覆盖声音,而不是附加到它,因此您会错误地处理带有多个相关因素的数字。 其次,else仅与最后一个if相关,因此如果数字不能被7整除,您将使用数字的字符串表示形式覆盖声音。解决此

对于一个练习,我必须根据输入数字是否有某些整数作为因子来附加一个字符串。下面的代码似乎只有在我的输入有7作为因子时才起作用,所以对于7(expected=“Plong”)、21(expected=“PlingPlong”)是ok的。也不适用于35(预期为=“PangPlong”)


这里有两个问题

首先,在每个
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