2013-05-02 2 views
0

Итак, для вопроса экзамена я следил за этим конкретным псевдокодом, который в основном делает программу, которая шифрует последовательность чисел с использованием того же принципа, что и шифр ceasar. Он должен работать, но по какой-то причине он возвращает ошибку.Шифрование Python

TypeError: 'int' object is not iterable 

Heres код, я надеюсь, что вы, ребята, можете помочь мне, высоко ценится

plainNum = input("enter a number to encode ") 
codedNum = ' ' 
Key = input("enter a key ") 

for i in plainNum: 
    codedNum = codedNum + str((int(i)+key)%10) 
    print codedNum 

ответ

5

Используйте raw_input, если вы ожидаете строку:

plainNum = raw_input("enter a number to encode ") 

input() интерпретирует ввод как если он это код Python; введите 5 и он вернет целое число, введите 'some text' (с кавычками), и он вернет строку. raw_input(), с другой стороны, возвращает введенный ввод неинтерпретированным.

+0

Im not While :) Я хочу, чтобы пользователь вводил число, или не имеет значения, должен ли я просто изменить их оба на raw_input? спасибо – user1655562

+2

@ user1655562: Вы интерпретируете число как ряд цифр; это строка, * не * целочисленное значение python. –

+0

@ user1655562: Ваш ключ, с другой стороны, используется как целое число, поэтому 'input()' делает * some * смысл, но вы можете заставить его принимать только целые числа, используя 'int (raw_input ('.. . ')) '. –

2

Наиболее загрязнен исправление всего, просто изменить

for i in plainNum: 

с

for i in str(plainNum): 
0

вы, возможно, также хочу ключевое изменение ключа, чтобы отразить то, что переменная объявлена ​​ , а также сделать codeNum первоначально равным ' 'вместо' '(без пробела и пробела) только бухгалтерский материал

1

Это работает, но нет, если я использую десятичное число, и это делает не вести себя, если я ввожу слова или пробелы. Рассмотрим сначала проверить, что запись является числом что-то вроде:

try: 
    float(element) 
except ValueError: 
    print "Not a float" 

после удаления каких-либо пробелов что-то вроде:

plainNum = plainNum.strip() 

Но это выводит кодированные цифры введенной целого:

plainNum = raw_input("enter a number to encode ") 
codedNum = ' ' 
key = input("enter a key ") 

for i in plainNum: 
    codedNum = codedNum + str((int(i)+key)%10) 
    print codedNum 

Запросите у пользователя номер с raw_input. Это делает ввод в виде строки, которые вы можете перебрать с:

for char in plainNum: 

Да, это теперь символ в строке и так вы использовали функцию INT (I).

+0

Я бы использовал проверку данных, но это для конкретной цели экзаменационной бумаги, и этот вопрос заключается в том, когда вам нужно превратить псевдокод непосредственно в язык, на котором вы знаете, поэтому мы не можем изменить его или оптимизировать, иначе мы потеряем оценки на реальном экзамене, это просто практика на данный момент – user1655562

+0

Да, также в рабочем примере, который я опубликовал выше, мне пришлось сменить ключ на ключ. И я бы изменил для i в plainNum: для char в plainNum: для точек стиля. – Gopher

+0

О, я понимаю, что вы имеете в виду сейчас – user1655562

Смежные вопросы