Попытка применить функцию к пользовательскому вводу

#python #python-3.x

#python #python-3.x

Вопрос:

Я пытаюсь использовать внешнюю функцию и применить ее к базовому пользовательскому вводу. По сути, внешняя функция (код 1) заставляет текст в (коде 2) распечатываться медленно, как диалоговое окно видеоигры. Однако эта функция не влияет на первую переменную с именем «intro», а только на переменную «response». Я не знаю, как это исправить.

Код 1:

 import sys,time,os


def typewriter(self):
    for char in message:
        sys.stdout.write(char)
        sys.stdout.flush()

        if char !="n":
            time.sleep(0.1)
        else:
            time.sleep(1)


os.system("cls")
  

Код 2:

 from typewriter import *

intro = input("What is your name?n")
typewriter(intro)

response = ("Nice to meet you "   intro   ".n
My name is Program.")


message  = intro and response 
typewriter(response)
  

Комментарии:

1. Что message = intro and response предполагается делать?

2. При запросе ввода пользователь непосредственно видит, что он вводит, прежде чем отправлять его в вашу программу. Вы ищете приглашение без эха, например getpass ?

3. @khelwood я ничего не думаю. Просто удалил его, и код все еще выполняется.

4. @MisterMiyagi Я понятия не имею, что это такое. Я самообучаюсь. По сути, я хочу, чтобы предложение «Как тебя зовут» печаталось медленно, как диалог в видеоигре, благодаря моей функции. Но независимо от того, где я вызываю функцию в коде 2, приглашение из «intro» по-прежнему печатается нормально, а не зависит от функции.

5. typewriter('What is your name?') за которым следует intro = input()

Ответ №1:

У вас почти получилось! Как уже упоминалось, ваша typewriter функция должна получать текст, который она должна печатать. Но также, «Как вас зовут?» теперь печатается input , а не вашей функцией.

Это работает:

 import sys
import time


def typewriter(message):
    for char in message:
        sys.stdout.write(char)
        sys.stdout.flush()

        if char !="n":
            time.sleep(0.1)
        else:
            time.sleep(1)


intro = "What is your name?n"
typewriter(intro)
name = input()

response = ("Nice to meet you "   name   ".n
My name is Program.")

typewriter(response)
  

Комментарии:

1. Да, я закончил тем, что сделал это, и это работает, но мне было любопытно посмотреть, можно ли объединить функцию пишущей машинки с функцией ввода. Вы знаете, меньше строк, более чистый код и еще много чего.

Ответ №2:

Очевидно, что функция typewriter не принимает никаких аргументов для обработки данных. При typewriter(intro) первом вызове переменная message не определена. Я думаю, вам нужно изменить функцию пишущей машинки следующим образом.

 def typewriter(message):
    for char in message:
        sys.stdout.write(char)
        sys.stdout.flush()

        if char !="n":
            time.sleep(0.1)
        else:
            time.sleep(1)
  

Комментарии:

1. Желаемый эффект заключается в том, чтобы предложение «Как вас зовут?» из переменной «intro» в коде 2 печаталось медленно, как это было бы для переменной «response». пока даже с вашим исправлением это не работает.

Ответ №3:

прежде всего, я попытался переименовать ввод в функции typewrite вместо self я написал message:

 import sys,time,os


def typewriter(message):
    for char in message:
        sys.stdout.write(char)
        sys.stdout.flush()

        if char !="n":
            time.sleep(0.1)
        else:
            time.sleep(1)


os.system("cls")
  

я бы также изменил второй код на этот:

 from typewriter import *

typewriter("What is your name?n")
intro = input()

response = ("Nice to meet you "   intro   ".n
My name is Program.")


message  = intro and response
typewriter(response)
  

получайте удовольствие от кодирования!

Комментарии:

1. Да, это то, что я в итоге сделал, но я хотел посмотреть, возможно ли объединить пишущую машинку и ввод.