Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2022 15:39:57

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Можно ли создать двойной аргумент в python командой input

FishHook
else:
print(“You failed”)
Из коробки это не отрабатывает. Игрок всегда выигрывает, даже при камне на бумагу и ножницах на камень.
FishHook
if mapping == second:
return -1 # second wins
Заработало только когда return стал возвращать None.

Спорить не буду, ваш опыт моего-то поширше будет. Пусть Vasiliy_noviy решает, какой вариант ему ближе, и какой проще осилить пока. Понятно, что моя простынка годится только для наглядности и быстрого понимания процессов а не для продакшна. Я лично люблю много принтов в таких программках, они помогают понять что происходит, буквально на каждой строке и добавляют информативности при её работе, этому и учебники учат. А если начать навешивать принты на этот вариант, так она ещё жирнее и нечитабельнее окажется.
Функции я не приплетал специально, в изначальной версии их не было, да и тут человек с инпутом-то только неделю назад разобрался..



Отредактировано Palrom (Май 24, 2022 17:35:38)

Офлайн

#2 Май 24, 2022 17:01:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Можно ли создать двойной аргумент в python командой input

Palrom
Заработало только когда return стал возвращать None.
да блин

 import random 
mapping = {"к": "б", "н": "к", "б": "н"} 
def check(first, second):
    if first == second:
        return 0  # even
    if mapping[first] == second:
        return -1  # second wins
    return 1
if result == 0:
    ties += 1
    print("Ничья")
elif result == 1:
    wins += 1
    print("Победа")
else:
    losses += 1
    print("Поражение")



Отредактировано FishHook (Май 24, 2022 17:01:57)

Офлайн

#3 Май 24, 2022 17:34:35

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Можно ли создать двойной аргумент в python командой input

  
import random 
 
mapping = {"к": "б", "н": "к", "б": "н"}
 
def check(first, second):
    if first == second:
        return 0  # even
    if mapping[first] == second:
        return -1  # second wins
    return 1
 
print("КАМЕНЬ, НОЖНИЦЫ, БУМАГА")
wins, losses, ties = 0, 0, 0
while True:
    user_action = input("Выберите: (к)амень, (н)ожницы, (б)умагу, (в)ыход\n")
    if user_action == "в":
        exit()
    comp_action = random.choice(['к', 'н', 'б'])
    print(comp_action)
    result = check(user_action, comp_action)
    if result == 0:
        ties += 1
        print("Ничья")
    elif result == 1: # Вот теперь работает:)
        wins += 1
        print("Победа")
    else:
        losses += 1
        print("Поражение")
    print(f"Побед: {wins} Поражений: {losses} Ничьих: {ties}")
    

Отредактировано Palrom (Май 24, 2022 17:38:49)

Офлайн

#4 Май 24, 2022 17:55:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Можно ли создать двойной аргумент в python командой input

пару замечаний еще позвольте
1.

   
wins, losses, ties = 0, 0, 0

лучше так
   
wins = losses = ties = 0

2.
   
comp_action = random.choice(['к', 'н', 'б'])

это плохо в принципе. Представим, что нам нужна версия программы на турецком языке. Нам придется переписать не просто строку приветствия и какие-то принты, у нас алгоритм программы зависит от букв русского языка. Интерфейсную часть от логики надо отделять всегда, даже в такой простой программе. Заведите константы

   
STONE = 1
SCISSORS = 2
PAPER = 3
и только эти константы используйте для расчетов.
   
def get_user_action():
    user_action = input("Выберите: (к)амень, (н)ожницы, (б)умагу, (в)ыход\n")
    if user_action == "в":
        exit()
    if user_action = "н":
      return SCISSORS
    elif user_action = "б":
      return PAPER
   elif user_action = "к":
      return STONE
   print("Invalid input")
   get_user_action()



Отредактировано FishHook (Май 24, 2022 17:56:05)

Офлайн

#5 Май 24, 2022 22:07:44

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9715
Репутация: +  842  -
Профиль   Отправить e-mail  

Можно ли создать двойной аргумент в python командой input

FishHook
  
    if user_action == "в":
        exit()
Не используй функцию exit() в кодах программ. Она предназначена только для работы в оболочке питона, как help() и dir(). Для выхода из программы существует функция sys.exit() с кодом возврата.

python.org. exit()
Constants added by the site module

The site module (which is imported automatically during startup, except if the -S command-line option is given) adds several constants to the built-in namespace. They are useful for the interactive interpreter shell and should not be used in programs.
Вот эту используй
python.org. sys.exit()


