#python
Вопрос:
У меня есть эта функция, в которой я получаю переменное количество параметров в параметре функции *args, и я должен их добавить. Исходя из этой суммы, я должен проверить некоторые условия:
- Если их сумма меньше 21, выведите их
- Если сумма больше 21, вычтите 10 из суммы для каждого значения 11 и выведите «не годится», если сумма все еще больше 21 после всех вычитаний
- Если сумма равна 21, и у меня есть значение 10 и значение 11, выведите «Выигрыш».
def get_hand_value(*args):
sum=0
for argument in args:
sum =argument
if(sum < 21):
print("The value of your hand is {}".format(sum))
if(sum > 21 and argument == 11):
sum -=10
print(sum)
if(sum>21 and argument != 11):
print("No Good!")
if(sum ==21 and argument == 11 and argument == 10):
print("Win!")
hand_1 = get_hand_value(4,4,4,4)
hand_2 = get_hand_value(11,10)
hand_3 = get_hand_value(11,5,6,4,11,4)
hand_4 = get_hand_value(11,5,6,10)
hand_5 = get_hand_value(10,5,7)
Это то, что я смог придумать, но после первой раздачи он просто печатает «никуда не годится».
Комментарии:
1.
argument
после цикла — последнее значение изargs
. Проверять это в вашем случае не имеет особого смысла. Вам нужно просмотреть все значения (for
например, с циклом) и вычитать из суммы каждый раз, когда вы видите 11.2. Обратите внимание, что, как правило, плохая практика заключается в том, чтобы создавать тени, такие как
sum
3. Что делать, если сумма равна ровно 21, а у вас нет 10 и 11?
Ответ №1:
Основная проблема, по-видимому, заключается в использовании argument
вне for
цикла. Он всегда будет иметь значение последнего аргумента args
, и это не то, что вы имели в виду.
В частности, эти условия:
if(sum > 21 and argument == 11):
sum -=10
print(sum)
if(sum ==21 and argument == 11 and argument == 10):
print("Win!")
никогда не будет верным для входных данных, которые вы перечислили.
Кроме того, я бы рекомендовал не вызывать переменную sum
, так как это имя встроенной функции. По иронии судьбы, это название функции, которая облегчила бы вам жизнь здесь.
total = sum(args)
Ответ №2:
Когда вы используете argument
после цикла, вы просто получаете последний аргумент, вы не проверяете каждый аргумент, чтобы убедиться, что он равен 11. Вы должны проверить 11
, есть ли внутри цикла.
Не используйте sum
в качестве имени переменной, так как это имя встроенной функции (которую вы могли бы использовать для вычисления суммы).
Используйте elif
при тестировании взаимоисключающих условий.
def get_hand_value(*args):
total=0
elevens = 0
for argument in args:
total =argument
if argument == 11:
elevens = 1
if (total < 21):
print("The value of your hand is {}".format(total))
elif total > 21:
total -= elevens * 10
if total < 21:
print("The value of your hand is {}".format(total))
else:
print("No Good!")
elif total == 21 and elevens == 1:
print("Win!")