我有这段代码,我卡住了,我不知道为什么它不会执行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位