-1

私は自分の本から質問をしようとしていますが、次のように尋ねられます。

入力を必要とせず、繰り返しユーザーに学生の名前の入力を求める関数名を実装します。ユーザーが空白の文字列を入力すると、関数は名前ごとに、その名前を持つ学生の数を出力する必要があります。

使用例:

Usage:
names()
Enter next name: Valerie
Enter next name: Bob
Enter next name: Valerie
Enter next name: John
Enter next name: Amelia
Enter next name: Bob
Enter next name: 
There is 1 student named Amelia
There are 2 students named Bob
There is 1 student named John
There are 2 students named Valerie

これまでのところ、私はこのコードを持っています:

def names():
    names = []
    namecount = {a:name.count(a) for a in names}
    while input != (''):
        name = input('Enter next name: ')
        names = name
        if input == ('')
            for x in names.split():
                print ('There is', x ,'named', names[x]) 

私はここで本当に迷っており、どんな情報でも大いに役立ちます。また、可能であれば、私のコードを修正する方法を説明してください

4

4 に答える 4

0

関数の命名には多くの問題があります。関数名に使用される「names」や、ユーザー入力を読み取るためのPython関数名である「input」などの変数を使用しているため、使用を避ける必要があります。これ。また、namecount変数をdictとして定義し、塗りつぶす前に初期化しようとしています。したがって、以下の解決策を確認してみてください。

def myFunc():
    names = []
    name = ''
    while True: #bad stuff you can think on your own condition
        name = raw_input('press space(or Q) to exit or enter next name: ')
        if name.strip() in ('', 'q', 'Q'):
            for x in set(names):
                print '{0} is mentioned {1} times'.format(x, names.count(x))
            break
        else:
            names.append(name)

myFunc()

また:

from collections import defaultdict

def myFunc():
    names = defaultdict(int)
    name = ''
    while True: #bad stuff you can think on your own condition
        name = raw_input('press space(or Q) to exit or enter next name: ')
        if name.strip() in ('', 'q', 'Q'):
            for x in set(names):
                print '{0} is mentioned {1} times'.format(x, names[x])
            break
        else:
            names[name] += 1
于 2013-03-11T07:59:54.667 に答える
0
def names():
      counters = {}

      while True:
            name = input('Enter next name:')

            if name == ' ':
                  break

            if name in counters:
                  counters[name] += 1
            else:
                  counters[name] = 1
      for name in counters:
            if counters[name] == 1:
                  print('There is {} student named {}'.format(counters[name],name))
            else:
                  print('There are {} student named {}'.format(counters[name],name))


names()
于 2016-08-05T00:43:53.013 に答える
0

私はあなたのためにあなたの関数を書き直しました:

def names():
    names = {} # Creates an empty dictionary called names
    name = 'cabbage' # Creates a variable, name, so when we do our while loop, 
                     # it won't immediately break
                     # It can be anything really. I just like to use cabbage
    while name != '': # While name is not an empty string
        name = input('Enter a name! ') # We get an input
        if name in names: # Checks to see if the name is already in the dictionary
            names[name] += 1 # Adds one to the value
        else: # Otherwise
            names[name] = 1 # We add a new key/value to the dictionary
    del names[''] # Deleted the key '' from the dictionary
    for i in names: # For every key in the dictionary
        if names[i] > 1: # Checks to see if the value is greater for 1. Just for the grammar :D
            print("There are", names[i], "students named", i) # Prints your expected output
        else: # This runs if the value is 1
            print("There is", names[i], "student named", i) # Prints your expected output

するときnames()

Enter a name! bob
Enter a name! bill
Enter a name! ben
Enter a name! bob
Enter a name! bill
Enter a name! bob
Enter a name! 
There are 3 students named bob
There are 2 students named bill
There is 1 student named ben
于 2013-03-11T08:13:54.903 に答える
0

コードを分析しましょう。

def names():
    names = []
    namecount = {a:name.count(a) for a in names}
    while input != (''):
        name = input('Enter next name: ')
        names = name
        if input == ('')
            for x in names.split():
                print ('There is', x ,'named', names[x]) 

いくつか問題があるようですが、それらを挙げてみましょう

  1. whileループの条件
    • あなたがしたいことは、ユーザーからの入力が''(何もない)かどうかを確認します..
    • inputユーザーからの入力を取得するための組み込み関数であるため、('').
  2. names = nameステートメント_
    • あなたがしたいことはname、リストに追加することですnames
    • ここではnames、文字列に変更していますが、これは必要なものではありません。
  3. if条件付き
    • 1と同じ。
  4. forループ _
    • 無視しましょう..ただ有効ではありません..ここ..

これらの問題を次のように修正します(解決策には、解決した上記の問題と同じ番号が付けられています)

  1. 条件を次のように変更しますname != ''。また、ループが始まる前に、これが機能するために一度入力を取得する必要があります。この場合、ボーナスがあり、最初の入力は異なるプロンプトを持つことができます。
  2. names.append(name)に追加するnameために使用しnamesます。
  3. 1と同じ。
  4. 以下の for ループを見てください...

これを試して

def names():
    names = []
    name = input('Enter a name: ').strip() # get first name
    while name != '':
        names.append(name)
        name = raw_input('Enter next name: ').strip() # get next name

    for n in set(names): # in a set, no values are repeated
        print '%s is mentioned %s times' % (n, names.count(n)) # print output
于 2013-03-11T08:31:04.787 に答える