Programming with a Sporadic Shift Key There's something wrong with your keyboard. The Shift key has a mind of its own. Every time you type a character you have no idea whether it will come out shifted or not (though it is 50-50). Besides the standard character keys, nothing on the keyboard is functional. There is no mouse or other means of input.
Somehow you know the only way to fix things is to write a program that outputs Dear Computer, please stop giving me shift! to stdout. Luckily your IDE is open and you are capable of running a program, but of course as you type it you won't know which characters will be shifted.
What sequence of key-presses would you use to write a program that has the best possible chance of working on the first try?
Details
You are using a standard QWERTY keyboard, so there are 50 character keys you can press.
Unshifted versions (47 only):
`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./

Shifted versions (47 only):
~!@#$%^&amp;*()_+QWERTYUIOP{}|ASDFGHJKL:&quot;ZXCVBNM&lt;&gt;?

The last 3 keys are Enter, Tab, and Space, which are the same shifted and unshifted.
A sequence of N of these characters has 2N - (whitespace char count) ways it might have been output if you had typed them with your faulty keyboard. For example, typing A Space m might have yielded
a m or A m or a M or A M.
Write a program these characters and look at all of its 2N - (whitespace char count) possible shift combinations. The more combinations that output Dear Computer, please stop giving me shift! the better. Your score is the number of working combinations (valid programs) divided by the total number of combinations. The highest score wins.
Notes

For valid programs, printing precisely Dear Computer, please stop giving me shift! and nothing else to stdout should be the only side effect.
Valid programs should not take input.
Invalid programs can do anything whatsoever.
Comments may be used anywhere.
Whitespace answers cannot win because getting a 100% score is (relatively) trivial. You may still submit a Whitespace solution for fun.
Your program must be at most 1024 characters long.

Update: Changed Stop giving me shift! to Dear Computer, please stop giving me shift! to allow for more complex answers. Existing answers may stay the way they are if desired.
Applescript, 20 (100%)
I believe I can claim a perfect score here:

The Applescript Editor (my IDE) automatically converts all keywords to lower case upon compiling/running
Furthermore, defined variable and handler names are case insensitive - For example if a handler myFunc is defined, then the IDE will automatically convert MYFUNC, myfunc, MyFuNc, etc references to myFunc
I have only used alphabetic characters, spaces and newlines, so I don't need to worry about shifted numbers and punctuation characters.

Here is is:
global f
on j at a
set end of a to j
end
on c at a
j at a
j at a
end
on k at a
repeat with q in system info
j at a
end
end
on w at a
set d to count a
j at a
return string id d
end
on z at a
set end of f to a
end
set h to space
set y to h as list
k at y
k at y
set x to w at y
c at y
c at y
c at y
c at y
c at y
set q to w at y
k at y
c at y
c at y
copy y to b
c at y
set s to w at y
set d to w at y
set f to d as list
k at b
k at b
set a to w at b
c at b
j at b
set e to w at b
set y to w at b
set g to w at b
set d to w at b
set i to w at b
c at b
set l to w at b
set m to w at b
set n to w at b
set o to w at b
set p to w at b
j at b
set r to w at b
z at e
z at a
z at r
z at h
z at s
set s to w at b
set t to w at b
set u to w at b
set v to w at b
z at o
z at m
z at p
z at u
z at t
z at e
z at r
z at q
z at h
z at p
z at l
z at e
z at a
z at s
z at e
z at h
z at s
z at t
z at o
z at p
z at h
z at g
z at i
z at v
z at i
z at n
z at g
z at h
z at m
z at e
z at h
z at s
z at d
z at i
z at y
z at t
z at x
f as text

Thanks to the help of @kernigh and @paradigmsort, this is now 1020 bytes, just squeaking in under the 1024 byte limit!
Explanation:

The characters for output string are generated using string id &lt;n&gt;, which returns the character corresponding to the ascii value n
Because we are avoiding digits, each n has has to be generated by more fundamental means.  Specifically we generate each n by counting a list, and then adding another item to that list.  The repeat with q in system info allows us to do this 16 times, as system info always returns a 16-item list.
Using a similar technique, we add each character of the final string in turn to a list.
Finally that last list is coerced to text and printed.

Output:
Using the osascript interpreter, but the Applescript Editor works just as well:
$ # Interpret as-is:
$ osascript dearcase.scpt
Dear Computer, please stop giving me shift!
$ 
$ # Interpret all lower case:
$ tr A-Z a-z &lt; dearcase.scpt | osascript
Dear Computer, please stop giving me shift!
$ 
$ # Interpret all upper case:
$ tr a-z A-Z &lt; dearcase.scpt | osascript
Dear Computer, please stop giving me shift!
$
$ # Interpret random case for each letter:
$ while read; do for ((i=0;i&lt;${#REPLY};i++)); do c=&quot;${REPLY:i:1}&quot;; if ((RANDOM%2)); then printf &quot;%s&quot; &quot;$(tr a-z A-Z &lt;&lt;&lt; &quot;$c&quot;)&quot;; else printf &quot;%s&quot; &quot;$(tr A-Z a-z &lt;&lt;&lt; &quot;$c&quot;)&quot;; fi; done; echo; done &lt; dearcase.scpt | osascript
Dear Computer, please stop giving me shift!
$