Caeser移位输出

时间:2017-02-25 03:01:40

标签: python string encryption

我希望输出打印具有指定Caeser移位的字符串,但我的输出似乎在输出中重复输入。任何帮助将不胜感激。

override func viewDidLoad() {
    super.viewDidLoad()

    // Observe the notification that the scroll view sends out whenever it finishes a scroll
    let notificationName = NSNotification.Name.NSScrollViewDidLiveScroll
    NotificationCenter.default.addObserver(self, selector: #selector(scrollViewDidScroll(_:)), name: notificationName, object: scrollView)

    // Post an intial notification to so the user doesn't have to start scrolling to see the effect
    scrollViewDidScroll(Notification(name: notificationName, object: scrollView, userInfo: nil))
}

// Whenever the scroll view finished scrolling, we will start coloring the rows
// based on how much they are visible in the scroll view. The idea is we will
// perform hit testing every n-pixel in the scroll view to see what table row
// lies there and change its color accordingly
func scrollViewDidScroll(_ notification: Notification) {
    // The data's part of a table view begins with at the bottom of the table's header
    let topEdge = tableView.headerView!.frame.height
    let bottomEdge = scrollView.bounds.height

    // We are going to do hit-testing every 10 pixel. For best efficiency, set
    // the value to your typical row's height
    let step = CGFloat(10.0)

    for y in stride(from: topEdge, to: bottomEdge, by: step) { 
        let point = NSPoint(x: 10, y: y)                        // the point, in the coordinates of the scrollView
        let hitPoint = scrollView.convert(point, to: tableView) // the same point, in the coordinates of the tableView

        // The row that lies that the hitPoint
        let row = tableView.row(at: hitPoint)

        // If there is a row there
        if row > -1 {
            let rect = tableView.rect(ofRow: row)                     // the rect that contains row's view
            let rowRect = tableView.convert(rect, to: scrollView)     // the same rect, in the scrollView's coordinates system
            let visibleRect = rowRect.intersection(scrollView.bounds) // the part of the row that visible from the scrollView
            let visibility = visibleRect.height / rowRect.height      // the percentage of the row that is visible

            for column in 0..<tableView.numberOfColumns {
                // Now iterate through every column in the row to change their color
                if let cellView = tableView.view(atColumn: column, row: row, makeIfNecessary: true) as? NSTableCellView {
                    let color = cellView.textField?.textColor

                    // The rows in a typical text-only tableView is 17px tall
                    // It's hard to spot their grayness so we exaggerate the
                    // alpha component a bit here:
                    let alpha = visibility == 1 ? 1 : visibility / 3

                    cellView.textField?.textColor = color?.withAlphaComponent(alpha)
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您的错误发生在space = string.replace(" ","#")

这里发生的是你获得整个字符串但字母不在字母中的字符改为#

要解决此问题,只需删除space = string.replace(" ","#")并将coded=coded+space更改为coded=coded+"#"

# Prompt the user for a string and integer
string = input('Enter the string to encode: ')
i = int(input('Enter integer value to use: '))

# Create a for loop based on the characters in the string
# Build a new string of encoded characters based on the given rules
string= string.upper()
coded=""
for y in string:
    if y in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
        num=ord(y)
        num+=i
        if num>ord("Z"):
            num-=26
        elif num<ord("A"):
            num+=26
        coded=coded+chr(num)
    else:
        coded=coded+"#"


# Display the new string
print("Your encoded message is:",coded)