Python字符串和条件语句列表



我有这段代码,我卡住了,我不知道为什么它不会执行else语句。如果x是"100";我想将十进制值转换为6位,否则x = "115", "130", "145"我想把十进制值转换成8位。

string_list = ["100", "115", "130", "145"]
if (x == "100" for x in string_list):
dec_to_bin = "{0:06b}".format()

else:
dec_to_bin = "{0:08b}".format()

但是,它不执行else语句并以6位输出所有内容。

我希望答案是这样的

100 6位115 8位

130 8位

145 8位

正如@Sayse在评论中提到的,使用for循环是不正确的:

试试这个:

string_list = ["100", "115", "130", "145"]
res = []
for x in string_list:
if x == "100":
dec_to_bin = "{0:06b}".format(int(x))
else:
dec_to_bin = "{0:08b}".format(int(x))
res.append(dec_to_bin)
print(res) #Will print ['1100100', '01110011', '10000010', '10010001']

您将返回True/False响应的条件放在括号中的if之后,因此它不会遍历每个元素。你基本上是在写&;如果有x==&;100&;在string_list中执行此操作。要使它适用于所有元素,只需这样写:

for x in string_list:
if x == "100":
dec_to_bin = ...
else:
dec_to_bin = ...

当您通过传递(x == "100" for x in string_list)来编写if语句时,您正在创建一个不是None的生成器,因此触发if语句。

它没有像你希望的那样遍历每个元素。要使它遍历每个元素,在For循环中编写if语句。

永远不会执行else语句。第一个语句是if语句。

你想评估一个特定的项目是否等于'100',如果是,就做点什么。然而,if (x == "100" for x in string_list)行实际上生成了一个名为generator的项目,而不是None。因此,if语句总是被执行:你的生成器总是为真。

您应该尝试解析列表,然后为每个项目使用if/else语句:

for item in string_list :
if item == '100':
# action
else :
# other action

要从这些输入数据中获得输出,则:

string_list = ["100", "115", "130", "145"]
for e in string_list:
n = 6 if e == '100' else 8
print(f'{e} {n}bits')

输出:

100 6bits
115 8bits
130 8bits
145 8bits

另外:

string_list = ["100", "115", "130", "145"]
for e in string_list:
n = 6 if e == '100' else 8
print(f'{e} {int(e):0{n}b}')

输出:

100 1100100
115 01110011
130 10000010
145 10010001

注意:

不确定"100"6是因为100(以10为基数)的二进制表示需要7位

最新更新