[英]Python: How to use type function in if statements?
我正在编写一个从文件加载数据列表的程序,我需要该程序区分行中的数据是字符串还是整数。 但是,在我完成的代码中,程序无法区分数字和字符串。
我拥有的数据列表示例:
HAJOS
ALFRED
1896
1
我的代码:
def medalsYear():
times = 1
totalGold = 0
totalSilver = 0
totalBronze = 0
while times <= 5:
alpha = fob.readline() #reads file line by line#
print(alpha)
times = times + 1
if type(alpha) == int:
if alpha == 1:
totalGold = totalGold + 1
print("gold medal won")
elif alpha == 2:
totalSilver = totalSilver + 1
print("silver medal won")
elif alpha == 3:
totalBronze = totalBronze + 1
print("bronze medal won")
else:
pass
else:
print('is a string')
print(totalGold, "Gold medals won")
print(totalSilver, "Silver medals won")
print(totalBronze, "Bronze medals won")
我的问题是,当程序读取包含整数的行时,它无法正确确定该行是否包含整数,并从那里开始执行相应的if语句。 目前,我的输出如下所示。
HAJOS
is a string
ALFRED
is a string
1896
is a string
1
is a string
is a string
0 Gold medals won
0 Silver medals won
0 Bronze medals won
done
从文件读取的数据将始终是字符串。 您需要尝试转换这些行,而不是测试它们的类型:
try:
alpha = int(alpha)
if alpha == 1:
totalGold = totalGold + 1
print("gold medal won")
elif alpha == 2:
totalSilver = totalSilver + 1
print("silver medal won")
elif alpha == 3:
totalBronze = totalBronze + 1
print("bronze medal won")
except ValueError:
print('is a string')
当alpha
无法解释为整数时, int()
将引发ValueError
。 如果引发此异常,则会导致Python跳至except ValueError:
块except ValueError:
块,而不是执行try:
套件的其余部分。
您可以创建一个dict,其中键为"1","2" and "3"
以对应于金,银,青铜,然后使用dict.get。
with open(infile) as f:
times = 1
medal_dict = {"1": 0, "2": 0, "3": 0}
while times <= 5:
alpha = f.readline().rstrip() #reads file line by line#
times += 1
if medal_dict.get(alpha) is not None:
medal_dict[alpha] += 1
else:
print("is a string")
print(medal_dict["1"], "Gold medals won")
print(medal_dict["2"], "Silver medals won")
print(medal_dict["3"], "Bronze medals won")
哪个输出:
(1, 'Gold medals won')
(0, 'Silver medals won')
(0, 'Bronze medals won')
如果要在循环中赢得奖牌时打印:
with open(infile) as f:
times = 1
medal_dict = {"1": [0,"gold"], "2": [0,"silver"], "3": [0,"bronze"]}
while times <= 5:
alpha = f.readline().rstrip() #reads file line by line#
print(alpha)
times += 1#
check = medal_dict.get(alpha)
if check is not None:
medal_dict[alpha][0] += 1
print("{} medal won".format(check[1]))
else:
print("is a string")
print(medal_dict["1"][0], "Gold medals won")
print(medal_dict["2"][0], "Silver medals won")
print(medal_dict["3"][0], "Bronze medals won")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.