Форум сайта python.su
1
ну вот наконец-то я вроде как решила задачку с генератором персонажей и навояла трехкилометровый код (уверена, что его можно сократить буквально до трех строчек, но я пока не знаю, как…)
жду ваших комментариев!
Прикреплённый файлы:
hero_003_ex.py (5,2 KБ)
Офлайн
568
AmazzzonkaПервый взгляд на код:
ну вот наконец-то я вроде как решила задачку с генератором персонажей и навояла трехкилометровый код (уверена, что его можно сократить буквально до трех строчек, но я пока не знаю, как…)
жду ваших комментариев!
value01=hero[0][1] value02=hero[1][1] value03=hero[2][1] value04=hero[3][1]
elif reply == 1: elif reply == 2: elif reply == 3: elif reply == 4:
ACTIONS={ 1:func1 2:Func2 }
Офлайн
1
Спасибо за помощь!
Вот новый вариант программы. Подскажите, плз, как можно реализовать идею с функциями в словаре.
Так, чтобы можно было использовать словарь подобной структуры:
ACTIONS = { 1:function_1, 2: function_2, ... x: function_x}
Прикреплённый файлы:
hero_003_ex.py (2,6 KБ)
Офлайн
15
Есть возможность записывать в словарь объекты созданных функций по ключу(т.е. писать без скобочек):
def fuction_1(): #тело функции return #результат def fuction_2(): #тело функции return #результат def fuction_x(): #тело функции return #результат ACTIONS = { 1:function_1, 2: function_2, ... x: function_x}
ACTIONS = { ... 'first':lambda x: x+1, ... 'second':lambda y,w: y+w, ... 'third':lambda l: l/2.0} q=ACTIONS['first'] q(4) 5 ACTIONS['second'](7,11.5) 18.5 ACTIONS['third'](3) 1.5
Отредактировано buddha (Май 8, 2012 08:41:40)
Офлайн
1
УРРРА! Получилось!)))
Вот она, доработанная в согласии со всеми вашими рекомендациями 
Прикреплённый файлы:
hero_003_ex.py (2,7 KБ)
Офлайн
568
AmazzzonkaОбъясните, пожалуйста, великий смысл сего действа
УРРРА! Получилось!)))
Вот она, доработанная в согласии со всеми вашими рекомендациями :D
reply%1==0
Офлайн
1
FishHookну это чтобы пользователь не ввел какое-нибудь дробное значение в дозволенных пределах, например, 1,5.
Объясните, пожалуйста, великий смысл сего действа
reply%1==0
Офлайн
52
value01=hero[0][1] value02=hero[1][1] value03=hero[2][1] value04=hero[3][1]
total=int(hero[0][1]+hero[1][1]+hero[2][1]+hero[3][1])
answer%1==0
for item in range(0, len(hero)): name = hero[item][0] print((item+1), ' - ', name)
hero = [['Сила', 0], ['Ловкость', 0], ['Мудрость', 0], ['Здоровье',0]]
Отредактировано fata1ex (Май 10, 2012 15:21:01)
Офлайн
1
Спасибо за советы! Правда, я пока еще мало что поняла, но главное - понятно - не останавливаться!)))
Вот передо мной новая задачка (из того же учебника). В самом учебнике разбиралась игра “Викторина”, в которой задания брались из текстового файла.
Задача №1. Для каждого вопроса сделать “номинал” и в конце выдать пользователю результат игры как сумму номиналов вопросов, на которые он ответил правильно. (это мной было реализовано вроде как успешно, т.к. код делает то, что я хотела)
Задание №2. Доработайте игру т.о., чтобы она хранила в файле список рекордов. В список должны попадать имя и результат игрока-рекордсмена. Используйте для хранения таблицы рекордов консервированный объект. (т.к. в данной главе разбирались модули pickle и shelve, то автор наверняка предполагает их использование)
И вот тут проблема: вроде задание простое, а код работает неправильно(((
Что не так?
Вот код:
# Trivia Challenge # Trivia game that reads a plain text file import sys, pickle, shelve def open_file(file_name, mode): """Open a file.""" try: the_file = open(file_name, mode) except IOError as e: print("Unable to open the file", file_name, "Ending program.\n", e) input("\n\nPress the enter key to exit.") sys.exit() else: return the_file def next_line(the_file): """Return next line from the trivia file, formatted.""" line = the_file.readline() line = line.replace("/", "\n") return line def next_block(the_file): """Return the next block of data from the trivia file.""" category = next_line(the_file) question = next_line(the_file) answers = [] for i in range(4): answers.append(next_line(the_file)) correct = next_line(the_file) #c. 217 - неправильная табуляция!!! if correct: correct = correct[0] score = next_line(the_file) if score: score = int(score) explanation = next_line(the_file) return category, question, answers, correct, score, explanation def welcome(title): """Welcome the player and get his/her name.""" print("\t\tWelcome to Trivia Challenge!\n") print("\t\t", title, "\n") def main(): trivia_file = open_file("trivia.txt", "r") title = next_line(trivia_file) welcome(title) scores = 0 records = [] name = input('Hello! What\'s your name? ') # get first block category, question, answers, correct, score, explanation = next_block(trivia_file) while category: # ask a question print(category) print(question) print('If you give right answer you\'ll get ', score, 'points.\n\n') for i in range(4): print("\t", i + 1, "-", answers[i]) # get answer answer = input("What's your answer?: ") # check answer if answer == correct: print("\nRight!", end=" ") scores += score else: print("\nWrong.", end=" ") print(explanation) print("Score:", scores, "\n\n") # get next block category, question, answers, correct, score, explanation = next_block(trivia_file) trivia_file.close() print("That was the last question!") print("You're final score is", scores) record = (scores, name) # создает список рекордов records.append(record) records.sort(reverse=True) f = open('records.dat', 'ab') pickle.dump(records,f) f.close() f = open('records.dat', 'rb') records = pickle.load(f) print('NAME\t\tSCORES') for i in records: record, name = i print(name, '\t\t', record) f.close() main() input("\n\nPress the enter key to exit.")
Прикреплённый файлы:
trivia.txt (1,5 KБ)
Офлайн
0
по первой задаче:
может, так?
import random script = ['life','mountain','spirit','reason','wind','guitar','eagle','rainbow'] random.shuffle(script) for x in script: print x
Отредактировано asphix (Май 24, 2012 09:14:29)
Офлайн