我需要编写一个程序来读取存储在txt文件中的数据。 例如:
3147 R 1000
2168 R 6002
5984 B 2000
7086 B 8002
第一个数字是“帐号”,“ R”是住宅分类,最后一个数字是“使用的加仑”。 我需要制作一个程序来打印此:
Account Number: 3147 Water charge: $5.0
我需要让代码读取文本中的4行。居民客户每6000加仑支付$ .005每加仑。更高的$ .007。 商业客户为每8000加仑每加仑支付.006美元。如果更高,则为.008美元。 我需要显示每4行的乘积。 下面的代码是我尝试的。我可能要离开。
我尝试了以下代码:
def main():
input_file = open('C:\Python Projects\Project
1\water.txt', 'r')
empty_str = ''
line = input_file.readline()
while line != empty_str:
account_number = int(line[0:4])
gallons = float(line[7:11])
business_type = line[5]
while business_type == 'b' or 'B':
if gallons > 8000:
water_charge = gallons * .008
else:
water_charge = gallons * .006
while business_type == 'r' or 'R':
if gallons > 6000:
water_charge = gallons * .007
else:
water_charge = gallons * .005
print("Account number:", account_number, "Water
charge:$", water_charge)
line = input_file.readline()
input_file.close()
main()
它运行时无需打印任何内容
答案 0 :(得分:1)
两件事。什么都不出现的原因是因为您陷入了检查业务类型的while循环的无限循环中。将其更改为if语句即可解决。
此外,当您使用and或or或其他运算符时,必须再次指定要比较的变量。
读取文件行的while语句应如下所示:
while line != empty_str:
account_number = int(line[0:4])
gallons = float(line[7:11])
business_type = line[5]
if business_type == 'b' or business_type =='B':
if gallons > 8000:
water_charge = gallons * .008
else:
water_charge = gallons * .006
if business_type == 'r' or business_type =='R':
if gallons > 6000:
water_charge = gallons * .007
else:
water_charge = gallons * .005
print("Account number:", account_number, "Water charge:$", water_charge)
line = input_file.readline()
输出:
('Account number:', 3147, 'Water charge:$', 5.0)
答案 1 :(得分:1)
主要问题是您的while
循环应该只是if
语句:
if business_type.lower() == 'b':
if gallons > 8000:
water_charge = gallons * .008
else:
water_charge = gallons * .006
elif business_type.lower() == 'r':
if gallons > 6000:
water_charge = gallons * .007
else:
water_charge = gallons * .005
else:
# So you don't get a NameError for no water_charge
water_charge = 0
您的while
循环永远不会终止的原因有两个:您永远不会读内循环的 inside 下一行,并且填充的字符串如'b'
的计算结果类似于{ {1}}:
True
# Strings with content act like True
if 'b':
print(True)
# True
# empty strings act as False
if not '':
print(False)
# False
将小写该字符串,因此str.lower()
返回'R'.lower()
。否则,'r'
没有break
条件,它将永远旋转。
其他一些建议:
1)打开文件时,使用while
无需显式with
和open
文件:
close
2)无需显式调用with open('somefile.txt', 'r') as fh:
# Everything else goes under the with statement
,因为您可以直接遍历打开的文件:
fh.readline()
这将在with open('somefile.txt', 'r') as fh:
for line in fh:
# line is the string returned by fh.readline()
为空时终止,或者到达文件末尾;当文件为空时,您可能不会明确获得fh
,并且不再需要{{1 }}循环
3)这通常是不好的做法,但也很难维护。例如,如果帐号不完全是5个字符怎么办?一种更简洁的方法是使用''
,它将在空格处分割:
while
总计:
str.split(' ')