Найти - Пользователи
Полная версия: Python детсадовского уровня (циклы, кортежи, списки)
Начало » Python для новичков » Python детсадовского уровня (циклы, кортежи, списки)
1 2 3 4
Amazzzonka
ну вот наконец-то я вроде как решила задачку с генератором персонажей и навояла трехкилометровый код (уверена, что его можно сократить буквально до трех строчек, но я пока не знаю, как…)

жду ваших комментариев!
FishHook
Amazzzonka
ну вот наконец-то я вроде как решила задачку с генератором персонажей и навояла трехкилометровый код (уверена, что его можно сократить буквально до трех строчек, но я пока не знаю, как…)

жду ваших комментариев!
Первый взгляд на код:
1.
value01=hero[0][1]
value02=hero[1][1]
value03=hero[2][1]
value04=hero[3][1]
Это у Вас 4 раза, однозначно в функцию
2.
elif reply == 1:
elif reply == 2:
elif reply == 3:
elif reply == 4:
Не айс, просится словарь
ACTIONS={
1:func1
2:Func2
}
3.
if reply == 0:
Фуфуфуфуфу,
если reply ==0 то она уже False



Amazzzonka
Спасибо за помощь!
Вот новый вариант программы. Подскажите, плз, как можно реализовать идею с функциями в словаре.

Так, чтобы можно было использовать словарь подобной структуры:
ACTIONS = {
1:function_1,
2: function_2,
...
x: function_x}
buddha
Есть возможность записывать в словарь объекты созданных функций по ключу(т.е. писать без скобочек):
def fuction_1():
    #тело функции
    return #результат
def fuction_2():
    #тело функции
    return #результат
def fuction_x():
    #тело функции
    return #результат
ACTIONS = {
1:function_1,
2: function_2,
...
x: function_x}

Есть возможность в самом словаре записывать по ключу lambda-выражения:
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
версия python 2.7.3
Amazzzonka
УРРРА! Получилось!)))
Вот она, доработанная в согласии со всеми вашими рекомендациями
FishHook
Amazzzonka
УРРРА! Получилось!)))
Вот она, доработанная в согласии со всеми вашими рекомендациями :D
Объясните, пожалуйста, великий смысл сего действа
reply%1==0
Долго думал, так и не понял
Amazzzonka
FishHook
Объясните, пожалуйста, великий смысл сего действа
reply%1==0
ну это чтобы пользователь не ввел какое-нибудь дробное значение в дозволенных пределах, например, 1,5.
fata1ex
value01=hero[0][1]
value02=hero[1][1]
value03=hero[2][1]
value04=hero[3][1]
…, value05, value06, …, value198, value199, …, value981, value982, …

total=int(hero[0][1]+hero[1][1]+hero[2][1]+hero[3][1])
sum?
comprehensions?

answer%1==0
isinstance? (Не всматривался, но вроде у вас все входные значения под int() - дроби там не будет.)

for item in range(0, len(hero)):
        name = hero[item][0]
        print((item+1), ' - ', name)

- range(0, x) == range(x)
- enumerate?

hero = [['Сила', 0], ['Ловкость', 0], ['Мудрость', 0], ['Здоровье',0]]
Перепутали список со словарем :)

Из общих фраз:
- Использовать словари.
- Убрать глобальные переменные и прочий мешающий чтению кода мусор (условия в if/while и тд). Ввести ООП.
- Поменьше магических цифр и индексов.
- Подучить стандартные функции и методы.
- Пользоваться тегами code.

В общем, хорошо, что пробуете, пишете, но советую более внимательно изучать язык, если стоит задача освоить его. Удачи!
Amazzzonka
Спасибо за советы! Правда, я пока еще мало что поняла, но главное - понятно - не останавливаться!)))

Вот передо мной новая задачка (из того же учебника). В самом учебнике разбиралась игра “Викторина”, в которой задания брались из текстового файла.
Задача №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.")

а в приложенном файле - вопросы к игре.
asphix
по первой задаче:
может, так?

import random
script = ['life','mountain','spirit','reason','wind','guitar','eagle','rainbow']
random.shuffle(script)
for x in script:
    print x
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB