如果在任何行中都没有找到变量,我的代码只能打印一次。如果找到该行,它可以很好地进行打印,但是如果找不到该行,则完全是一团糟。
.txt文件看起来像这样,但更长了:
14312 Dog
54314 Cat
76543 Pig
53244 Chicken
52314 Monkey
87465 Cow
这里有我的代码
num = input(str('enter number:'))
with open("numbers.txt") as search:
for line in search:
line = line.rstrip()
if num in line:
print(line )
if num not in line:
print('hello world')
我认为我理解问题所在,该部分显示:
if num not in line:
print('hello world')
逐一搜索所有行,并且每当用户输入不在一行中时,它就会打印问候世界。我需要它来评估所有行,并且如果无法在用户输入中找到任何行,则仅打印“ hello world”。
有没有简单的方法可以做到这一点?预先感谢!
答案 0 :(得分:1)
会是这样的:
num = input(str('enter number:'))
found = 0
with open("numbers.txt") as search:
for line in search:
line = line.rstrip()
if num in line:
print(line)
found = 1
if found == 0:
print('hello world')
答案 1 :(得分:1)
听起来很奇怪,但是使用for ... else子句:
num = input(str('enter number:'))
with open("numbers.txt") as f:
lines = f.readlines()
for line in lines:
if num in line:
print(line)
break
else:
print("No match!")
只有在for循环永不中断的情况下,else语句才会执行。我认为只有一场比赛。如果要打印多行,则此解决方案将不起作用。最后,最好使用readlines()
获取行列表,然后分别对其进行解析。
答案 2 :(得分:1)
其他选项也有效,但这也是使用字典的另一种解决方案。它必须先读取文件,但这是即时查找,因此在读取文件后它将很快。实质上,这将把整个文件读入内存。如果您一次只搜索一个数字(或数字set
),我将使用其他解决方案。如果您要多次搜索文件(即多次读取文件),最好只吃掉内存以节省时间。
num = input(str('enter number:'))
animal_numbers = dict()
with open("numbers.txt") as f:
for line in f.readlines():
# Read each key and value from the file
key, val = line.strip().split(' ')
# Store that value (animal) for that key (the number).
animal_numbers[key] = val
# If the number is in the numbers
# then we will print it
if num in animal_numbers:
print("Animal: {} --- Number: {}".format(animal_numbers[num], num))
else:
print("hello world")