#python
Вопрос:
Итак, у меня есть этот код:
# Imports
import sys
import random
# Data Collection
UserID = int(sys.argv[1])
KeyA = int(sys.argv[2])
PI = 3.14159265359
# Calculation
PIUserID = UserID * PI
PIKeyA = KeyA * PI
PIKeyB = PIKeyA 4
CalcUserID = PIUserID / 9
CalcUserID2 = PIUserID - PIKeyA
CalcKeys = (PIKeyA CalcUserID2) / (((PIKeyB - PIKeyA) * 2) 1)
MidCalcKeyBC = str(PIKeyB / PI)
ResultUserID = UserID
ResultKeyA = KeyA
ResultKeyB = MidCalcKeyBC.split('.')[0]
ResultKeyC = MidCalcKeyBC.split('.')[1]
# Finish!
print("User ID: " str(ResultUserID))
print("Key A: " str(ResultKeyA))
print("Key B: " str(ResultKeyB))
print("Key C: " str(ResultKeyC))
print("Calc Keys: " str(CalcKeys))
print("")
StrCalcKeys = str(CalcKeys)
StrCalcUserID = str(CalcUserID)
print("Success: " str(CalcKeys[:len(StrCalcKeys) - 1]) == str(CalcUserID[:len(StrCalcUserID) - 1]))
Предполагается, что он вычисляет ключ и ключ, просто получая идентификатор пользователя и ключ.
И когда я запускаю его так: python CalculateLogin.py 12 376
я получаю ошибку:
Traceback (most recent call last):
File "f:/Unity/Projects/Project Astra/Assets/Scripts/createCredentials.py", line 35, in <module>
print("Success: " str(CalcKeys[:len(StrCalcKeys) - 1]) == str(CalcUserID[:len(StrCalcUserID) - 1]))
TypeError: 'float' object is not subscriptable
как раз тогда, когда это должно быть сказано Success: True
.
Комментарии:
1. Что вы собираетесь
CalcKeys[:len(StrCalcKeys) - 1]
делать?2. Вы имели в виду:
str(StrCalcKeys[:len(StrCalcKeys) - 1])
?3. @quamrana
StrCalcKeys
-это уже строка, хотя4.
CalcKeys
иCalcUserID
оба числа неstr
являются .5. Своими словами, как вы думаете, что означает сообщение об ошибке? Как вы думаете, какая часть этой строки кода вызывает проблему? Теперь посмотрите на это внимательно. Используете ли вы переменные, которые собираетесь использовать? (Подсказка: почему у вашей программы есть отдельные
CalcKeys
иStrCalcKeys
значения? Какой из них содержит строку? Вы пытаетесь использовать строку в этом коде?)
Ответ №1:
Похоже, вы злоупотребляете этой str()
функцией, чтобы печатать вещи
Например, вы должны предпочесть любой из этих
print("User ID: {}".format(ResultUserID))
print(f"User ID: {ResultUserID}")
Тогда в вашей строке успеха CalcKeys
и CalcUserID
находятся поплавки. Предполагая , что они были строками , и вы имели в виду str(CalcKeys)[:len(StrCalcKeys) - 1]
, что [:len(s) - 1]
это точно то же самое, что и вся строка для любой строки s
, так что, похоже, вы хотели сравнить только значения, которые не обязательно должны быть строками
print("Success: {}".format(CalcKeys == CalcUserID))
Комментарии:
1. Хотя это полностью то, что мне было нужно, я хочу удалить последнюю цифру из — за странности калькулятора, и именно поэтому у меня есть «СТРОКА»[:len(s) — 1]
2. Вам нужно будет вычесть 2, чтобы удалить последний символ. Что вы имеете в виду под «странностями калькулятора»? Если вы имеете в виду арифметику с плавающей запятой, то вы можете использовать
round
значения с определенной десятичной запятой перед сравнением или сformat
плавающей запятой, чтобы сделать то же самое при печати