0

こんにちは。Pythonプログラミングを始めたばかりなので、たくさんの質問で私をたくさん見る準備をしてください。最初に、私はこの形式で作成した.txtファイルから情報を取得する小さなプログラムを作成しています:

10-50-10011-78-24512-123-354など..。

ユーザーが行きたい場合は、「10」で始まる行を取得します。どうすればそれを取得してすべての情報(10、50、100)を返すことができますか?line.split()を使用すると、行の最初のエントリのみが返されます...

これは私のコードです:

levelChart = open("RunescapeLevelsChart.txt", "r")
actualLevel = raw_input("Level : ")
if actualLevel in open("RunescapeLevelsChart.txt").read() :
    actualLevelSplit = actualLevel.split()
    print actualLevelSplit
else :
    print("Failed.")
raw_input("End")

たとえば、10と入力した場合、プログラムは10、50、100を返しますが、10のみを返します。line.split()を正しく使用して、行のすべての値を返すようにするにはどうすればよいですか。

ありがとう !

4

5 に答える 5

2

あなたの投稿を読んで、私は3つの数字のすべてのセットが常に異なる行にあるとは限らないと思います。そして、ユーザーが探しているもの(10など)で始まるすべてのセットを探しています。

コードをウォークスルー...

levelChart = open("RunescapeLevelsChart.txt", "r")
actualLevel = raw_input("Level : ")

ここまでは順調ですね。

if actualLevel in open("RunescapeLevelsChart.txt").read() :

この時点で、actualLevelが入力になります(たとえば、「10」)。

open( "RunescapeLevelsChart.txt")。read()は、テキストファイル全体をメモリに保存します。

したがって、ファイル全体から「10」を検索しています。あなたの例から、どれが「真」と評価されますか

    actualLevelSplit = actualLevel.split()
    print actualLevelSplit

split()は、文字列を空白で分割します。したがって、ここでは、「10」を['10'](リスト)に分割しています。

else:
    print("Failed.")
raw_input("End")
  • raw_inputは、続行を試みる前にユーザー入力を待機します。ここで「一時停止」しようとしていると想定しています。あなたが持っているものはどれがうまくいくべきか。

今それを言った..これはあなたが望むものを得るはずです..

levelChart = open("RunescapeLevelsChart.txt", "r")
actualLevel = raw_input("Level : ")

for line in levelchart: # Read the file line-by-line.
  number_sets = line.split()
  for set in number_sets:
    if set.startswith(actualLevel + '-'):
      print set 
      #>>> "10-50-100"
      # Now you can further split each number into individual numbers
      nums = set.split('-')
      print nums 
      #>>> ['10', '50', '100']

      # At this point, you can fetch the numbers from the list

levelChart.close() # Dont' forget to close the file object when you're done.

お役に立てれば。

于 2013-01-16T06:40:31.583 に答える
0

これだけではなく、もっと多くの問題があります。

たとえば、23と入力すると、次のエントリが見つかります。12-123-354

10で始まるものだけを見つけたい場合は、これを別の方法で行います。たとえば78、2番目の例を見つけたくない場合は、間違いなく別のことを行う必要があります。

于 2013-01-16T04:28:06.147 に答える
0

コード内の他の問題の中でも、同じファイルを2回開いています。クリーンアップされたバージョンは次のとおりです。

lines = []
with open("RunescapeLevelsChart.txt", "r") as the_file:
    for line in the_file:
       lines.append(line)

actualLevel = raw_input("Level : ")

for each_line in lines:
   if actualLevel in each_line:
       print each_line
   else:
       print "Didn't find it"

print "End"
于 2013-01-16T04:31:17.237 に答える
0

あなたの場合の問題は

あなたがやっているactualLevel.split()、ここにactualLevelあります10

とのみactualLevel.split()戻ります10

In [23]: actualLevel = '10'

In [24]: actualLevel.split()
Out[24]: ['10']

ここでは、ファイルからactualLevelを含む行を分割する必要があります

あなたは次のようなことをする必要があります

In [28]: content = open("RunescapeLevelsChart.txt").read()

In [29]: y = [x for x in content.split(' ') if actualLevel in x]

In [30]: y
Out[30]: ['10-50-100']

In [31]: y[0].split('-')
Out[31]: ['10', '50', '100']
于 2013-01-16T04:31:30.107 に答える
0

リスト全体をファイルに保存したほうがよいでしょう。

f = open("RunescapeLevelsChart.txt", "r")
lines = f.readlines()
for i in lines:
    if i.startswith(actualLevel + '-'):  # so it's actually the first element
        print i  # this prints the line
        print i.split('-')  # use this is you want a list of the numbers
# rest of code (don't forget to close the file!)

actualLevel行自体ではなく、分割しようとしているため、コードは最初の要素を返します。

于 2013-01-16T04:31:33.157 に答える