tags: exit



Отредактировано py.user.next (Май 24, 2022 22:22:05)

Офлайн

#6 Май 24, 2022 22:17:40

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Можно ли создать двойной аргумент в python командой input

Нафуфыренная версия, с функциями:

  
import random
import sys
 
ROCK = 1
SCISSORS = 2
PAPER = 3
 
def get_user_action():
    while True:
        user_action = input("Выберите: (к)амень, (н)ожницы, (б)умагу, (в)ыход\n")
        if user_action == "в":
            return 0
        elif user_action == "н":
            return SCISSORS
        elif user_action == "б":
            return PAPER
        elif user_action == "к":
            return ROCK
        else:
            print("Неверный ввод. Повторите.")
            continue
 
def get_computer_selection():
    selection = random.randint(1, 3)
    if selection == 1:
        return ROCK
    elif selection == 2:
        return SCISSORS
    elif selection == 3:
        return PAPER
 
def get_obj_name(index):
    if index == 1:
        return "камень"
    elif index == 2:
        return "ножницы"
    elif index == 3:
        return "бумага"
 
def determine_winner(user_action, computer_action):
 
    mapping = {ROCK: [PAPER], SCISSORS: [ROCK], PAPER: [SCISSORS]}
 
    if user_action == computer_action:
        print(f"Выбор обоих игроков: {get_obj_name(user_action)}.\nНичья!")
        return 0
    print(f"Ваш выбор: {get_obj_name(user_action)}. "
          f"Выбор оппонента: {get_obj_name(computer_action)}.")
    if computer_action in mapping[user_action]:
        print("Вы проиграли.")
        return -1
    else:
        print("Вы победили!")
        return 1
 
def main():
    print("КАМЕНЬ, НОЖНИЦЫ, БУМАГА")
    wins = losses = ties = 0
    while True:
        user_action = get_user_action()
        if user_action == 0:
            print('Завершение программы.')
            sys.exit()
        computer_action = get_computer_selection()
        result = determine_winner(user_action, computer_action)
        if result == 0:
            ties += 1
        elif result == 1:
            wins += 1
        else:
            losses += 1
        print(f"Побед: {wins} Поражений: {losses} Ничьих: {ties}")
 
if __name__ == '__main__':
    main()

Офлайн

#7 Май 27, 2022 15:28:47

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Можно ли создать двойной аргумент в python командой input

можно ли инпут с двумя параметрами да пжалусто

 def input(a, b):
    print(a, b)
input("1", "2")
только мне сдается что это не то чего вы хотели



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Май 27, 2022 16:42:06)

Офлайн

#8 Авг. 1, 2022 11:46:31

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Можно ли создать двойной аргумент в python командой input

Palrom
 def determine_winner(user_action, computer_action):
 
    mapping = {ROCK: [PAPER], SCISSORS: [ROCK], PAPER: [SCISSORS]}
 
    if user_action == computer_action:
        print(f"Выбор обоих игроков: {get_obj_name(user_action)}.\nНичья!")
        return 0
    print(f"Ваш выбор: {get_obj_name(user_action)}. "
          f"Выбор оппонента: {get_obj_name(computer_action)}.")
    if computer_action in mapping[user_action]:
        print("Вы проиграли.")
        return -1
    else:
        print("Вы победили!")
        return 1

Решал сейчас похожую задачу на codewars, наткнулся на элегантнейшее решение:
  
def rps(p1, p2):
    hand = {'rock':0, 'paper':1, 'scissors':2}
    results = ['Draw!', 'Player 1 won!', 'Player 2 won!']
    return results[hand[p1] - hand[p2]]
Может кому пригодится в будущем.

Офлайн

#9 Авг. 1, 2022 11:55:09

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Можно ли создать двойной аргумент в python командой input

Palrom
так оно же не работает



Офлайн

#10 Авг. 1, 2022 12:10:26

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Можно ли создать двойной аргумент в python командой input

FishHook
так оно же не работает
Всё работает, яж проверял:
  
def rps(p1, p2):
    hand = {'rock':0, 'paper':1, 'scissors':2}
    results = ['Draw!', 'Player 1 won!', 'Player 2 won!']
    return results[hand[p1] - hand[p2]]
 
print(rps('rock', 'scissors'))
 
# Player 1 won!
 
print(rps('rock', 'rock'))
 
# Draw!
 
print(rps('paper', 'scissors'))
 
# Player 2 won!
и т.д.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version