Проблема при предоставлении специального символа в качестве входа в python [duplicate]

Вот несколько способов доступа к родительскому контексту внутри дочернего контекста -
  1. Вы можете использовать функцию bind().
  2. Хранить ссылку на контекст / внутри внутри другой переменной (см. пример ниже).
  3. Использовать функции ES6 Arrow .
  4. Изменить код / function design / architecture - для этого вы должны иметь команду над шаблонами проектирования в javascript.

1. Используйте функцию bind()

function MyConstructor(data, transport) {
    this.data = data;
    transport.on('data', ( function () {
        alert(this.data);
    }).bind(this) );
}
// Mock transport object
var transport = {
    on: function(event, callback) {
        setTimeout(callback, 1000);
    }
};
// called as
var obj = new MyConstructor('foo', transport);

Если вы используете underscore.js - http://underscorejs.org/#bind

transport.on('data', _.bind(function () {
    alert(this.data);
}, this));

2 Сохраните ссылку на контекст / внутри внутри другой переменной

function MyConstructor(data, transport) {
  var self = this;
  this.data = data;
  transport.on('data', function() {
    alert(self.data);
  });
}

3 Функция стрелки

function MyConstructor(data, transport) {
  this.data = data;
  transport.on('data', () => {
    alert(this.data);
  });
}
114
задан Alexis 26 December 2015 в 21:33
поделиться

8 ответов

Используйте raw_input() вместо input():

testVar = raw_input("Ask user for something.")

input() фактически оценивает ввод как код Python. Я предлагаю никогда не использовать его. raw_input() возвращает строку verbatim, введенную пользователем.

213
ответ дан Sven Marnach 21 August 2018 в 14:09
поделиться
  • 1
    Хотя для тех, кто читает это с помощью Python 3 , input теперь работает таким образом, а raw_input исчез. – Thomas K 10 February 2011 в 18:35
  • 2
    В какой ситуации вы хотите, чтобы пользователь вставлял код python в свой собственный код? – JFA 26 January 2014 в 18:05
  • 3
    @JFA: Я не думаю, что input() - полезная функция, и я не рекомендую ее использовать. – Sven Marnach 26 January 2014 в 18:24
testVar = raw_input("Ask user for something.")
2
ответ дан Artur Gaspar 21 August 2018 в 14:09
поделиться

Функция input также будет оценивать данные, которые она только что прочитала, как код python, чего вы не хотите.

Общий подход заключается в обработке пользовательского ввода (из sys.stdin ), как и любой другой файл. Попробуйте

import sys
sys.stdin.readline()

Если вы хотите, чтобы он был коротким, вы можете использовать raw_input, который совпадает с input, но пропускает оценку.

10
ответ дан chuck 21 August 2018 в 14:09
поделиться
  • 1
    также, если вы пишете интерактивную программу, рассмотрите импорт readline - это даст функции, похожие на bash (история из коробки, автозаполнение потребует некоторой работы) – Foo Bah 10 February 2011 в 18:10
  • 2
    Отлично сработано! Я использовал ту же функцию на века, и она когда-либо работала хорошо. – Carlo Federico Vescovo 16 February 2018 в 21:52

Это моя работа, чтобы выйти из строя в безопасности, если мне нужно будет перейти на python 3 в будущем.

def _input(msg):
  return raw_input(msg)
0
ответ дан Derlin 21 August 2018 в 14:09
поделиться

Мы можем использовать функцию raw_input() в Python 2 и функцию input() в Python 3. По умолчанию функция ввода принимает входной сигнал в строчном формате. Для другого типа данных вы должны ввести пользовательский ввод.

В Python 2 мы используем функцию raw_input(). Он ожидает, что пользователь наберет некоторый ввод и нажмите return, и нам нужно сохранить значение в переменной путем литья в качестве нашего типа данных желания. Будьте осторожны при использовании литья типа

x = raw_input("Enter a number: ") #String input

x = int(raw_input("Enter a number: ")) #integer input

x = float(raw_input("Enter a float number: ")) #float input

x = eval(raw_input("Enter a float number: ")) #eval input

В Python 3 мы используем функцию input (), которая возвращает значение пользовательского ввода.

x = input("Enter a number: ") #String input

Если вы введете строку, int , float, eval, это займет в качестве ввода строки

x = int(input("Enter a number: ")) #integer input

Если вы введете строку для int cast ValueError: invalid literal for int() with base 10:

x = float(input("Enter a float number: ")) #float input

Если вы введете строку для float cast ValueError: could not convert string to float

x = eval(input("Enter a float number: ")) #eval input

Если вы введете строку для eval cast NameError: name ' ' is not defined Эти ошибки также применимы для Python 2.

6
ответ дан Mr. T 21 August 2018 в 14:09
поделиться

Если вы хотите использовать вход вместо raw_input в python 2.x, тогда этот трюк будет полезен

    if hasattr(__builtins__, 'raw_input'):
      input=raw_input

. После чего

testVar = input("Ask user for something.")

будет работать только хорошо.

4
ответ дан Prav001 21 August 2018 в 14:09
поделиться

Мой рабочий код с исправлениями:

import random
import math
print "Welcome to Sam's Math Test"
num1= random.randint(1, 10)
num2= random.randint(1, 10)
num3= random.randint(1, 10)
list=[num1, num2, num3]
maxNum= max(list)
minNum= min(list)
sqrtOne= math.sqrt(num1)

correct= False
while(correct == False):
    guess1= input("Which number is the highest? "+ str(list) + ": ")
    if maxNum == guess1:
        print("Correct!")
        correct = True
    else:
        print("Incorrect, try again")

correct= False
while(correct == False):
guess2= input("Which number is the lowest? " + str(list) +": ")
if minNum == guess2:
     print("Correct!")
     correct = True
else:
    print("Incorrect, try again")

correct= False
while(correct == False):
    guess3= raw_input("Is the square root of " + str(num1) + " greater than or equal to 2? (y/n): ")
    if sqrtOne >= 2.0 and str(guess3) == "y":
        print("Correct!")
        correct = True
    elif sqrtOne < 2.0 and str(guess3) == "n":
        print("Correct!")
        correct = True
    else:
        print("Incorrect, try again")

print("Thanks for playing!")
0
ответ дан st_443 21 August 2018 в 14:09
поделиться

Проблема, похоже, решена в версии 3.4.2 Python.

testVar = input("Ask user for something.")

Будет работать нормально.

-4
ответ дан Tico 21 August 2018 в 14:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: