2016-10-02 2 views
-2

Вопрос 1: Как я могу добавить в словарь с запросом пользователя, I.E. Input ("Написать название Runners"), Input ("Write истекшее время!")Сортировка по значению и правильная печать, ключ и значение. PYTHON

Вопрос 2: Я хотел бы сделать вывод, как это. Под мой код .... шашек :)

import operator 

словарь

runners = {"John": 9, "Mike": 2, "Venera": 4} 

Выход:

1st. "Entered runner name ", came at, "input time" 
2nd. "Entered runner name ", came at, "input time" 
3rd. "Entered runner name ", came at, "input time" 

Ниже сортирует от наименее к более

s = sorted(runners.items(), key=operator.itemgetter(1)) 
print(s) 

Пример даст вам полное понимание моей проблемы. Итак, пример кода - это, я просто хочу сделать это проще.

names =[] 
array_times = [] 

Looping это вопросы, не писать кучу входов для г в диапазоне (3):

name=input("Please write the name of Runner!") 
    #Appending name to the array name above! 
    names.append(name) 
    time_elapsed = float(input("Please write the time you spend!")) 
    #Appending it to the array above! 
    array_times.append(time_elapsed) 
# Just to make it easier to understand, assigning the values in arrays above to variables. 
runner1= names[0] 
runner2=names[1] 
runner3=names[2] 
time1=array_times[0] 
time2=array_times[1] 
time3=array_times[2] 

Дать если-другое заявление, чтобы проверить, какой из которых место.

if time1<time2 and time1<time3 and time2<time3:#First winner, second in second, third is last. 
    print (runner1, "wins! His time is", time1, runner2, "is second place. His time is", time2, "and ", runner3, "is third place. his time is ", time3) 
elif time2<time1 and time2<time3 and time1<time3:#Second winner, first in second place, third is last. 
    print (runner2, "wins! His time is", time2, runner1, "is second place. His time is", time1, "and ", runner3, "is third place. his time is ", time3) 
elif time3<time1 and time3<time2 and time1<time2:#Third winner, First is second, second is last. 
    print (runner3, "wins! His time is", time3, runner1, "is second place. His timae is", time1, "and ", runner2, "is third place. his time is ", time2) 
elif time3<time1 and time3<time2 and time2<time1:#Third winner, second is second, first is last. 
    print (runner3, "wins! His time is", time3, runner2, "is second place. His time is", time2, "and ", runner1, "is third place. his time is ", time1) 
elif time2<time1 and time2<time3 and time3<time1:#Third winner, second is second, first is last. 
    print (runner2, "wins! His time is", time2, runner3, "is second place. His time is", time 
+2

* один * вопрос пожалуйста. –

ответ

0

python3

import operator 

runners = {} 

for x in range(3): 
    name = input("name: ") 
    elapsed_time = int(input("time: ")) 
    runners[name] = elapsed_time 

templates = [ 
    "{name} wins! His time is {time}.", 
    "{name} is in second place. His time is {time}", 
    "and {name} is in third place. His time is {time}" 
] 

for idx, (name, elapsed_time) in enumerate(sorted(runners.items(), key=operator.itemgetter(1))): 
    print(templates[idx].format(name=name, time=elapsed_time), end=" ") 
print() 
+0

Это работает для меня. Благодарю. Но. Не могли бы вы объяснить ваш код? 1. runners [name] = elapsed_time 2. для idx, (name, elapsed_time) в перечислении (отсортировано (runners.items(), key = operator.itemgetter (1))): print (templates [idx]. format (name = name, time = elapsed_time), end = "") print() –

+0

1) Это просто связывает 'name' с' time' в 'runners'' dict 'https://docs.python.org/ 3/библиотека/stdtypes.html # dict 2) 'runners' отсортированы по значению (время),' перечисляют', возвращают текущий шаг итерации, 0, 1, 2 в вашем случае, а затем вы спрашиваете 'templates' с этим' idx' для строки и форматирования с текущим «местом» ваших бегунов На первом (первое место) итерация 'idx' будет равна 0, поэтому' templates [0] 'вернет первую строку -' '{name} победит! Его время {время}." ', на следующей итерации (второе место)' idx' будет 1, и мы возьмем вторую строку из 'templates' и т. д. –

0

, как указано в питона doc

Лучше думать о словаре как неупорядоченный набор пар ключ: значение с требованием, чтобы ключи были уникальны (в пределах одного словаря)

Использование OrderedDict

from collections import OrderedDict 

no_of_runners = int(input()) 

runners = dict() 
for i in range(no_of_runners): 
    name = input() 
    time = float(input()) 
    runners[name] = time 
sorted_runners = OrderedDict(sorted(runners.items(), key=lambda t: t[1])) 

runners_list = [(i,j) for i,j in sorted_runners.items()] 

print (runners_list[0][0], "wins! His time is", runners_list[0][1], runners_list[1][0], "is in second place. His time is", runners_list[1][1], "and ", runners_list[2][0], "is in third place. his time is ", runners_list[2][1]) 
0

Python 2,7

runners={} 
for i in range(3): 
    name=raw_input("Please write the name of Runner!") 
    time_elapsed = float(raw_input("Please write the time you spend!")) 
    runners[name]=time_elapsed 
position=[] 
for name, elapsed in sorted(runners.iteritems(), key=lambda elapsed: elapsed[1]): 
    position.append((name, elapsed)) 
print position[0][0], "wins! His time is", position[0][1],'\n', position[1][0], "is second. His time is", position[1][1], "\n", position[2][0], "is third. His time is ", position[2][1] 

Python3

runners={} 
for i in range(3): 
    name=input("Please write the name of Runner!") 
    time_elapsed = float(input("Please write the time you spend!")) 
    runners[name]=time_elapsed 
position=[] 
for name, elapsed in sorted(runners.items(), key=lambda elapsed: elapsed[1]): 
    position.append((name, elapsed)) 
print ('\n',position[0][0], "wins! His time is", position[0][1],'\n', position[1][0], "is second. His time is", position[1][1], "\n", position[2][0], "is third. His time is ", position[2][1])